CSS 网格布局
CSS 网格布局擅长于将一个页面划分为几个主要区域,以及定义这些区域的大小、位置、层次等关系(前提是 HTML 生成了这些区域)。
像表格一样,网格布局让我们能够按行或列来对齐元素。然而在布局上,网格比表格更可能做到或更简单。例如,网格容器的子元素可以自己定位,以便它们像 CSS 定位的元素一样,真正的有重叠和层次。
👉 CSS 网格布局-快速查询
repeat()
repeat() 函数:可以简化重复的值。该函数接受两个参数,
- 第一个参数是重复的次数,
- 第二个参数是所要重复的值。
.wrapper-1 {
display: grid;
grid-template-columns: 200px 100px 200px;
grid-gap: 5px;
/* 2行,而且行高都为 50px */
grid-template-rows: repeat(2, 50px);
}
auto-fill
- auto-fill 关键字:表示自动填充,让一行(或者一列)中尽可能的容纳更多的单元格。
- grid-template-columns: repeat(auto-fill, 200px) 表示列宽是 200 px,但列的数量是不固定的,只要浏览器能够容纳得下,就可以放置元素,
- 代码如下:
.wrapper-2 {
display: grid;
grid-template-columns: repeat(auto-fill, 200px);
grid-gap: 5px;
grid-auto-rows: 50px;
}
fr
- Grid 布局还引入了一个另外的长度单位来帮助我们创建灵活的网格轨道。
- fr 单位代表网格容器中可用空间的一等份。
- grid-template-columns: 200px 1fr 2fr 表示第一个列宽设置为 200px,后面剩余的宽度分为两部分,宽度分别为剩余宽度的 1/3 和 2/3。
- 代码如下:
.wrapper-3 {
display: grid;
grid-template-columns: 200px 1fr 2fr;
grid-gap: 5px;
grid-auto-rows: 50px;
}
minmax()
- 我们有时候想给网格元素一个最小和最大的尺寸,minmax() 函数产生一个长度范围,表示长度就在这个范围之中都可以应用到网格项目中。
- 它接受两个参数,分别为最小值和最大值。
- grid-template-columns: 1fr 1fr minmax(300px, 2fr) 的意思是,第三个列宽最少也是要 300px,但是最大不能大于第一第二列宽的两倍。
- 代码以及效果如下:
.wrapper-4 {
display: grid;
grid-template-columns: 1fr 1fr minmax(300px, 2fr);
grid-gap: 5px;
grid-auto-rows: 50px;
}
auto
- auto 关键字:由浏览器决定长度。
- 通过 auto 关键字,我们可以轻易实现三列或者两列布局。
- grid-template-columns: 100px auto 100px 表示第一第三列为 100px,中间由浏览器决定长度,
- 代码以及效果如下:
.wrapper-5 {
display: grid;
grid-template-columns: 100px auto 100px;
grid-gap: 5px;
grid-auto-rows: 50px;
}
grid-row-gap、
设置行间距
grid-column-gap、
设置列间距
grid-gap
grid-gap 属性是(grid-row-gap,grid-column-gap)两者的简写形 式
- grid-row-gap: 10px 表示行间距是 10px,
- grid-column-gap: 20px 表示列间距是 20px。
- grid-gap: 10px 20px 实现的效果是一样的
grid-template-areas
grid-template-areas属性用于定义区域,一个区域由一个或者多个单元格组成- 一般这个属性跟网格元素的
grid-area一起使用,我们在这里一起介绍。 grid-area属性指定项目放在哪一个区域
.wrapper {
display: grid;
grid-gap: 10px;
grid-template-columns: 120px 120px 120px;
grid-template-areas:
'. header header'
'sidebar content content';
background-color: #fff;
color: #444;
}
上面代码表示划分出 6 个单元格,其中值得注意的是 . 符号代表空的单元格,也就是没有用到该单元格。
.sidebar {
grid-area: sidebar;
}
.content {
grid-area: content;
}
.header {
grid-area: header;
}
以上代码表示将类 .sidebar .content .header 所在的元素放在上面 grid-template-areas 中定义的 sidebar content header 区域中