css的grid布局

225 阅读3分钟

grid布局的背景

flex布局在一维方向上比较简单,而grid布局在二维方向上比较方便,它将网页划分成一个个网格。

grid基本语法


Grid布局与Flex布局有一定的相似性,display:grid或者display:inline-grid。即可成为grid布局的container。grid和inline-grid区别在于前者另起一行,后者不重起一行;以及在容器大小上inline-grid的容器宽度会尽力小。

container语法

  1. grid-template-columns和grid-template-rows:grid-template-columns属性定义每一列的列宽,grid-template-rows属性定义每一行的行高。单元格的大小是固定的,但是容器的大小不确定。为了方便表示比例关系,网格布局提供了fr关键字。如果两列的宽度分别为1fr和2fr,就表示后者是前者的两倍。使用fr会尽量占满容器
.container {
  display: grid;
  grid-template-columns: 100px 100px 100px;
  grid-template-rows: 100px 100px 100px;
}

如上代码就规定了一个3*3的表格。

.container {
  display: grid;
  grid-template-columns: [c1] 100px [c2] 100px [c3] auto [c4];
  grid-template-rows: [r1] 100px [r2] 100px [r3] auto [r4];
}

使用方括号,指定每一根网格线的名字,方便以后的引用。
2. grid-row-gap属性设置行与行的间隔(行间距),grid-column-gap属性设置列与列的间隔(列间距)grid-gap属性是grid-column-gap和grid-row-gap的合并简写形式grid-gap: <grid-row-gap> <grid-column-gap>;如果grid-gap省略了第二个值,浏览器认为第二个值等于第一个值。该属性有效解决了平均布局的问题,不在需要负margin的技巧
3. grid-template-areas 属性

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

多个单元格合并成一个区域的写法如下,某些区域不需要利用,则使用"点"(.)表示。


grid-template-areas: "header header header"
                     "aside main ad"
                     "footer footer footer";

区域的命名会影响到网格线。每个区域的起始网格线,会自动命名为区域名-start,终止网格线自动命名为区域名-end,水平网格线和垂直网格线都有名字
4. grid-auto-columns 属性,grid-auto-rows属性用来设置,浏览器自动创建的多余网格的列宽和行高。

container排列语法

  1. justify-items 属性,justify-items属性设置单元格内容的水平位置(左中右),
  2. align-items 属性,align-items属性设置单元格内容的垂直位置(上中下)。
.container {
  justify-items: start | end | center | stretch;
  align-items: start | end | center | stretch;
}
  1. justify-content属性是整个内容区域在容器里面的水平位置(左中右),align-content属性是整个内容区域的垂直位置(上中下)。
.container {
  justify-content: start | end | center | stretch | space-around | space-between | space-evenly;
  align-content: start | end | center | stretch | space-around | space-between | space-evenly;  
}

item语法

  1. grid-column-start 属性,
    grid-column-end 属性,
    grid-row-start 属性,
    grid-row-end 属性
    四条属性指定项目的四个边框,分别定位在哪根网格线。
    grid-column 属性,
    grid-row 属性
    是缩写形式用/隔开
  2. grid-area属性指定项目放在哪一个区域。
  3. justify-self 属性,align-self 属性,用来定制item属性

关于border

grid划分表格时划分的是内容区与border无关

gap和空余

gap只在行之间和列之间存在,空余由justify-content和align-content控制

写得太好啦!!>www.ruanyifeng.com/blog/2019/0…