网格布局(Grid)

98 阅读3分钟

网格布局(Grid)是最强大的 CSS 布局方案。它将网页划分成一个个网格,可以任意组合不同的网格,做出各种各样的布局。

容器属性

display: grid

将容器设置为网格布局,是使用网格布局的必要条件

grid-template-columns / grid-template-rows

grid-template-columns 设置每一列的宽度

grid-template-rows 设置每一行的高度

两种属性对应的值可以为宽度和高度的集合,单位可以为px、%等长度单位,也可以是fr(片段,将宽度或者高度进行等分)

例如

box1 {
    display: grid;
    grid-template-columns: 200px 200px 200px; 
    grid-template-rows: 200px 200px 200px;
}

box2 {
    width: 600px;
    height: 600px;
    display: grid;
    grid-template-columns: 33.3% 33.3% 33.3%; 
    grid-template-rows: 33.3% 33.3% 33.3%;
}

box3 {
    width: 600px;
    height: 600px;
    display: grid;
    grid-template-columns: 1fr 1fr 1fr; 
    grid-template-rows: 1fr 1fr 1fr;
}

但是上方写法存在大量的重复的高度和宽度的数据,进而可使用repeat函数

repeat(重复次数, 重复长度集合1fr/200px/33.3%/ 1fr 2fr 3fr);

关键字

auto-fill 表示自动充满整行或者整列

grid-template-columns: repeat(auto-fill, 100px);

auto 关键字表示由浏览器自己决定长度,需要配合固定宽度一起使用

grid-template-columns: 100px auto 100px;

minmax() 函数产生一个长度范围,表示长度就在这个范围之中。它接受两个参数,分别为最小值和最大值。

grid-template-columns: 1fr 1fr minmax(100px, 1fr); 上面代码中,minmax(100px, 1fr)表示列宽不小于100px,不大于1fr

高级用法

repeat(auto-fill, minmax(260px, 1fr));每个单元格不能小于260px,小于260px后自动减少一列

grid-gap

grid-gap设置行与行和列与列的间隔

grid-row-gap属性设置行与行的间隔(行间距)

grid-column-gap属性设置列与列的间隔(列间距)

grid-auto-flow属性

用于设置子元素的顺序

row 先行后列,为默认值

column 先列后行

row dense 表示"先行后列",并且尽可能紧密填满,尽量不出现空格

column dense 表示"先列后行",并且尽量填满空格

justify-items / align-items / place-items

justify-items属性设置单元格内容的水平位置(左中右)

align-items属性设置单元格内容的垂直位置(上中下)

两个属性值如下

  • start:对齐单元格的起始边缘。
  • end:对齐单元格的结束边缘。
  • center:单元格内部居中。
  • stretch:拉伸,占满单元格的整个宽度(默认值)。

place-items属性是align-items属性和justify-items属性的合并简写形式。

place-items: start end; 如果省略第二个值,则浏览器认为与第一个值相等。

容器内子组件属性

grid-row / grid-column

grid-column属性是grid-column-startgrid-column-end的合并简写形式

grid-row属性是grid-row-start属性和grid-row-end的合并简写形式。

/* 横向对应两列 纵向对应两行*/
.item-1 {
  grid-column: 1 / 3;
  grid-row: 1 / 3;
}
/* 等同于 */
.item-1 {
  grid-column-start: 1;
  grid-column-end: 3;
  grid-row-start: 1;
  grid-row-end: 3;
}

参考