- 容器属性
- 列宽、行高:grid-template-columns | grid-template-rows
- 间距:row-gap | column-gap | gap
- 对齐:justify-items | align-items
- 项目属性
- 跨度:grid-row | grid-column
- 对齐:justify-self | align-self
- Flexbox中使用gap属性
参考课程:Build Responsive Real-World Websites with HTML and CSS
视频 | 源码
基于React的响应式单页应用开发、优化和部署
参考:
grid+less方案
1 | .grid(@col, @align: unset) { |
容器属性
定义在容器上的属性
1 | display: grid |
grid-template-columns
该属性定义每一列的列宽(定义行高为grid-template-rows)
列宽的单位可以是:
- 像素:
grid-template-columns: 100px 100px 100px
- 百分比:
grid-template-columns: 33.3% 33.3% 33.3%
- fr关键字(fraction),数值表示列之间的宽度比:
grid-template-columns: 1fr 1fr 1fr
- 也可以结合使用:
grid-template-columns: 150px 1fr 2fr;
语法糖:
repeat()
接受两个参数,第一个参数是重复的次数(上例是3),第二个参数是所要重复的值。
1 | grid-template-columns: 100px 100px 100px; |
row-gap | column-gap | gap
row-gap
属性设置行间距column-gap
属性设置列间距gap
属性是用来设置网格行与列之间的间隙,是上面两个的简写- 第一个参数为row-gap,第二个为column-gap
1 | row-gap: 9.6rem; |
justify-items | align-items
justify-items
属性设置单元格内容的水平位置(左中右)align-items
属性设置单元格内容的垂直位置(上中下)place-items
属性是align-items
属性和justify-items
属性的合并简写形式- 第一个参数为align-items,第二个为justify-items
1 | .container { |
关键字含义
- start:对齐单元格的起始边缘。
- end:对齐单元格的结束边缘。
- center:单元格内部居中。
- stretch:拉伸,占满单元格的整个宽度(默认值)。
项目属性
定义在项目上的属性
grid-row | grid-column
1 | .item { |
两个参数,用斜杠/
分隔,以grid-column为例
- 第一个参数是起始列线(从1开始计数)
- 第二个参数是结束列线
斜杠/
和后面的第二个参数可省略,表示只跨越一格
顺序
可以将元素强制显示在某一行
1 | grid-row: 1; |
跨度
span 后面写跨几格
1 | grid-row: 1 / span 2; |
场景:表格第一行分三列,第二行分两列
- 把grid声明为6列
- 第一行元素跨度2,第二行元素跨度3
1 | .nav-grid{ |
Html
1 | <div> |
justify-self | align-self
对齐,但只作用于单个项目
justify-self
属性设置单元格内容的水平位置(左中右)align-self
属性设置单元格内容的垂直位置(上中下)place-self
属性是align-self
属性和justify-self
属性的合并简写形式- 第一个参数为align-self,第二个为justify-self
关键字含义
- start:对齐单元格的起始边缘。
- end:对齐单元格的结束边缘。
- center:单元格内部居中。
- stretch:拉伸,占满单元格的整个宽度(默认值)。
场景:grid里三个元素,列数为2,希望单独成行的那一个元素能居中
在单独成行的那个元素上设置css属性:
1 | .element { |
flex gap
Felxbox也可以用gap,用法跟grid一样,但是有些浏览器不兼容
其他写法
1 | .main-nav-list{ |
修复兼容性
可以在项目中引入以下脚本
原理:
- 检测浏览器是否支持flex gap
- 如果不支持,在body元素注入no-flexbox-gap类
- 在对应的css文件中手动写替换的flex样式
1 | /////////////////////////////////////////////////////////// |
在css中是以嵌套css类选择器的形式实现
1 | // CSS |