Grid网格布局

系统管理员 2023-01-03 04:11 326阅读 0赞

简介

Flex布局时一维的布局,即水平或垂直方向的布局。而Grid布局则划分成“行”和“列”,产生单元格,可以看作是二维的布局。Grid布局远比Flex布局强大

容器

定义网格布局,定义网格布局后,容器子元素的float、display:inline-block、display:table-cell、vertical-align和column-*都将失效。

  1. .div {
  2. display: grid
  3. display: inline-grid; //容器元素可以是块元素或行内元素
  4. }

容器属性

  • grid-template-columns | grid-template-rows

    .container {

    1. display: grid;
    2. grid-template-columns: 30px 30px 30px; //定义有多少列,且每列宽度为多少
    3. grid-template-rows: 33.33% 33.33% 33.33%; //定义有多少行,且每行行高为多少
    4. //单位可以是绝对单位,也可以是百分比

    }

  1. repeat(num, value)
    可以简化重复的值,避免重复写同样的值,尤其是网格比较多时, num为重复次数,value为重复的值(可以单个,如30px;或多个,如30px 20px 50px)。

    .container {

    1. display: grid;
    2. grid-template-columns: repeat(3, 30px);
    3. grid-template-rows: repeat(3,33.33%);

    }

  2. auto-fill关键字
    有时候单元格大小固定,但容器却不固定,如希望每行容纳尽可能多的单元格,则使用auto-fill关键字表示自动填充

    .container {

    1. display: grid;
    2. grid-template-columns: repeat(auto-fill, 100px);

    }

  3. fr关键字
    表示比例关系,fr(fraction的缩写,以为片段)

    .container {

    1. display: grid;
    2. grid-template-columns: 1fr 2fr; // 表示两列,第二列比第一列宽2倍
    3. //grid-template-columns: 150px 1fr 2fr; //可以与绝对单位结合,表示第一列占150px,然后第二、三列按比例瓜分剩余空间(如有的话)

    }

  4. minmax()
    定义一个长度范围,表示最小值和最大值

    .container {

    1. display: grid;
    2. grid-template-columns: 1fr 1fr minmax(100, 1fr); //表示列宽不小于100px,不大于1fr

    }

  5. auto关键字
    定义自适应长度

    .container {

    1. display: grid;
    2. grid-template-columns: 50px auto 100px; //第二列宽度=容器宽度-50px-100px,最小值为0

    }

  6. 网格线名称
    定义网格线名称,方便引用

    .container {

    1. display: grid;
    2. grid-template-columns: [c1] 100px [c2] 100px [c3] 30px [c4];
    3. grid-template-columns: [r1] 100px [r2] 30px [r3] 40px [r4 end4]; //也可以在一个[ ]中定义两个名称,如[r4 end4]

    }

    • grid-column-gap | grid-row-gap | grid-gap
      定义列间,行间间隔大小。根据最新标准,这些属性可省略前缀grid-,即column-gap | row-gap | gap

    .container {

    1. display: grid;
    2. grid-column-gap: 10px; //表示列间间隔10px
    3. grid-row-gap: 10px; //表示行间间隔10px

    }

    .container {

    1. display: grid;
    2. grid-gap: 10px 8px; //grip-gap时grip-column-gap和grip-row-gap的合并,表示列间间隔10px,行间间隔8px

    }

    • grid-template-areas
      指定区域,一个区域可由单个或多个单元格组成
      区域名会影响道网格线,会自动命令该区域起始网格线为【区域名-start】,终止网格线为【区域名-end】

    .container {

    1. display: grid;
    2. grid-template-columns: 100px 10px 100px;
    3. grid-template-rows: 100px 100px 100px;
    4. grid-template-areas: 'a b c'
    5. 'd e f'
    6. g h i'; //如果某个区域不需要利用,则使用“点” . 表示

    }

    • grid-auto-flow
      定义子元素排列顺序

row(默认值): 即“先行后列”
column: 即“先列后行”
row dense: 表示”先行后列”,并且尽可能紧密填满,尽量不出现空格
column dense: 表示”先列后行”,并且尽可能紧密填满,尽量不出现空格

  • justify-items | align-items | place-items
    justify-items定义单元格内容水平位置,align-items定义单元格内容垂直位置
    place-items是前两者的合并简写

start: 左(上)对齐
end: 右(下)对齐
center: 居中
stretch: 拉伸,占满整个单元格

  • justify-content | align-content | place-content
    定义整个内容区域的对齐方式,justify-content定义水平方向,align-content定义垂直方向,place-content是前两者的合并简写

start: 左(上)对齐
end: 右(下)对齐
center: 居中
stretch: 拉伸,占满整个单元格
space-around:每个成员两侧(上下)间隔相等
space-between: 成员之间间隔相等,成员与容器边框没有间隔
space-evently: 成员之间,成员与容器边框之间的间隔相等

  • grid-auto-columns | grid-auto-rows
    当成员的指定位置,在现有网格之外,浏览器就会自动生成多余网格,以放置该成员

    .container {

    1. display: grid;
    2. grid-template-columns: 100px 10px 100px;
    3. grid-template-rows: 100px 100px 100px;
    4. grid-auto-rows: 30px; //表示自动生成网格的行高
    5. grid-auto-columns: 50px; //表示自动生成网格的列宽

    }

项目属性

  • grid-column-start | grid-column-end | grid-row-start | grid-row-end
    定义成员的位置,指定成员的四个边框分别定位在哪根网格线
    值可以为序号,也可以为网格名,也可以使用span value表示成员跨越多少个网格

grid-column-start:左边框所在的垂直网格线
grid-column-end:右边框所在的垂直网格线
grid-row-start: 上边框所在的水平网格线
grid-row-end: 下边框所在的水平网格线

  • grid-column | grid-row
    grid-column是grid-column-start和grid-column-end的合并简写
    grid-row是grid-row-start和grid-row-end的合并简写

    .item{

    1. grid-column: 1 / 2;
    2. grid-row: 1 / 3; // 也可以grid-row: 1 / span 2表示

    }
    等同于
    .item{

    1. grid-column-start: 1;
    2. grid-column-end: 2;
    3. grid-row-start: 1;
    4. grid-row-end: 3;

    }

  • grid-area
    指定成员放在哪个区域

    .item{

    1. grid-area: e; //指定成员在e单元格

    }
    // grid-area可以用作grid-row-start,grid-ros-end,grid-column-start,grid-column-end的合并简写,直接指定成员位置+
    .item {

    1. grid-area: <row-start> / <row-end> / <column-start> / <column-end>;

    }

  • jusify-self | align-self | place-self
    指定某个成员的对齐方式,与justify-items和align-items类似,但前者只作用于单个成员
    place-self则是前两者的合并简写

参考

阮一峰大神:http://www.ruanyifeng.com/blog/2019/03/grid-layout-tutorial.html

发表评论

表情:
评论列表 (有 0 条评论,326人围观)

还没有评论,来说两句吧...

相关阅读

    相关 Grid网格布局

    简介 > Flex布局时一维的布局,即水平或垂直方向的布局。而Grid布局则划分成“行”和“列”,产生单元格,可以看作是二维的布局。Grid布局远比Flex布局强大

    相关 css grid网格布局

    初次认识grid布局,看了官方的文档也很明了([官方文档][Link 1]),然后通过自己的语言和理解,重新对他进行了总结。 > 摘要:网格布局是网站设计的基础,CSS网格模