CSS3学习之网格布局grid

CSS3学习之网格布局grid

CSS3 网格布局(Grid)常用属性

容器属性

display: grid;display: inline-grid;
将元素定义为网格容器,子元素自动成为网格项。

grid-template-columnsgrid-template-rows
定义网格的列和行大小。支持固定值(如 px)、百分比(%)或弹性单位(fr)。
示例:grid-template-columns: 100px 1fr 2fr; 表示三列,第一列固定宽度,后两列按比例分配剩余空间。

grid-template-areas
通过命名区域布局,需配合子项的 grid-area 使用。
示例:

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

gap(或 grid-gap
设置行与列之间的间距。

示例:gap: 10px 20px; 分别定义行间距和列间距。

justify-itemsalign-items
控制网格项在单元格内的水平/垂直对齐方式(如 startcenterend)。

justify-contentalign-content
当网格总尺寸小于容器时,控制整个网格的对齐方式(如 space-aroundspace-between)。

子项属性

grid-columngrid-row
定义子项占据的网格线范围。
示例:grid-column: 1 / 3; 表示从第1列跨越到第3列。

grid-area
为子项指定命名区域(需容器使用 grid-template-areas)或直接定义位置。
示例:grid-area: 1 / 1 / 3 / 2;(行起始/列起始/行结束/列结束)。

justify-selfalign-self
单独控制某个子项在单元格内的对齐方式。


实用案例

案例1:基本网格布局

.container {
  display: grid;
  /* 定义列轨道(宽度):3列,分别为 100px、1fr、20% */
  grid-template-columns: 100px 1fr 20%;
  /* 定义行轨道(高度):2行,分别为 50px、auto(自适应内容) */
  grid-template-rows: 50px auto;
  /* 轨道间距(行间距 + 列间距) */
  gap: 10px; /* 等价于 row-gap: 10px; column-gap: 10px; */
}
<div class="grid-container">
  <div class="item">1</div>
  <div class="item">2</div>
  <div class="item">3</div>
</div>
repeat(次数,轨道大小)
  • 次数:指定轨道重复的数量(可以是具体数字,或 auto-fit/auto-fill 等关键字)。
  • 轨道大小:每次重复的轨道尺寸(如 100px1frminmax(100px, 1fr) 等)。
  • 1. 固定数量的等宽 / 等高轨道

    例如,创建 3 列,每列宽度为 100px

.container {
  display: grid;
  grid-template-columns: repeat(3, 100px); /* 等价于 100px 100px 100px */
}
2. 结合 fr 单位创建弹性轨道

创建 4 列,每列宽度按比例分配剩余空间:

.container {
  grid-template-columns: repeat(4, 1fr); /* 等价于 1fr 1fr 1fr 1fr */
}

案例2:响应式布局(auto-fit/auto-fill

结合 minmax() 实现自适应列数(根据容器宽度自动调整):

.grid-container {
  display: grid;
  grid-template-columns: repeat(auto-fill, minmax(200px, 1fr));
}

解释:自动填充尽可能多的列,每列最小200px,空间不足时换行。

案例3:复杂区域布局
<div class="container">
  <header>Header</header>
  <aside>Sidebar</aside>
  <main>Main</main>
</div>

网格项属性(关键)

1. 定位网格项(通过网格线)
.item {
  /* 列方向:从第 1 根线到第 3 根线(跨 2 列) */
  grid-column: 1 / 3; /* 等价于 grid-column-start: 1; grid-column-end: 3; */
  /* 行方向:从第 2 根线到第 4 根线(跨 2 行) */
  grid-row: 2 / 4;
}
  • 可使用 span 表示跨越的轨道数:grid-column: 1 / span 2(从第 1 列开始,跨 2 列)。
2. 定位网格项(通过区域名)

配合容器的 grid-template-areas 使用:

.header {
  grid-area: header; /* 对应容器中定义的 header 区域 */
}
.sidebar {
  grid-area: sidebar;
}
3. 对齐方式
  • 容器内对齐(所有项整体):
    .container {
      justify-content: center; /* 水平方向对齐(主轴) */
      align-content: center;   /* 垂直方向对齐(交叉轴) */
    }

    单个项对齐

  • .item {
      justify-self: end; /* 单个项水平对齐 */
      align-self: center; /* 单个项垂直对齐 */
    }

3. 多列布局模块(column-* 属性)

CSS 专门提供了 column-* 属性,适合文本内容的多列排版(类似报纸排版)。

.container {
  columns: 3; /* 分为3列 */
  column-gap: 20px; /* 列间距 */
  column-rule: 1px solid #***c; /* 列分隔线 */
/* 不允许盒子被切割*/
break-inside:avoid-column;
-webkit-column-break-inside:avoid;
}

特点

  • 内容会自动在列之间流动
  • 适合纯文本或相似元素的排版
  • 可通过 column-width 指定最小列宽(自动计算列数)

.container {
  display: grid;
  grid-template-areas: 
    "header header"
    "sidebar main";
  grid-template-columns: 150px 1fr;
}
header { grid-area: header; }
aside { grid-area: sidebar; }
main { grid-area: main; }

效果:顶部通栏Header,左侧固定宽度Sidebar,右侧自适应Main。

Grid 布局优势

  • 二维布局:同时控制行和列,比 Flexbox(一维)更适合复杂布局。
  • 精确控制:通过网格线、区域名等方式精确定位元素。
  • 响应式友好:结合 auto-fit 和 minmax() 轻松实现自适应。

Grid 布局适合整体页面框架、卡片网格、仪表盘等复杂布局场景,与 Flexbox 配合使用可覆盖绝大多数布局需求。

转载请说明出处内容投诉
CSS教程网 » CSS3学习之网格布局grid

发表评论

欢迎 访客 发表评论

一个令你着迷的主题!

查看演示 官网购买