简介 Grid布局是css布局当中一种非常强大的布局方式,他是一个二维系统,通过处理行和列来实现布局方式。主要涉及的概念有网格容器、网格项、网格线、网格单元、网格轨迹、网格区域等。
用法 网格容器只需要将display 属性定义成grid 或者inline-grid 就可以了,然后通过grid-template-columns: ...| ...;
和grid-template-row: ...| ...;
来定义网格的列和行,他们的取值就是网格轨迹的大小。
1.1.0 display 属性 1 2 3 // 开启 grid 网格布局 display : grid;display : inline-grid;
注意,设为网格布局以后,容器子元素(项目)的float、display: inline-block、display: table-cell、vertical-align 和 column-*等设置都将失效。
1.2.0 grid-template-columns 属性,grid-template-rows 属性 容器指定了网格布局以后,接着就要划分行和列。grid-template-columns属性定义每一列的列宽,grid-template-rows属性定义每一行的行高。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 .container { display : grid; grid-template-columns : 100px 100px 100px ; grid-template-rows : 100px 100px 100px ; } .container { display : grid; grid-template-columns : 33.33% 33.33% 33.33% ; grid-template-rows : 33.33% 33.33% 33.33% ; } .container { display : grid; grid-template-columns : repeat (3 , 33.33% ); grid-template-rows : repeat (3 , 33.33% ); } grid-template-columns : repeat (auto-fill, 100px );grid-template-columns : 100px 1 fr 2 fr;grid-template-columns : 1 fr 1 fr minmax (100px , 1 fr);grid-template-columns : 100px auto 100px ;.container { display : grid; grid-template-columns : [c1] 100px [c2] 100px [c3] auto [c4]; grid-template-rows : [r1] 100px [r2] 100px [r3] auto [r4]; }
1.3.0 grid-row-gap 属性,grid-column-gap 属性,grid-gap 属性 设置 网格 行与行 列与列 的间隔
1 2 3 4 5 6 7 .container { grid-row -gap : 20px ; grid-column -gap : 10px ; } .container { grid-gap : 20px 10px ; }
1.4.0 grid-template-areas 属性 给单元格划分区域
1 2 3 4 5 6 7 .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' ; } // a b c d e f g h i 每个字母对应9 个单元格中其中一个单元格(网格子项)
1.5.0 grid-auto-flow 属性 设置网格 排版的 原则;
1 2 3 4 5 默认值 row 先排行再排列;column 先列后行;row-dense grid-auto-flow : row; grid-auto-flow : column; grid-auto-flow : row-dense; grid-auto-flow : column-dense;
1.6.0 justify-items 属性;align-items 属性;place-items 属性 单元格内容的对齐方式:
1 2 3 4 5 6 .container { justify-items: start | end | center | stretch; align-items : start | end | center | stretch; } place-items: start end;
1.7.0 justify-content 属性;align-content 属性;place-content 属性 justify-content属性是整个内容区域在容器里面的水平位置(左中右),align-content属性是整个内容区域的垂直位置(上中下);
1 2 3 4 5 6 .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; } place-content : space-around space-evenly;
1.8.0 grid-auto-columns 属性和 grid-auto-rows 属性 当网格中有子项目 存在于 布局之外时,grid-auto-columns 属性和 grid-auto-rows 属性用来设置浏览器自动创建的多余网格的列宽和行高。
它们的写法与 grid-template-columns 和 grid-template-rows 完全相同。如果不指定这两个属性,浏览器完全根据单元格内容的大小,决定新增网格的列宽和行高。
二、项目属性 2.1 grid-column-start/end、grid-row-start/end 属性 根据容器划分的网格线,定义项目边框的起始、结束的网格线位置的一些属性;
2.1.1 基础用法
grid-column-start属性:左边框所在的垂直网格线;
grid-column-end属性:右边框所在的垂直网格线;
grid-row-start属性:上边框所在的水平网格线;
grid-row-end属性:下边框所在的水平网格线;
1 2 3 4 5 6 7 .item-1 { grid-column-start : 1 ; grid-column-end : 3 ; grid-row-start : 2 ; grid-row-end : 4 ; }
指定具体网格线的时候,除了使用数值,也可以使用 网格线名称;
2.1.2 span 关键字
这四个属性的值还可以使用 span 关键字,表示”跨越”,即左右边框(上下边框)之间跨越多少个网格。
1 2 3 .item-1 { grid-column-start : span 2 ; }
使用这四个属性,如果产生了项目的重叠,则使用 z-index 属性指定项目的重叠顺序。
2.1.3 合并简写写法
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 .item-1 { grid-column : 1 /3 ; grid-row : 2 /4 ; } .item-1 { grid-column : 1 /span 2 ; grid-row : 2 /span 3 ; } .item-1 { grid-column : 1 ; grid-row : 1 ; }
2.2 grid-area 属性 属性指定项目放在哪一个区域,可以用 区域名称指定,也可以用 网格线 位置指定;
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 .container-areas { display : inline-grid; grid-template-columns : 100px 100px 100px ; grid-template-rows : 100px 100px 100px ; grid-template-areas : 'backBtn title header' 'nav container container' 'footer . .' ; } .areasitem-backBtn { background-color : #c077af ; grid-area : backBtn; color : #fff ; } .areasitem-header { background-color : #4dc7ec ; grid-area : header; color : #fff ; } .item-1 { background-color : #ef342a ; grid-area : 2 / 4 / 3 / 1 ; }
2.3 justify-self、align-self 属性 设置单元格内容的水平、垂直位置,类似于 justify-items、align-items 相同的用法,但是只作用于 单个项目;
1 2 3 4 .item { justify-self : start | end | center | stretch; align-self : start | end | center | stretch; }
合并简写形式:
1 place-self: center center;