CSS Grid 布局的基本概念和常用属性?

Grid 是二维布局系统,可以同时控制行和列。

容器属性

.grid {
  display: grid;
  /* 定义列 */
  grid-template-columns: 200px 1fr 150px;  /* 固定+自适应+固定 */
  grid-template-columns: repeat(3, 1fr);    /* 三等分 */
  grid-template-columns: repeat(auto-fill, minmax(200px, 1fr)); /* 自适应列数 */

  /* 定义行 */
  grid-template-rows: 100px auto 100px;

  /* 间距 */
  gap: 16px;
  row-gap: 16px;
  column-gap: 24px;

  /* 对齐 */
  justify-items: start | end | center | stretch;  /* 水平 */
  align-items: start | end | center | stretch;    /* 垂直 */
  justify-content: center | space-between | ...;  /* 整体水平 */
  align-content: center | space-between | ...;    /* 整体垂直 */
}

项目属性

.item {
  /* 基于线定位 */
  grid-column: 1 / 3;    /* 从第1条线到第3条线(占2列)*/
  grid-row: 1 / 2;       /* 占第1行 */
  
  /* 跨越 */
  grid-column: span 2;   /* 跨2列 */
  
  /* 区域命名 */
  grid-area: header;     /* 放在名为 header 的区域 */
  
  /* 对齐 */
  justify-self: center;
  align-self: center;
}

fr 单位

fr(fraction)是比例单位:

grid-template-columns: 1fr 2fr 1fr;  /* 1:2:1 比例 */

repeat 和 auto-fill

/* 固定3列 */
grid-template-columns: repeat(3, 1fr);

/* 自适应:容器足够宽时自动增加列数 */
grid-template-columns: repeat(auto-fill, minmax(200px, 1fr));
/* 每列最小200px,空间富余时等比增大 */

grid-template-areas(命名区域)

.layout {
  display: grid;
  grid-template-columns: 200px 1fr;
  grid-template-rows: 60px 1fr 40px;
  grid-template-areas:
    "header header"
    "sidebar main"
    "footer footer";
}
.header { grid-area: header; }
.sidebar { grid-area: sidebar; }
.main { grid-area: main; }
.footer { grid-area: footer; }

Grid vs Flex

同分类其他题目