开启掘金成长之旅!这是我参与「掘金日新计划 · 12 月更文挑战」的第1天,点击查看活动详情
基本概念
定义grid容器
ele {
display:grid;
}
定义gird轨道
ele {
display:grid;
grid-template-rows: 100px 200px 300px;
grid-template-columns: 100px 200px;
}
将ele元素内的子元素,两列、三行 排列。每行列的宽高按写的大小。
fr 单位
ele {
display:grid;
grid-template-rows: 1fr 2fr 3fr;
grid-template-columns: 1fr 2fr;
}
单位大小,按比例分配。有些类似flex:1
repeat 函数
ele {
display:grid;
grid-template-rows: repeat(3, 1fr);
grid-template-columns: 1fr 2fr;
}
grid-template-rows: repeat(3, 1fr, 200px); // 生成6个元素
grid-template-rows: 200px, repeat(3, 1fr); // 生成4个元素
重复定义 比例
隐式、显式grid
我们使用 grid-template-columns 和 grid-template-rows 来构建我们的网格。根据我们对这俩个属性的设置所划分出来的区域就是 显式网格。
当网格元素的数量多于由我们自己设置的列轨道和行轨道划分出的网格单元数量时,网格容器就会 自动生成 具有 一定宽度或者高度(宽高值通常是根据放置其中的元素的宽高决定的) 的行轨道和列轨道(这些行轨道和列轨道会综合 已经设置好的网格来进行分行或者分列)来容纳这些多出来的网格元素,这些由网格容器自动生成的部分就是隐式网格。
-
显式网格属性:
-
grid-template-rows、 几行,高度grid-template-columns、 几列,宽度grid-template-areas。
-
隐式网格属性:
-
grid-auto-rows、grid-auto-columns、grid-auto-flow。
-
间距属性:
-
grid-column-gap、grid-row-gap。
minmax函数
创建灵活的网格轨道
- 让网格轨道 既有一个最小的宽度或者高度 用来容纳当中的内容。当其中内容 变多 的时候,又可以 变宽或者变高。
ele{
display: grid;
grid-template-columns: repeat(3, 1fr);
grid-auto-rows: minmax(100px, auto);
}
grid单元、grid区域
每一项是一个单元----最小单位
多个单元组成----区域
grid间隙
两个单元的缝隙(不包含边缘)
ele {
display:grid;
grid-template-rows: repeat(3, 1fr);
grid-template-columns: 1fr 2fr;
grid-row-gap: 10px; //top bottom
grid-column-gap: 20px; //left right
}
// 缩写
grid-gap: 10px 20px;
grid-gap: 10px;
定位
根据基线定位
每个区域都有线,从1开始
ele {
grid-row-start: 1;
grid-row-end: 4;
grid-column-start: 1;
grid-column-end: 2;
}
// 占用了三行一列的区域
start、end 缩写
当只占用一个单元格时,可以不设置end
ele {
grid-row-start: 1;
grid-row-end: 4;
grid-column-start: 1;
grid-column-end: 2;
}
// ----------
ele {
gird-row: 1 / 4;
grid-column: 1 / 2;
}
grid-area
grid-area:``grid-row-start / grid-column-start / grid-row-end / grid-column-end;
ele {
grid-area: 1 / 2 / 1 / 3;
}
反向计数
-1代表最后一条线。
ele {
grid-column: 1 / -1; // 铺满整行
}
span 关键字
占用多少个轨道(单元格)
ele {
grid-area: 1 / span 2 / 1 / span 3;
}
模板区域
命名grid区域
<div class="grid-container">
<div class="item1">头部</div>
<div class="item2">菜单</div>
<div class="item3">主要内容区域</div>
<div class="item4">右侧</div>
<div class="item5">底部</div>
</div>
<style>
.item1 { grid-area: header; }
.item2 { grid-area: menu; }
.item3 { grid-area: main; }
.item4 { grid-area: right; }
.item5 { grid-area: footer; }
.grid-container {
display: grid;
grid-template-areas:
'header header header header header header'
'menu main main main right right'
'menu footer footer footer footer footer';
}
</style>
留白grid单元
只能在区域边缘使用 .
.grid-container {
display: grid;
grid:
'header header header header header header'
'menu main main main right right'
'menu footer footer footer . .';
}
grid-template(...)
grid-template: grid-template-rows / grid-template-columns;
grid-template: grid-template-areas
盒子模式对齐
块轴(y轴)对齐
父元素
-
align-items: -
end结束位置start开始位置stretch填充满,默认center中间baseline基线
子元素
-
align-self: -
centerendstart
文本轴(x轴)对齐
父元素
-
justify-items: -
stretch默认centerstartendbaseline
子元素
-
justify-self: -
centerendstart
中心对齐
// 父元素
justify-items: center;
align-items: center;
// 子元素
align-self: center;
justify-self: center;
块轴(y轴)分布
类似flex
align-content:
文本轴(x轴)分布
类似flex
justify-content: