此文为个人理解文章笔记,详情请看 -> 阮一峰的Flex 布局教程:语法篇
w3school
前言
css 布局发展:table布局 -> div+css(float + position 方式布局) -> flexbox 弹性布局 -> gird 网格布局。Grid 网格布局是一个很强大布局方案。
Grid 网格布局是什么?
Grid 网格布局 是一个非常棒的布局解决方案,相比flex布局(一维布局,轴线布局),此为二维布局,适用于大规模的布局,只要布局比较规律,类似网格,就可以使用该布局方案。
兼容性
基本概念
Grid 网格布局 包含 容器(container) 和 项目(item)——这两个与flex 一样。容器中有两个方向(水平和垂直),即产生 行(row) 和 列(coloumn),交叉区域为 单元格(cell),划分网格的线叫做 网格线(grid line),两平行的网格线之间形成 网格轨道(grid track),四个网格线包围的封闭区间就是 网格区域(grid area)。
需要使用 网格布局的 div 上加上:
1 | .grid { |
注意,设为网格布局以后,容器子元素(项目)的
float
、display: inline-block
、display: table-cell
、vertical-align
和column-*
等设置都将失效。
容器的属性(16)
1 | grid-template-columns: <track-size>; /* 设置对应列的列宽,可以使用百分比\px\em\fr\auto,或者函数 repeat() maxmin() */ |
函数&关键字&特殊说明
fr
fr 关键字(fraction 的缩写,意为“片段”)。
fr 单位是一个自适应单位,fr单位被用于在一系列长度值中分配剩余空间,如果多个已指定了多个部分,则剩下的空间根据各自的数字按比例分配。
1 | grid-template-columns: 1fr 2fr; /* 2列,列宽比为 1 : 2 */ |
repeat()
repeat(times, mode)
函数:简化重复的值, 接受两个参数,第一个为重复次数,第二个是所要重复的值。
1 | grid-template-columns: repeat(3, 33.33%); /* 3列宽度都为 33.33% */ |
minmax()
minmax(min, max)
函数: 得到一个长度范围,表示值在这个范围区间里面。
1 | grid-template-columns: 1fr 1fr minmax(100px, 1fr); /* 在 100px ~ calc(100% - 100px) 之间 */ |
auto-fill
1 | grid-template-columns: repeat(auto-fill, 100px); /* 单元格大小确定,容器大小不定时,通过 auto-fill 设置自动填充 */ |
还有一个
auto-fit
,差不多,有区别。
auto
auto
关键字表示由浏览器自己决定长度
1 | grid-template-columns: 100px auto 100px; |
网格线的名称
grid-template-columns
属性和grid-template-rows
属性里面,还可以使用方括号,指定每一根网格线的名字,方便以后的引用。
1 | .container { |
项目的属性(10)
1 | grid-column-start: <line-th> | <line-name> | span 2; /* item 左边框所在的垂直网格线 */ |
关键字
span
span
关键字,表示”跨越”,即左右边框(上下边框)之间跨越多少个网格。
1 | grid-column-start: span 2; /* 项目左边框距离右边框 2 个网格 */ |