CSS Grid 布局(网格布局)是 CSS 中一个非常强大和灵活的布局系统,它旨在通过创建行和列来简化复杂网页的设计。Grid 布局非常适合创建复杂的页面布局,如网页的头部、导航栏、内容区域和页脚等。下面将深入介绍 CSS Grid 布局的一些关键概念和用法。

1. 基本概念

  • 容器(Grid Container):一个设置了 display: grid;display: inline-grid; 的元素。所有直接子元素(Grid Items)将成为网格的一部分。
  • 项目(Grid Items):Grid 容器的直接子元素。
  • 行(Grid Rows)列(Grid Columns):由 grid-template-rowsgrid-template-columns 属性定义的虚拟线。
  • 单元格(Grid Cell):网格中的最小单位,由交叉的行和列定义。
  • 区域(Grid Area):由四个网格线包围的一组网格单元格。
  • 线(Grid Line):形成网格结构的分界线,可以是水平的(行线)或垂直的(列线)。

2. 创建网格

要创建一个 Grid 布局,首先需要指定一个容器元素,并设置其 display 属性为 gridinline-grid

.container {
  display: grid;
  grid-template-columns: 100px 100px 100px; /* 创建三列,每列100px宽 */
  grid-template-rows: 50px 50px; /* 创建两行,每行50px高 */
}

3. 网格项目的定位

网格项目(Grid Items)默认会按照源代码的顺序排列在网格中。但你可以使用 grid-column-startgrid-column-endgrid-row-startgrid-row-end 等属性来控制它们在网格中的确切位置。

.item1 {
  grid-column-start: 2;
  grid-column-end: 4;
  grid-row-start: 1;
  grid-row-end: 3;
}

或者使用更简短的 grid-columngrid-row 属性:

.item1 {
  grid-column: 2 / 4;
  grid-row: 1 / 3;
}

4. 网格区域

可以使用 grid-area 属性为网格项目命名一个区域,并在容器中使用 grid-template-areas 属性来定义这些区域的位置。

.container {
  display: grid;
  grid-template-areas:
    "header header header"
    "main main sidebar"
    "footer footer footer";
}

.header { grid-area: header; }
.main { grid-area: main; }
.sidebar { grid-area: sidebar; }
.footer { grid-area: footer; }

5. 间距

可以通过 grid-gap(简写,现在推荐使用 gaprow-gapcolumn-gap)属性来设置网格行和列之间的间距。

.container {
  display: grid;
  grid-template-columns: 100px 100px 100px;
  grid-template-rows: 50px 50px;
  gap: 10px; /* 简写,等同于 row-gap: 10px; column-gap: 10px; */
}

6. 响应式设计

Grid 布局非常适合响应式设计,你可以使用媒体查询(Media Queries)来根据屏幕尺寸改变网格的布局。

@media (max-width: 600px) {
  .container {
    grid-template-columns: 1fr; /* 在小屏幕上,所有列合并为一列 */
  }
}

CSS Grid 布局是一个功能强大的工具,可以极大地提高网页布局的效率和灵活性。通过学习和实践上述概念和技巧,你可以开始构建更复杂、更响应式的网页布局。