CSS之Grid布局
Grid(网格),是一个二维的基于网格的布局
Browser Support
-
-
-
-
-
网格容器(Grid Container)
- display: grid|inline-grid 指定元素为块级网格或内联网格
- grid-template-columns|grid-template-rows 使用空格分隔列表定义容器的网格的行和列
Syntax
grid-template-columns: < track-size > ... | < line-name > < track-size > ...;
grid-template-rows: < track-size > ... | < line-name > < track-size > ...;
example:
.container{
display: grid;
grid-template-columns: 40px 50px auto 50px 40px;
grid-template-rows: 25% 100px auto;
}
使用< line-name >:
grid-template-columns: [first] 40px [line2] 50px [line3] auto [col4-start] 50px [five] 40px [end];
grid-template-rows: [row1-start] 25% [row1-end row2-start] 100px [third-line] auto [last-line];
使用repeat():
grid-template-columns: repeat(3, 20px [col-start]);
/* grid-template-columns: 20px [col-start] 20px [col-start] 20px [col-start]; */
使用fr:
.container {
grid-template-columns: 1fr 50px 1fr 1fr;
}
- grid-template-areas 定义grid-area网格区域名称
. 表示空的网格单元 none 不定义网格单元
.container {
display: grid;
grid-template-columns: 50px 50px 50px 50px;
grid-template-rows: auto;
grid-template-areas:
"header header header header"
"main main . sidebar"
"footer footer footer footer";
}
- grid-template (grid-auto-columns, grid-auto-rows, 和 grid-template-areas)的简写
- grid-column-gap / grid-row-gap 指定网格线大小
.container {
grid-column-gap: <line-size>;
grid-row-gap: <line-size>;
}
- grid-gap 指定网格线大小简写
.container {
grid-gap: 15px 10px;
}
grid-gap将重命名为gap,Chrome 68+, Safari 11.2 Release 50+ and Opera 54+已支持
- justify-items 设置网格内容横轴对齐方式,适用于容器内的所有网格项(start | end | center | stretch)。
- align-items 设置网格内容竖轴对齐方式,适用于容器内的所有网格项(start | end | center | stretch)。
- place-items align-items 和 justify-items 的简写形式。
grid-gap将重命名为gap,Chrome 68+, Safari 11.2 Release 50+ and Opera 54+已支持
place-items: center center
- justify-content 当网格总大小小于容器,设置网格的横轴对齐方式,[start | end | center | stretch | space-around(网格项之间space相等,两边一半) | space-between | space-evenly(网格之间space均分)]
- align-content 当网格总大小小于容器,设置网格的竖轴对齐方式, [start | end | center | stretch | space-around | space-between | space-evenly]
- place-content justify-content和align-content缩写
justify-content: space-around
align-content: center
- grid-auto-columns / grid-auto-rows 定义隐式网格轨道的大小。当网格中的网格项多于单元格时,或者当网格项位于显式网格之外时,就会创建隐式轨道。
定义如下Grid布局
.container {
grid-template-columns: 60px 60px;
grid-template-rows: 90px 90px
}
.item-a {
grid-column: 1 / 2;
grid-row: 2 / 3;
}
.item-b {
grid-column: 5 / 6;
grid-row: 2 / 3;
}
因为我们引用的网格线不存在,所以创建宽度为 0 的隐式网格轨道以填补空缺。 可以使用grid-auto-columns来定义网格轨道大小
grid-auto-columns: 60px;
- grid-auto-flow 自动放置未明确位置的网格项, grid-auto-flow: row | column | row dense | column dense
row:告诉自动布局算法依次填充每行,根据需要添加新行 (默认) column:告诉自动布局算法依次填入每列,根据需要添加新列 dense:告诉自动布局算法在稍后出现较小的网格项时,尝试填充网格中较早的空缺
example:
<section class="container">
<div class="item-a">item-a</div>
<div class="item-b">item-b</div>
<div class="item-c">item-c</div>
<div class="item-d">item-d</div>
<div class="item-e">item-e</div>
</section>
.container {
display: grid;
grid-template-columns: 60px 60px 60px 60px 60px;
grid-template-rows: 30px 30px;
grid-auto-flow: row;
}
.item-a {
grid-column: 1;
grid-row: 1 / 3;
}
.item-e {
grid-column: 5;
grid-row: 1 / 3;
}
特殊方法和关键字
- keywords: min-content, max-content, auto
- functions: minmax, repeat
Animation
grid-row-gap, grid-column-gap, grid-template-columns, grid-template-rows等5个属性可应用于动画
网格项(Grid Items)
- grid-column-start/grid-column-end/grid-row-start/grid-row-end 通过引用特定网格线确定网格项在网格中的位置
Syntax
grid-column-start: <number> | <name> | span <number> | span <name> | auto;
grid-column-end: <number> | <name> | span <number> | span <name> | auto;
grid-row-start: <number> | <name> | span <number> | span <name> | auto;
grid-row-end: <number> | <name> | span <number> | span <name> | auto;
example:
.item-a {
grid-column-start: 2;
grid-column-end: five;
grid-row-start: row1-start;
grid-row-end: 3;
}
.item-b {
grid-column-start: 1;
/* 该网格项将跨越到它与提供的名称位置 */
grid-column-end: span col4-start;
grid-row-start: 2;
/* 该网格项将跨越所提供的网格轨道数量 */
grid-row-end: span 2;
}
- grid-column/grid-row grid-column-start + grid-column-end, grid-row-start + grid-row-end的简写
grid-column: 3 / span 2;
grid-row: third-line / 4;
- grid-area 通过grid-template-area属性指定网格项名称,或者grid-row-start + grid-column-start + grid-row-end + grid-column-end的简写
.item-d {
/* grid-area: header; */
grid-area: 1 / col4-start / last-line / 6;
}
- justify-self 设置网格项内容横轴对齐方式,[start | end | center | stretch]
- align-self 设置网格项内容竖轴对齐方式,[start | end | center | stretch]
- place-self justify-self + align-self 简写
.item-a {
place-self: center;
}
原文链接:https://css-tricks.com/snippets/css/complete-guide-grid/ (opens new window)
← 中央定时器 Curry Function →