用于 | 属性名 |
---|---|
① 集中定义 显式网格和隐式网格 (简写属性) | grid |
② 集中设置 显式网格区域 、行轨道 和 列轨道 (简写属性) | grid-template |
❶ 设置 显式行轨道的 行线名称 和 行轨道大小 | grid-template-rows |
❷ 设置 显式列轨道的 列线名称和 列轨道的大小 | grid-template-columns |
❸ 设置 网格区域和区域名称 | grid-template-areas |
③ 设置 隐式行轨道的大小 | grid-auto-rows |
④ 设置 隐式列轨道的大小 | grid-auto-columns |
⑤ 设置 自动布局元素(隐式轨道中)的排列方式 (逐行/逐列排列, 搭配 grid-row ,grid-column 属性 ) |
grid-auto-flow |
⑥ 设置网格的行轨道间隔和列轨道间隔(简写属性,适用于网格容器) | gap (grid-gap) |
❶ 行轨道之间的 间隔大小 | row-gap (grid-row-gap) |
❷ 列轨道之间的 间隔大小 | column-gap (grid-column-gap) |
⑦ 指定 放置网格项的 区域 (行列起止位置) | grid-area |
⑧ 集中定义网格项 列的开始和结束位置 (简写属性) | grid-column |
⑨ 集中定义 放置网格项的 行的开始位置和结束位置(简写属性) | grid-row |
❶ 放置网格项的 行的起始位置 | grid-row-start |
❷ 放置网格项的 行的结束位置 | grid-row-end |
❸ 放置网格项的 列的开始位置 | grid-column-start |
❹ 放置网格项的 列的结束位置 | grid-column-end |
Grid Layout
)
grid container
) 和 网格项 (grid items
):
display: grid
或❷ display: inline-grid
来 将此元素创建为 网格容器。
grid
和 inline-grid
的区别
inline-grid
容器为 ❶ inline
特性,因此可以和图片文字 ❷ 一行显示;grid
容器保持 ❶ 块状特性,❷ 宽度默认100%
,不和内联元素一行显示。Grid
)
explicit grid
) 和 隐式网格(implicit grid
)
grid-template-rows
和 grid-template-columns
属性 指定行和列 进而定义的网格 。grid-auto-columns
和grid-auto-rows
设置这些隐式网格的行列轨道的大小。
Grid lines
): 行线 + 列线
writing-mode
)
.wrapper {
display: grid;
grid-template-rows: [row1-start] 1fr [row2-start] 2fr [row3-start] 1fr;
}
.griditem2{
grid-row: row2-start/row3-start;
}
Grid tracks
)
column tracks
) + 行轨道 ( row tracks
)grid-template-columns
和 grid-template-rows
属性来定义 网格中的行和列,即 定义了 网格的轨道。grid-auto-rows
和 grid-auto-columns
属性 来定义这些 隐式轨道的大小。Grid cell
)
Grid areas
)
grid-template-areas
属性创建 网格区域,同时 给区域命名。Gutters
), 美 /'gʌtərs/
grid-column-gap/column-gap
,grid-row-gap/row-gap
或者 grid-gap/gap
在网格布局中创建 行轨道间距 + 列轨道间距。margin
,内边距 padding
或者使用 盒模型对齐中的 空间分布属性 ⇒ 这些方法都会导致 可见间距的产生,因此 网格间距属性 ≠ ”间距大小“。Grid Axis
),美 /ˈæksɪs/
.wrapper {
writing-mode: vertical-lr;
display: grid;
grid-template-columns: repeat(3, 100px);
grid-template-rows: repeat(2, 100px);
grid-gap: 10px;
}
<div class="wrapper">
<div class="item1">Item 1div>
<div class="item2">Item 2div>
<div class="item3">Item 3div>
<div class="item4">Item 4div>
<div class="item5">Item 5div>
div>
Grid row
)
grid-template-rows
或者简写属性 grid
, grid-template
设置大小。
grid-auto-rows
属性 设置大小。Grid column
)
grid-template-columns
或者简写属性 grid
,grid-template
设置大小。
grid-auto-columns
属性 设置大小。CSS
属性分类
CSS
属性,根据适用对象,分为两部分,一部分 适用对象为 网格容器上,一部分适用对象为 网格项。适用对象为: 网格容器(grid container ) |
适用对象为: 网格项 (grid items ) |
---|---|
① grid-template: 集中定义 显示轨道和区域 | ① grid-area: 集中定义 网格项的行列位置 |
❶ grid-template-rows | ② grid-row : 集中定义 网格项的行的 起止位置 |
❷ grid-template-areas | ③ grid-column: 集中定义 网格项的的列的 起止位置 |
❸ grid-template-columns | ❶ grid-row-start |
② gap ( 替代 grid-gap ): 定义 轨道之间的 间隔大小 | ❷ grid-row-end |
❶ row-gap ( 替代 grid-row-gap ) | ❸ grid-column-start |
❷ column-gap ( 替代 grid-column-gap ) | ❹ grid-column-end |
③ grid-auto-columns: 定义 隐式列轨道大小 | justify-self |
④ grid-auto-rows | align-self |
⑤ grid-auto-flow | place-self |
⑥ grid: 集中定义 显式轨道和隐式轨道 | |
justify-items | |
align-items | |
place-items | |
justify-content | |
align-content | |
place-content |
grid
是一个 CSS 简写属性,可以用来 设置以下属性:
grid-template-rows
grid-template-columns
grid-template-areas
grid-auto-rows
grid-auto-columns
grid-auto-flow
grid
属性中 声明显式或隐式网格,不能声明间隔属性。grid-template-rows: none
grid-template-columns: none
grid-template-areas: none
grid-auto-rows: auto
grid-auto-columns: auto
grid-auto-flow: row
grid containers
no
gutter
),间隔 也 不会 被该声明重置。
row-gap: 5px;
column-gap: 10px;
/*显式行列轨道*/
grid: 100px 50px/1fr 1fr;
grid: none
none
表示 设置所有的子属性为 初始值。grid:
/*设置行列轨道的间隔*/
row-gap: 5px;
column-gap: 10px;
/*显式轨道,先行后列,斜杠分隔*/
grid: 100px 50px/1fr 1fr;
grid-template-rows: 100px 50px;
grid-template-columns: 1fr 1fr;
grid: / [ auto-flow && dense? ] ?
?
⇔ 表示该项是 可选的,可以有,也可以没有。/
后面的 ❶ dense
紧密填充的关键字和 ❷ 隐式列轨道 grid-auto-columns
值都可以省略,可以只设置一个 ❶ 显式的行轨道和 ❷ 自动布局的方式。
auto-flow && dense?
: &&
表示一起使用,实际加上dense
就是 隐式自动布局方式 grid-auto-flow
属性的双值语法,不加dense
是单值语法, 等同于 逐行填充 row
或 逐列填充column
, 双值 等同于 逐行紧密填充 row dense
或 逐列紧密填充 column dense
。auto-flow
的位置和解析: 关键字在斜杠 /
左侧,则解析为 row
,如果是在右侧,则解析为 column
。但是 始终和 隐式轨道在一侧,因为自动布局 是针对隐式轨道的。→含有auto-flow
关键字的一侧 设置的大小 为隐式轨道的大小。auto-flow
的位置 还必须写在 隐式轨道的前面,否则会语法错误,如下。
/
的关系: 前行后列 → 斜杠前面都是 行rows
相关属性,斜杠后面都是 列columns
相关属性。 grid: 50px 50px/auto-flow 1fr 2fr;
grid-template-rows: 50px 50px;
grid-auto-flow: column;/*逐列填充*/
grid-auto-columns: 1fr 2fr;/*隐式列轨道的大小*/
grid: [ auto-flow && dense? ] ? /
grid: auto-flow dense 50px 100px/ 1fr 2fr;
grid-auto-rows: 50px 100px;
grid-auto-flow: row dense; /*逐行填充*/
grid-template-columns: 1fr 2fr;
grid:none
就是 子属性都是初始值,不设置网格轨道时候的样子。grid:
同时设置 显式的行列轨道。grid columns, rows, areas.
): grid-template
属性
grid-template-columns: none
⇔ 默认 不指定 显式列轨道grid-template-rows: none
⇔ 默认 不指定 显式行轨道grid-template-areas: none
⇔ 默认 不划分 为指定的网格区域grid containers
)no
⇔ 不会被子元素 自动继承。grid-template: none | [ <'grid-template-rows'> / <'grid-template-columns'> ] | [ ? ? ? ]+ [ / ]?
line-names
= 自定义 字符串标识符
⇔ | % | | min-content | max-content | auto| minmax(min,max) | fit-content()
= [ ? ]+ ?
?
: 表示 可选项。grid-template: [linename] 100px / [columnname1] 30% [columnname2] 70%;
⑶ 属性值
none
:
none
的关键字,表示没有显式网格 + 没有 指定的网格区域。将隐式生成 行和列。grid-auto-rows
和 grid-auto-columns
设置隐式的 行/列的轨道大小。<'grid-template-rows'> / <'grid-template-columns'>
[ ? ? ? ]+ [ / ]?
grid-template-areas
为列的
。grid-template-rows
为
(默认为 auto
)并拼接尺寸前后 所定义之行。/
之后 为 grid-template-columns
为 显式轨道列表
(默认为 none
)repeat()
)中 行列逐一视觉对齐,因为列的属性值的个数,要对应列轨道的个数,故 列轨道列表中 不允许 重复轨道repeat()
函数。grid-template: "left right-up right-up" "left right-down right-down";
⑷ 合法值
/* 关键字值 Keyword value */
grid-template: none;
/* 行轨道/列轨道 grid-template-rows / grid-template-columns values */
grid-template: 100px 1fr / 50px 1fr;/*只设置 行列轨道*/
grid-template: auto 1fr / auto 1fr auto;
grid-template: [linename] 100px / [columnname1] 30% [columnname2] 70%;/*设置行列轨道 同时设置行线和列线名称*/
grid-template: fit-content(100px) / fit-content(40%);
/* 网格区域 + 行轨道 / 列轨道 grid-template-areas grid-template-rows / grid-template-column values */
grid-template: "a a a"
"b b b";/*只设置 网格区域*/
grid-template: "a a a" 20%
"b b b" auto;/*设置网格区域的时候 设置行轨道,一个字符串 对应一行 ⇒ 空格分隔,行轨道的大小 放在双引号后面的位置*/
grid-template: [header-top] "a a a" [header-bottom]
[main-top] "b b b" 1fr [main-bottom]
/ auto 1fr auto;/*设置网格区域的同时,设置行线名称和 网格区域 行轨道 列轨道*/
/* 全局值 Global values */
grid-template: inherit;
grid-template: initial;
grid-template: unset;
grid-template-rows
属性, 美 /ˈtemplət/
grid containers
)none
⇔ 不指定 显式行轨道Inherited
): no
⑵ 网格 显式行轨道的语法
grid-template-rows: none | | | ?
none| length | %| fr | max-content| min-content | minmax(min, max) | auto | fit-content() | repeat() ;
= '[' * ']'
用户 自定义字符串 标识符。一种 CSS 数据类型;在这里,用来表示 设置的 行线的名称。\
),toto\?
和toto\3F
是相同的。
不能用 单引号或双引号 包起来。123
这个字符串的时候,如果变量名 允许第一个字符为数字,分析器就不知道 123
该是 数值常量还是 变量名了。-
只能跟字母: 字符串的开头 不能是连字符 (-
)后面跟着 数字或连字符,可以是连字符后面跟字母。有效值
/* 关键字值 Keyword value */
grid-template-rows: none;
/* 轨道列表值 values */
grid-template-rows: 100px 1fr;
grid-template-rows: [行线名称linename] 100px;
grid-template-rows: [linename1] 100px [linename2 linename3];/*轨道大小的前后 可以设置行线的名称*/
grid-template-rows: minmax(100px, 1fr);
grid-template-rows: fit-content(40%);
grid-template-rows: repeat(3, 200px);
grid-template-rows: subgrid;
/* 隐式轨道列表值 values */
grid-template-rows: 200px repeat(auto-fill, 100px) 300px;
grid-template-rows: minmax(100px, max-content)
repeat(auto-fill, 200px) 20%;
grid-template-rows: [linename1] 100px [linename2]
repeat(auto-fit, [linename3 linename4] 300px)
100px;
grid-template-rows: [linename1 linename2] 100px
repeat(auto-fit, [linename1] 300px) [linename3];
/* 全局值 Global values */
grid-template-rows: inherit;
grid-template-rows: initial;
grid-template-rows: unset;
nono79 字母数字混合
ground-level 字母-字母
-test 连字符后跟字母
_internal 下划线后跟字母
\22 toto Unicode编码后跟字母
bili\.bob 转义的句号
34rem 第一个字符 不能是数字
-12rad 第一个字符连字符后 不能跟数字
bili.bob 只有字母数字、连字符-、下划线_不需要转义
--toto 第一个字符 不能为连字符 后跟连字符
'bilibob' 不能用单引号 包起来,这是一个字符串类型
"bilibob" 不能用双引号 包起来,这是一个字符串类型
none
数据类型 ⇔ 可变长度= 数字+fr
:
max-content
min-content
minmax(min, max)
⇒ minmax()
函数 只能用在下面 4个CSS属性中: 设置显式和隐式行列轨道 grid-template-columns
,grid-template-rows
,grid-auto-columns
,grid-auto-rows
minmax( [ | | min-content | max-content | auto ] , [ | | | min-content | max-content | auto ] )
⑧ 根据 容器高度/元素内容 自动分配大小: auto
⑨ 尺寸由内容决定,内容越多 尺寸越大,但不能超过 限定值limit
。: fit-content(limit)
fit-content( [ | ] )
⑩ 重复轨道: repeat( [
repeat()
CSS 函数 表示 轨道列表的 ❶ 重复片段,允许以更紧凑的形式写入大量显示 ❷ 重复模式的列或行。grid-template-columns
和 grid-template-rows
。
⑪ subgrid
subgrid
值 表示网格 将采用其父网格 在该轴上的扩展部分。上方 各示例图 涉及代码
css
*{
margin: 0;
padding: 0;
}
/*网格容器*/
.gridcontainer{
width: 30%;
/*height: 500px;*/
border: solid 5px lightseagreen;
margin: 5px;
display: grid;
/*设置网格的 列轨道*/
/*grid-template-rows: none;*/
/*grid-template-rows: 100px 50px;*/
/*grid-template-rows:50%;!*设置容器高度的具体值时,百分比值 才有效*!*/
/*grid-template-rows: 1fr 2fr 1fr 2fr;*/
/*grid-template-rows: minmax(100px,1fr) 200px 2fr;*/
/*grid-template-rows: minmax(100px,1fr);*/
/*grid-template-rows:max-content;*/
/*grid-template-rows:min-content;*/
/*grid-template-rows:auto;*/
/*grid-template-rows:fit-content(50px);*/
/*grid-template-rows:fit-content(50%);*/
/*grid-template-rows: repeat(3,150px);*/
/*grid-template-rows: repeat(2,150px 80px);*/
/*grid-template-rows: repeat(auto-fill,150px) 100px;*/
/*grid-template-rows: repeat(auto-fit,150px) 100px;*/
}
/*网格项*/
.gridcontainer div{
border: solid 5px #bed5cb;
margin: 10px;
padding: 10px;
font-weight: bold;
/*max-height: 150px;*/
/*min-height: 100px;*/
/*height: 80px;*/
}
.green{
background-color: #c4ffcd;
}
.red{
background-color: #ffdcdd;
}
<div class="gridcontainer">
<div class="griditem1 green">one: 不怨天尤人,div>
<div class="griditem2 red">two: 不恶语伤人,div>
<div class="griditem3 green">three: 群处守嘴,div>
<div class="griditem4 red">four: 独处守心。div>
div>
grid-template-columns
属性
Initial value
): none
grid containers
)Inherited
): no
grid-template-columns: none| length | %| auto| fr | max-content| min-content | minmax(min, max) | fit-content() | repeat() ;
/* 关键字值 Keyword value */
grid-template-columns: none;
/* 轨道列表值 values */
grid-template-columns: 100px 1fr;
grid-template-columns: [linename] 100px;
grid-template-columns: [linename1] 100px [linename2 linename3];
grid-template-columns: minmax(100px, 1fr);
grid-template-columns: fit-content(40%);
grid-template-columns: repeat(3, 200px);
/* 自动轨道列表值 values */
grid-template-columns: 200px repeat(auto-fill, 100px) 300px;
grid-template-columns: minmax(100px, max-content)
repeat(auto-fill, 200px) 20%;
grid-template-columns: [linename1] 100px [linename2]
repeat(auto-fit, [linename3 linename4] 300px)
100px;
grid-template-columns: [linename1 linename2] 100px
repeat(auto-fit, [linename1] 300px) [linename3];
/* 全局值 Global values */
grid-template-columns: inherit;
grid-template-columns: initial;
grid-template-columns: unset;
none
length
%
fr
max-content
min-content
minmax(min, max)
auto
fit-content()
: 大小随容器缩放,最大值不超过某个限定值。
repeat()
/*网格 列轨道*/
grid-template-columns: none;
/*grid-template-columns: 150px;*/
grid-template-columns: 150px 100px;
grid-template-columns: 50% 20% 30%;
grid-template-columns: 1fr 2fr 1fr;
grid-template-columns: max-content 100px;
grid-template-columns: min-content 1fr;
grid-template-columns: minmax(min-content,150px) 100px;
grid-template-columns: minmax(min-content,1fr) 2fr;
grid-template-columns: auto auto max-content;
grid-template-columns:fit-content(100px) auto max-content;
grid-template-columns:repeat(2,1fr) 2fr;
grid-template-areas
属性
grid areas
) 和 网格项(grid item
)沒有关联。grid-row-start
, grid-row-end
, grid-column-start
和 grid-column-end
;grid-row
,grid-column
和 grid-area
。none
不设置/划分 网格区域grid containers
)no
grid-template-areas: none | +;
是用来表示 ❶ 一串字符 的 ❷ 数据类型。
中 不能使用像 空格
或者——
这样的实体。
数据类型是 由包含在 英文双引号("
)或 英文单引号('
)中的任意数量的 万国码Unicode 字符组成。⑶ 网格区域的 属性值
none
grid areas
)。+
"a a b"
,表示 1行3列。
grid area
)。grid-auto-rows
属性
grid-template-rows
来显式指定 所在行的行轨道的大小,则会隐式创建网格轨道 来保存它。grid-template-*
显式设置轨道大小后,才变成显式轨道。auto
自动分配大小grid containers
)no
⑵ 隐式行轨道的 语法
grid-auto-rows
: | | min-content | max-content | auto | | minmax(min, max) | fit-content()
grid-template-rows
,少2个参数,❶ none
(默认不生成显式轨道,默认轨道是隐式的)和 ❷ repeat()
轨道重复函数,不能在隐式轨道上使用 (为什么?不支持?);⑶ 合法值
/* 关键字值 Keyword values */
grid-auto-rows: min-content;
grid-auto-rows: max-content;
grid-auto-rows: auto;
/* 长度值 values */
grid-auto-rows: 100px;
grid-auto-rows: 20cm;
grid-auto-rows: 50vmax;
/* 百分比值 values */
grid-auto-rows: 10%;
grid-auto-rows: 33.3%;
/* fr 单位值 按比例分配 values */
grid-auto-rows: 0.5fr;
grid-auto-rows: 3fr;
/* 设置范围值 minmax() values */
grid-auto-rows: minmax(100px, auto);
grid-auto-rows: minmax(max-content, 2fr);
grid-auto-rows: minmax(20%, 80vmax);
/* 多个轨道尺寸值 multiple track-size values */
grid-auto-rows: min-content max-content auto;
grid-auto-rows: 100px 150px 390px;
grid-auto-rows: 10% 33.3%;
grid-auto-rows: 0.5fr 3fr 1fr;
grid-auto-rows: minmax(100px, auto) minmax(max-content, 2fr) minmax(20%, 80vmax);
grid-auto-rows: 100px minmax(100px, auto) 10% 0.5fr fit-content(400px);
/* 全局值 Global values */
grid-auto-rows: inherit;
grid-auto-rows: initial;
grid-auto-rows: unset;
⑷ 隐式行轨道的 属性值
min-content
max-content
auto
⇔ 根据内容 自动创建
max-content
相同。min-width/min-height
指定)。fr
单位 按比例分配:
minmax(min, max)
fit-content()
⑸ gird-auto-rows 的浏览器支持
grid-auto-columns
属性
grid-template-columns
显式指定的列中,那么将创建 隐式网格轨道来保存它。
grid-template-columns
显式创建的 列轨道之外的列 = 隐式列轨道。grid-template-columns
属性,那么所有的列轨道 都是隐式列轨道。auto
自动分配空间grid containers
)no
⇒ 不被子元素 自动继承⑵ 隐式列轨道大小的 语法
grid-auto-columns: | | | min-content | max-content | auto | minmax(min,max) | fit-content( [ | ] )
grid-template-columns
, grid-auto-columns: 150px;
⇒ 默认仅一列。
grid-auto-columns: 150px 100px;
⇒ 在 Firefox72, Google 78 中测试 只能识别 第一个列值 。 ⇒ 默认仅一列值 有效。没有指定 列轨道个数时,可能会默认仅一列。
⑶ 隐式列轨道大小 浏览器支持
合法值
/* 关键字值 Keyword values */
grid-auto-columns: min-content;
grid-auto-columns: max-content;
grid-auto-columns: auto;
/* 长度值 values */
grid-auto-columns: 100px;
grid-auto-columns: 20cm;
grid-auto-columns: 50vmax;
/* 百分比值 values */
grid-auto-columns: 10%;
grid-auto-columns: 33.3%;
/* 按比例分配 fr单位值 values */
grid-auto-columns: 0.5fr;
grid-auto-columns: 3fr;
/* minmax() values */
grid-auto-columns: minmax(100px, auto);
grid-auto-columns: minmax(max-content, 2fr);
grid-auto-columns: minmax(20%, 80vmax);
/* fit-content() values */
grid-auto-columns: fit-content(400px);
grid-auto-columns: fit-content(5cm);
grid-auto-columns: fit-content(20%);
/* 多个值 multiple track-size values */
grid-auto-columns: min-content max-content auto;
grid-auto-columns: 100px 150px 390px;
grid-auto-columns: 10% 33.3%;
grid-auto-columns: 0.5fr 3fr 1fr;
grid-auto-columns: minmax(100px, auto) minmax(max-content, 2fr) minmax(20%, 80vmax);
grid-auto-columns: 100px minmax(100px, auto) 10% 0.5fr fit-content(400px);
/* 全局值 Global values */
grid-auto-columns: inherit;
grid-auto-columns: initial;
grid-auto-columns: unset;
grid-auto-flow
属性
grid items
),是自动布局元素。grid-row
,grid-column
,grid-row-start
,gird-row-end...
指定元素的放置位置,使用这些属性 指定位置的元素,就不再是"自动布局元素"。row
⇔ 没有指定位置的网格 ,默认按照通过❶ 逐行填充 来排列元素,在必要时 ❷ 增加新行。grid containers
)no
⇔ 否,不会被子元素 自动继承。grid-auto-flow: [ row | column ] || dense;
<div class="gridcontainer">
<div class="griditem1 green">one: 不怨天尤人,div>
<div class="griditem2 red">two: 不恶语伤人,div>
<div class="griditem3 green">three: 群处守嘴,div>
<div class="griditem4 red">four: 独处守心。div>
div>
/*网格容器*/
.gridcontainer{
width: 30%;
/*height: 500px;*/
/*height: 500px;*/
border: solid 5px lightseagreen;
margin: 10px;
display: grid;
grid-template: repeat(4,1fr) / repeat(2,1fr); /*4行2列*/
grid-auto-flow: row;
/*grid-auto-flow: row dense;*/
/*grid-auto-flow: column;*/
/*grid-auto-flow: column dense;*/
}
/*指定网格项1的放置位置 第1列 行线2-5之间*/
.griditem1{
grid-column: 1;
grid-row: 2/5;
}
/*指定网各项2的放置位置: 行线1-3之间*/
.griditem2{
grid-row: 1/3;
}
/*网格项*/
.gridcontainer div{
border: solid 5px #bed5cb;
margin: 10px;
padding: 10px;
font-weight: bold;
}
.green{
background-color: #c4ffcd;
}
.red{
background-color: #ffdcdd;
}
⑶ 自动布局元素 排列方式的 属性值 (示例图 代码如上 ↑)
① 逐行填充 (默认值): row
② 逐列填充: column
③ 回填空白+次序可能打乱: dense
,美 /dens/ ,稠密的
dense
仅改变 ❶ 视觉顺序,会导致 DOM
属性和 元素的实际呈现顺序 不一致,不利于可访问性,需要谨慎使用。⑷ 属性值的取值和合法值
row
、column
,或 dense
中的一个。row dense
或 column dense
。/* 关键字值 Keyword values */
grid-auto-flow: row;
grid-auto-flow: column;
grid-auto-flow: dense;
grid-auto-flow: row dense;/*双值,先水平 后垂直,视觉顺序同 row 属性。*/
grid-auto-flow: column dense;/*双值,先上下 后左右*/
/* 全局值 Global values */
grid-auto-flow: inherit;
grid-auto-flow: initial;
grid-auto-flow: unset;
gap
属性 是用来设置 网格行与列之间的间距(gutters
),该属性是 行间隔 row-gap
和列间隔 column-gap
的简写形式。grid
网格前缀
grid-gap
属性来定义的,目前逐渐被 gap
属性替代,因为不仅仅是 用于网格之间的间隔了,别的内容也在使用 这个间隔属性,所以去掉grid
的前缀特指。grid
的网格特指,变成 row-gap
和column-gap
。⑶ 子属性和初始值:
⑷ 适用元素: (子属性row-gap
/ column-gap
和这个相同)
multi-column elements
), ❷ 可伸缩容器 (flex containers
), ❸ 网格容器 (grid containers
)no
⇔ 不会被子元素 自动继承。row-gap
和 column-gap
的值,空格分隔。
column-gap
是可选的,缺失的话,则会被设置成跟 行间距 row-gap
一样的的值。
或者 百分比
来表示。
:
grid-gap: 5px;/*设置网格间距,行列间距相同*/
grid-gap: 5px 20px;/*先行后列*/
gap: 10px;
gap: 10px 10%;/*会覆盖 grid-gap 的语法*/
⑴ 设置 行之间的间隔(gutter
)的大小: row-gap
gutters
,表示 内容轨道的间距。column-gap
、row-gap
或 gap
属性在CSS网格布局中创建。grid-row-gap
属性最初在网格布局中 来使用的,现在使用的范围更广了,所以逐渐被 row-gap
替代,不再强调grid
的前缀。但是,为了兼容那些不支持 row-gap
属性的浏览器,有时仍然需要使用带有grid
前缀的属性。⑵ 行轨道之间的间距 属性值
点击查看 row-gap 的浏览器支持
⑴ 设置 元素列之间的 间隔 (gutter
) 大小: column-gap
点击查看 column-gap 的浏览器支持
grid-area
grid-row-start
、grid-row-end
、grid-column-start
、和 grid-column-end
的简写。
span
或什么都不提供(默认自动auto
),从而指定网格项 应该占据的 区域位置。grid-row-start: auto
grid-column-start: auto
grid-row-end: auto
grid-column-end: auto
grid items
, ❷ 包含块是一个网格容器的 绝对定位的盒子 absolutely-positioned boxes
no
grid-template-areas
和 grid-area
属性的区别
grid-template-areas
: 划分 当前网格容器,把容器划分成 ❶ 几块区域,并把这些区域命名,针对的是 ❷ 网格容器。grid-area
: 划分出❶ 一个区域 给 当前网格项,用来放置网格项,针对的是 ❷ 网格项。grid-template-areas
属性进行区域的划分和命名,然后才能使用grid-area
属性让 某个 grid
网格子项 使用这些区域中的 指定一部分。 [ / ] {
0,3}
where
= auto | | [ && ? ] | [ span && [ || ] ]
⑷ 属性值的个数: 1~4个 属性值,分别表示 grid-row-start
、grid-row-end
、grid-column-start
、和 grid-column-end
,每个子属性值之间,使用分隔符号 斜杠 /
。
grid-area: ❶ grid-row-start/ ❷ grid-column-start/ ❸ grid-row-end/ ❹ grid-column-end;
值,则将 grid-row-start
设置为第一个值,将grid-column-start
设置为第二个值,将grid-row-end
设置为第三个值,将grid-column-end
设置为第四个值。grid-column-end
第4个值 被省略时,如果 grid-column-start
是一个
,则4=2=
=指定线名或区域名,则将 grid-column-end
设置为该
;否则,如果2 也被省略,则 2=4=初始值 = auto
,即将第4个值设置为auto
。
,表示 用户自定义标识符 = 自定义的字符串,在这里为指定的网格区域名或者自定义行线和列线名称。grid-row-end
即第3个值 也被省略时,与上同理,3=1=
=指定自定义线名或区域名,1 也被省略时,1=3=初始值 = auto
。grid-column-start
即忽略第2个值时,如果grid-row-start
是一个
,则所有四个值 都设置为该值。否则,将其设置为auto
。
,或者 1=2=3=4=auto
。每个属性值的类型
grid-area: auto;
初始值,表示 自动放置 或 默认跨度为1
。grid:
grid: && ?
n
个网格线 用作指定网格项目的位置。
0
的整数无效。?
表示可选的,如果名称是
,且是 整数 自定义字符串
的形式,则只计算具 有该名称的行。如果没有足够多 的具有该名称的行存在,则假定 所有隐式网格线 都具有该名称,以便查找此位置。grid: span && [ || ]
span
表示 为网格项目的放置 提供一个网格跨度,使网格项目的网格区域的对应边缘 是来自相反边缘的 n 条线。
,则只计算具有 该名称的行。如果没有足够多的具有该名称的行存在,则假定与搜索方向对应的显式网格一侧的 所有隐式网格线都具有该名称,以便计算这个跨度。指定网格项的位置 在行线为2~4之间,列线 3~4之间
指定网格项在 网格行中的起始位置,方法是为其网格布局提供一个行线、一个跨度span
或nothing(默认自动auto
),从而指定 网格项在网格区域中的 起始边缘。
初始值: auto
适用对象 :
grid items
, ❷ 包含块是一个网格容器的 绝对定位的盒子 absolutely-positioned boxes
被继承性 : no
属性的语法
<grid-line>
where
<grid-line> = auto | <custom-ident> | [ <integer> && <custom-ident>? ] | [ span && [ <integer> || <custom-ident> ] ]
/*网格容器*/
.gridcontainer{
width: 30%;
/*height: 500px;*/
/*height: 500px;*/
border: solid 5px lightseagreen;
margin: 10px;
display: grid;
grid-gap: 5px;/*设置网格间距,行列间距相同*/
/*设置显式的行列轨道*/
grid: repeat(3,100px)/1fr 1fr 1fr;
}
/*第2个网格项*/
.griditem2{
grid-row-start: auto;
}
grid: ;
设置网格项2 从c区域的起始行开始
-start
”的指定行,它将第一个这样的行 提供给网格项 作为 起始的位置。c-start
的行线,只命名了 c 区域,但c
区域的开始行,会被隐式指定为 c-start
的行线,除非在它之前显式地指定了另一个行线c-start
,此时就不会再隐式指定该区域的起始行为 c-start
。/*网格容器*/
.gridcontainer{
grid: repeat(3,100px)/1fr 1fr 1fr;
grid-template-areas: "a b b" "a c c" "a d d";
}
.griditem2{
/*grid-row-start: auto;*/
grid-row-start: c;
}
grid: && ?
grid-row-start: span && [ || ]
grid-row-start: -1;
auto
= 跨行数为1,且自动放置。grid items
, ❷ 包含块是一个网格容器的 绝对定位的盒子 absolutely-positioned boxes
no
<grid-line>
where
<grid-line> = auto | <custom-ident> | [ <integer> && <custom-ident>? ] | [ span && [ <integer> || <custom-ident> ] ]
<grid-line>
where
<grid-line> = auto | <custom-ident> | [ <integer> && <custom-ident>? ] | [ span && [ <integer> || <custom-ident> ] ]
<grid-line>
where
<grid-line> = auto | <custom-ident> | [ <integer> && <custom-ident>? ] | [ span && [ <integer> || <custom-ident> ] ]
column,美 ['kɑləm], 列
指定 网格项的大小和位置: 集中定义网格项 列的开始和结束位置 (简写属性)
简写属性: grid-column
是 grid-column-start
和 grid-column-end
子属性和初始值:
grid-column-start: auto
grid-column-end: auto
初始值: auto
= 跨行数为1,且自动放置。
适用对象 :
grid items
, ❷ 包含块是一个网格容器的 绝对定位的盒子 absolutely-positioned boxes
被继承性 : no
属性值语法
/
”分隔,先设置列的开始位置,后设置列的结束位置。<grid-line> [ / <grid-line> ]?
where
<grid-line> = auto | <custom-ident> | [ <integer> && <custom-ident>? ] | [ span && [ <integer> || <custom-ident> ] ]
grid-row
是 grid-row-start
和 grid-row-end
的简写属性
grid-row-start: auto
grid-row-end: auto
<grid-line> [ / <grid-line> ]?
where
<grid-line> = auto | <custom-ident> | [ <integer> && <custom-ident>? ] | [ span && [ <integer> || <custom-ident> ] ]
数据类型
CSS 数据类型 表示了网格(grid
)容器中的 ❶ 一段 可变长度。于 grid-template-columns
、grid-template-rows
及相关属性中使用。fr
:
数据类型为 一
数字后 加单位 fr
。与所有 CSS 尺寸相同,单位与数字间 无空格。1fr /* 使用整型 */
2.5fr /* 使用浮点 */
repeat(auto-fill|auto-fit|positive-integer,??)
= | % | | min-content | max-content | auto| minmax(min,max) | fit-content()`
参数
positive-integer
grid-template-rows: repeat(4,1fr)
⇔ grid-template-rows: 1fr 1fr 1fr 1fr
;auto-fill
⇒ 当不知道 需要重复的次数时,即不知道究竟有多少列或多少行时,可以根据 网格布局中 每一个子项的大小, 自动计算出 需要重复的次数。
不溢出网格的最大 重复次数: 如果 网格容器的 行或列的相关轴上 有一个确定的大小,则重复次数 是不会导致网格内容溢出 网格容器的 最大可能正整数。
repeat()
,并进行自动计算重复次数时,即参数为 auto-fill/auto-fit
时,要设置 高度值或宽度值,且repeat()
函数不可以和auto
一起使用,这样方便 自动计算重复次数,当重复次数时具体数字,不是自动重复时,repeat()
函数可以和auto
一起使用。当未设置 容器高度,行轨道只会重复一次: grid-template-rows: repeat(auto-fill,150px) 100px;
容器设置了高度: grid-template-rows: repeat(auto-fill,150px) 100px;
+height: 500px;
auto-fit
auto-fit
的行为与auto-fill
相同,区别是,在放置网格项之后,任何空的重复 轨道都会被折叠。0px
,并且其两侧的 ❷ 间隔折叠。auto-fill
自动填充的时候,如果 网格容器的尺寸很大,则最后会有一些空的格子占位:
auto-fit
自动适应的时候,如果 网格容器的尺寸很大,则最后会有一些空的格子 会合并成1
个,且宽度是0
⇒ 当 网格容器尺寸 没有富余的时候,两者表现是一样的。
1px
),以避免 被零除。自动重复 排斥的关键字: 当我们使用 auto-fill
自动填充的时候,repeat()
函数是不能和 auto
一起使用的,因为auto
无法确定具体尺寸,不好确定 重复次数。可以和 长度/百分比值一起使用。但当重复次数 是具体的数字时1,2,3…时,是可以和auto
一起使用的。
.container {
grid-template-columns: repeat(auto-fill, minmax(100px, 1fr)) auto; /*无效写法*/
grid-template-columns: repeat(3, minmax(100px, 1fr)) auto; /*有效写法*/
}
/* 重复的轨道 values */
repeat(4, 1fr)
repeat(4, [col-start] 250px [col-end])
repeat(4, [col-start] 60% [col-end])
repeat(4, [col-start] 1fr [col-end])
repeat(4, [col-start] min-content [col-end])
repeat(4, [col-start] max-content [col-end])
repeat(4, [col-start] auto [col-end])
repeat(4, [col-start] minmax(100px, 1fr) [col-end])
repeat(4, [col-start] fit-content(200px) [col-end])
repeat(4, 10px [col-start] 30% [col-middle] auto [col-end])
repeat(4, [col-start] min-content [col-middle] max-content [col-end])
/* values */
repeat(auto-fill, 250px)
repeat(auto-fit, 250px)
repeat(auto-fill, [col-start] 250px [col-end])
repeat(auto-fit, [col-start] 250px [col-end])
repeat(auto-fill, [col-start] minmax(100px, 1fr) [col-end])
repeat(auto-fill, 10px [col-start] 30% [col-middle] 400px [col-end])
/* values */
repeat(4, 250px)
repeat(4, [col-start] 250px [col-end])
repeat(4, [col-start] 60% [col-end])
repeat(4, [col-start] minmax(100px, 1fr) [col-end])
repeat(4, [col-start] fit-content(200px) [col-end])
repeat(4, 10px [col-start] 30% [col-middle] 400px [col-end])
grid-template-columns: repeat(2, 50px 1fr) 100px;
轨道重复的 使用示例
指定轨道的 重复次数: repeat(次数,轨道尺寸)
repeat()
函数来重复 部分或整个轨道列表
grid-template-columns: 1fr 1fr 1fr;
⇔ grid-template-columns: repeat(3, 1fr);
20px
,接着重复了6个1fr
的轨道,最后再添加了一个20px
的轨道。
grid-template-columns: 20px repeat(6, 1fr) 20px;
1fr
轨道后面跟着1个2fr
轨道,该模式重复5
次。多轨道之间,空格 分隔。
grid-template-columns: repeat(5, 1fr 2fr);
使用 注意事项
repeat()
函数 只在 设置显式行列轨道的 grid-template-columns
和 grid-template-rows
属性上使用,不能在隐式轨道属性上使用。repeat(auto-fill, ...)
和 repeat(auto-fit, ...)
两个关键字 目前只 支持在列上grid-template-columns
属性中 使用,其他浏览器 基本上 行列都可以正常使用。minmax(min, max)
,表示 当前的轨道大小是 在最小值min
到最大值max
之间的一个数值。minmax(min, max)
minmax( [ | | min-content | max-content | auto ] , [ | | | min-content | max-content | auto ] )
auto
出现在 min
的参数位置,则作用等同于min-content
,如果出现在max
参数位置,作用等同于max-content
。
min-content
和max-content
的具体含义,参见【CSS3中 4个自适应关键字: available、max-content、min-content、fit-content】 。.container {
display: grid;
grid-template-columns: repeat(auto-fill, minmax(150px, 1fr));
}
minmax(150px, 1fr)
的含义是 每一个列的宽度最小值是 150
像素,最大值是 1fr
,也就是 等分宽度。
minmax(min, max)
中,如果 min
的计算值比max
还要大,则max
的值会被忽略,因为这个最大值是无效的。
可变长度的数据类型 不能作为min
参数使用,可能因为按比例分配 长度可变的话,就无所谓最小值了。minmax()
函数 只在下面4个CSS属性中:
grid-template-columns / grid-template-rows
grid-auto-columns / grid-auto-rows
fit-content()
函数的浏览器兼容性
作用: 让元素尺寸 可以随容器缩放而缩放,最小尺寸随auto
值变化 不限制,最大尺寸不得超过某个限定值。某个限定值是,最大内容max-content
和限定值limit
二选其一,哪个更小,以哪个为界限。: fit-content()
fit-content( [ | ] )
min(minimum, max(limit, max-content))
(来自 规范文档)⇒ 本质上是计算出的 minmax(auto, max-content)
和 minmax(auto, limit)
中的较小值fit-content(limit)
= min(min(auto, limit), min(auto, max-content))
fit-content()
,表示 在auto
,指定 限定值limit
,内容的最大内容max-content
中的 取最小值。
auto
的可变性
auto
默认值会很大 ,当远大于最大内容max-content
,最小值 可能取 最大内容max-content
(如,一行文本)或者指定的限定值limit
中的一个,就看哪个更小。auto
值 是会跟着容器变化 而变小的,auto
值最小的时候, 可能会变成最小内容min-content
的大小 (如 一个汉字的宽度,一个单词的宽度) ,或者直接完全消失看不见。grid-template-columns: 80px fit-content(200px);
resize: horizontal;
+ overflow: hidden;
fit-content()
函数,最大值 limit=200px
。max-content > limit
时:
max-content 时
:
min()
: 用于比较数值的大小 并取出最小的那个。max()
: 用于比较数值的大小 并取出最大的那个。fit-content(limit)
的参数类型: 限定值limit
接受 长度值
或 百分比值
作为参数。
fit-content(limit)
函数的 可适用属性:
grid-template-rows
/ grid-template-columns
。grid-auto-rows
/ grid-auto-columns
。repeat()
函数中的 第2个参数,作为轨道大小
。box size
)的各类 宽度,高度 属性。width, height, min-width, min-height, max-width , max-height
,其中最大和最小尺寸 指的是内容大小(content size
)。/* 长度值 values */
fit-content(200px)
fit-content(5cm)
fit-content(30vw)
fit-content(100ch)
/* 百分比值 value */
fit-content(40%)
max-content
: 详情参见 【CSS3中 4个自适应关键字: available、max-content、min-content、fit-content】min-content
: 详情参见 【CSS3中 4个自适应关键字: available、max-content、min-content、fit-content】