写给自己看的grid布局

1,451 阅读4分钟

grid布局又称网格布局,因为属性太多了,在整理大神阮一峰的博客后,我写下这篇博客,方便日后自己翻看的时候加深一点印象。

父盒子设置

行和列

在grid布局中,就跟flex一样,需要先设置父盒子的display:grid属性,然后来给父盒子设置有几行几列。

.container{
      display:grid;
      grid-template-rows:repeat(5,20%);//设置行
      grid-template-columns:repeat(5,20%);//设置列
}

上面代码设置了一个五行五列的盒子,每行占20%,如果想要单独设置,则不需要repeat()函数直接写就行了。

单位

单位可以写px、百分比、或者fr(份)auto(表示自己决定长短),使用fr关键字非常方便

行间隔与列间隔

grid-row-gap 属性 行间隔

grid-column-gap 属性 列间隔

grid-gap 属性 简写 用空格隔开

指定区域

grid-template-areas 属性

网格布局允许指定"区域"(area),一个区域由单个或多个单元格组成。grid-template-areas属性用于定义区域。

.container {
  display: grid;
  grid-template-columns: 100px 100px 100px;
  grid-template-rows: 100px 100px 100px;
  grid-template-areas: 'a b c'
                       'a e c'
                       'a h i';
}

上面代码分出了a b c e h i 6个区域

如果某些区域不需要利用,则使用"点"(.)表示。

使用了grid-template-areas之后,需要在子项目上配合使用grid-area才能生效。

上面的代码可以省略grid-template-columnsgrid-template-rows,同样可以生效。

areas非常方便,但是需要子项目上添加grid-area来对应,直观的同时却增加了代码量,大家看喜爱度使用。

设置子项目中的内容排列

  • justify-items 属性,设置单元格内容的水平位置(左中右)
  • align-items 属性,设置单元格内容的垂直位置(上中下)
  • place-items 属性 是上面属性的简写

属性:

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

设置整个内容区域的排列

  • justify-content 属性,整个内容区域在容器里面的水平位置(左中右)
  • align-content 属性,整个内容区域的垂直位置(上中下)
  • place-content 属性,简写

属性:

  • start - 对齐容器的起始边框
  • end - 对齐容器的结束边框。
  • center - 容器内部居中。
  • stretch - 项目大小没有指定时,拉伸占据整个网格容器。
  • space-around - 每个项目两侧的间隔相等。所以,项目之间的间隔比项目与容器边框的间隔大一倍。
  • space-between - 项目与项目的间隔相等,项目与容器边框之间没有间隔。
  • space-evenly - 项目与项目的间隔相等,项目与容器边框之间也是同样长度的间隔。

设置项目属性

设置项目从哪条线占用到哪条线

设置列的占用位

grid-column:start / end

是grid-column-start和grid-column-end的简写 从1开始 置

设置行的占用位置

grid-row:start / end 是grid-row-start和grid-row-end的简写 从1开始

指定项目放在哪个区域 和grid-template-areas配合使用

grid-area属性指定项目放在哪一个区域

.item-1 {
  grid-area: e;
}

放到e区域

grid-area属性还可用作grid-row-startgrid-column-startgrid-row-endgrid-column-end的合并简写形式,直接指定项目的位置

.item {
  grid-area: <row-start> / <column-start> / <row-end> / <column-end>;
}

单个项目用的内容排列

justify-self属性设置单元格内容的水平位置(左中右),跟justify-items属性的用法完全一致,但只作用于单个项目。

align-self属性设置单元格内容的垂直位置(上中下),跟align-items属性的用法完全一致,也是只作用于单个项目。

简写: place-self: <align-self> <justify-self>;

属性:

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

参考文档: 阮一峰的CSS Grid 网格布局教程