容器属性
display
属性,设置为grid,表示生成块级网格。 当元素设置了网格布局,column、float、clear、vertical-align属性无效。grid-template-columns | grid-template-rows
属性,定义网格的列和行,可以设置多个值,以空格分隔(1)
grid-template-columns
定义网格的列宽(2)
grid-template-rows
定义网格的行高(3)使用方式:
.container {
grid-template-columns: <track-size> ... | [<line-name>] <track-size> ...;
grid-template-rows: <track-size> ... | [<line-name>] <track-size> ...;
}
track-size:轨道的大小,即行高和列宽,单位包括css的长度单位(如px
)、百分比(%
)、fr
line-name:网格线名称,可以选择任意的名字,需使用[]
符号进行包裹
(4)代码实战与运行效果:
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title></title>
<style>
.container {
width:600px;
height: 600px;
border:2px dashed #3ad900;
display:grid;/*定义为块网格*/
grid-template-columns: [first] 150px [second] 20% [third] 1fr;/*定义列宽,一共三列,每一列的列宽分别为150像素,当前容器宽度的20%,占满当前容器剩余的宽度*/
grid-template-rows: [one] 1fr [two] 150px [three] 10%;/*定义行高,一共三行,每一行的行高分别为占满当前容器剩余的高度,150像素,当前容器宽度的10%*/
}
.item{
border:2px dashed #990055;
}
</style>
</head>
<body>
<div class="container">
<div class="item">1</div>
<div class="item">2</div>
<div class="item">3</div>
<div class="item">4</div>
<div class="item">5</div>
<div class="item">6</div>
<div class="item">7</div>
<div class="item">8</div>
<div class="item">9</div>
</div>
</body>
</html>
grid-template-areas
属性,定义网格的名称(1)使用方式:
.container {
grid-template-areas:"grid-area-name|. grid-area-name|. grid-area-name|."/*代表一行*/
"grid-area-name|. grid-area-name|. grid-area-name|."
"......";
}
或
.container {
grid-template-areas:none;
}
grid-area-name:网格区域的名称
“.”:代表一个空网格单元
none:没有定义网格区域
(2)注:每一行代表网格中的一行,使用引号
进行包裹,使用回车
进行分隔;引号
中一个值对应一个单元格,以空格隔开,所有值应该一一对应,不可漏写也不可多写,否则容易出现问题;若名称相同,则自动认定为同一个网格区域
(3)代码实战与运行效果:
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title></title>
<style>
.container {
width:600px;
height: 600px;
border:2px dashed #3ad900;
display:grid;
grid-template-columns: 150px 150px 150px;
grid-template-rows: 150px 150px 150px;
grid-template-areas:'one two three'
'four five area'
'. . area';
}
.item{
border:2px dashed #990055;
}
</style>
</head>
<body>
<div class="container">
<div class="item">1</div>
<div class="item">2</div>
<div class="item">3</div>
<div class="item">4</div>
<div class="item">5</div>
<div class="item">6</div>
<div class="item">7</div>
<div class="item">8</div>
<div class="item">9</div>
</div>
</body>
</html>
grid-column-gap | grid-row-gap
属性,定义网格间的间距(1)
grid-column-gap
定义列与列之间的间距(2)
grid-row-gap
定义行与行之间的间距(3)使用方法:
.container {
grid-column-gap: <line-size>;
grid-row-gap: <line-size>;
}
line-size:长度值
注:若行、列之间的间距相等,可简写为grid-gap
或者gap
属性,使用方法:
.container {
grid-gap: <line-size>;
或
gap: <line-size>;
}
(5)代码实现与运行效果:
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title></title>
<style>
.container {
width:600px;
height: 600px;
border:2px dashed #3ad900;
display:grid;
grid-template-columns: 150px 150px 150px;
grid-template-rows: 150px 150px 150px;
grid-column-gap: 10px;
grid-row-gap: 10px;
}
.item{
border:2px dashed #990055;
}
</style>
</head>
<body>
<div class="container">
<div class="item">1</div>
<div class="item">2</div>
<div class="item">3</div>
<div class="item">4</div>
<div class="item">5</div>
<div class="item">6</div>
<div class="item">7</div>
<div class="item">8</div>
<div class="item">9</div>
</div>
</body>
</html>
justify-items|align-items
属性,设置项目内容的对齐方式,针对的是每个项目
(1)justify-items
设置项目内容的水平对齐方式,属性值如下:
序号 | 属性值 | 描述 |
---|---|---|
1. | start | 项目内容与网格区域的左端对齐 |
2. | end | 项目内容与网格区域的右端对齐 |
3. | center | 项目内容位于网格区域的中间位置 |
4. | stretch | 项目内容宽度占据整个网格区域空间(这是默认值) |
(2)align-items
设置项目内容的垂直对齐方式
序号 | 属性值 | 描述 |
---|---|---|
1. | start | 项目内容与网格区域的顶端对齐 |
2. | end | 项目内容与网格区域的底端对齐 |
3. | center | 项目内容位于网格区域的垂直中心位置 |
4. | stretch | 项目内容高度占据整个网格区域空间(这是默认值) |
(3)使用方式:
.container {
justify-items: start | end | center | stretch;
align-items: start | end | center | stretch;
}
(4)justify-items|align-items
属性也可以简写为place-items
属性,顺序为先垂直后水平,属性值同justify-items|align-items
属性,使用方式如下:
.container {
place-items: <align-items> <justify-items>;
或
place-items: start;
}
注:当只设置一个值时,表示水平与垂直同一对齐方式
(5)代码实现与运行结果:
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title></title>
<style>
.container {
width:600px;
height: 600px;
border:2px dashed #3ad900;
display:grid;
grid-template-columns: 150px 150px 150px;
grid-template-rows: 150px 150px 150px;
grid-column-gap: 10px;
grid-row-gap: 10px;
/****/
justify-items: center;
align-items: center;
/*等同于*/
place-items: center center;
/****/
}
.item{
border:2px dashed #990055;
}
</style>
</head>
<body>
<div class="container">
<div class="item">1</div>
<div class="item">2</div>
<div class="item">3</div>
<div class="item">4</div>
<div class="item">5</div>
<div class="item">6</div>
<div class="item">7</div>
<div class="item">8</div>
<div class="item">9</div>
</div>
</body>
</html>
justify-content | align-content
属性,设置所有项目在容器中的对齐方式,将所有的项目看做一个整体进行对齐(1)
justify-content
设置项目的水平对齐方式,属性值如下:
序号 | 属性值 | 描述 |
---|---|---|
1. | start | 项目与网格容器的左边对齐 |
2. | end | 项目与网格容器的右边对齐 |
3. | center | 项目与网格容器的中间对齐 |
4. | stretch | 调整项目的大小,让宽度填充整个网格容器 |
5. | space-around | 分散对齐,每个项目中间的间隙相同,左右两端放置一半的空间 |
6. | space-between | 两端对齐,左右两端没有空间 |
7. | space-evenly | 每个项目中间的间隙、每个项目与网格边端间隙相同 |
(2)align-content
设置项目的垂直对齐方式,属性值如下:
序号 | 属性值 | 描述 |
---|---|---|
1. | start | 项目与网格容器的顶部对齐 |
2. | end | 项目与网格容器的底端对齐 |
3. | center | 项目与网格容器的中间对齐 |
4. | stretch | 调整项目的大小,让高度填充整个网格容器 |
5. | space-around | 分散对齐,每个项目中间的间隙相同,上下两端放置一半的空间 |
6. | space-between | 两端对齐,上下两端没有空间 |
7. | space-evenly | 每个项目中间的间隙、每个项目与网格边端间隙相同 |
(3)使用方式:
.container {
justify-content: start | end | center | stretch | space-around | space-between | space-evenly;
align-content: start | end | center | stretch | space-around | space-between | space-evenly;
}
(4)justify-content | align-content
属性可以简写为place-content
,顺序为先垂直后水平,使用方式如下:
.container {
place-content: <align-content> <justify-content>;
}
(5)代码示例与运行结果:
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title></title>
<style>
.container {
width:600px;
height: 600px;
border:2px dashed #3ad900;
display:grid;
grid-template-columns: 150px 150px 150px;
grid-template-rows: 150px 150px 150px;
grid-column-gap: 10px;
grid-row-gap: 10px;
/****/
justify-content: space-between;
align-content: space-evenly;
/*等同于*/
place-content: space-evenly space-between;
/****/
}
.item{
border:2px dashed #990055;
}
</style>
</head>
<body>
<div class="container">
<div class="item">1</div>
<div class="item">2</div>
<div class="item">3</div>
<div class="item">4</div>
<div class="item">5</div>
<div class="item">6</div>
<div class="item">7</div>
<div class="item">8</div>
<div class="item">9</div>
</div>
</body>
</html>
项目属性
grid-column-start | grid-column-end | grid-row-start | grid-row-end
属性,通过设定起止位置确定项目在网格内的位置(1)
grid-column-start
: 起始列编号(2)
grid-column-end
: 终止列编号(3)
grid-row-start
: 起始行编号(4)
grid-row-end
: 终止行编号(5)使用方式:
.item {
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
}
number:网格线的编号
name:网格线的名称
auto:自动布局,或者自动跨度,或者跨越一个默认的轨道
(6)
grid-column-start
与grid-column-end
可简写为grid-column
,grid-row-start
与grid-row-end
可简写为grid-row
,使用方式如下:.item {
grid-column: <start-line> / <end-line> | <start-line> / span <value>;
grid-row: <start-line> / <end-line> | <start-line> / span <value>;
}
/
前后都要加空格(7)示例代码与运行结果:
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title></title>
<style>
.container {
width:600px;
height: 600px;
border:2px dashed #3ad900;
display:grid;
grid-template-columns: 150px 150px 150px;
grid-template-rows: 150px 150px 150px;
grid-column-gap: 5px;
grid-row-gap: 5px;
justify-content: space-between;
align-content: space-evenly;
}
.item{
border:2px dashed #990055;
}
/*定义第一个项目的位置*/
.item:nth-child(1){
background-color: coral;
/****/
grid-column-start: 2;
grid-column-end: 4;
grid-row-start: 2;
grid-row-end: 4;
/*等同于*/
grid-column: 2 / 4;
grid-row: 2 / 4;
/*等同于*/
grid-column: 2 / span 2;
grid-row: 2 / span 2;
/****/
}
</style>
</head>
<body>
<div class="container">
<div class="item">1</div>
<div class="item">2</div>
<div class="item">3</div>
<div class="item">4</div>
<div class="item">5</div>
<div class="item">6</div>
<div class="item">7</div>
<div class="item">8</div>
<div class="item">9</div>
</div>
</body>
</html>
grid-area
属性(1)使用方式:
.item {
grid-area: <name> | <row-start> / <column-start> / <row-end> / <column-end>;
}
name :grid-template-areas 中定义的命名
row-start / column-start / row-end / column-end:按逆时针顺序放置,可以是数字,也可以是网格线的名字
/
前后都要加空格(2)代码实战与运行效果:
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title></title>
<style>
.container {
width:600px;
height: 600px;
border:2px dashed #3ad900;
display:grid;
grid-template-columns: 150px 150px 150px;
grid-template-rows: 150px 150px 150px;
grid-column-gap: 5px;
grid-row-gap: 5px;
justify-content: space-between;
align-content: space-evenly;
grid-template-areas:'one two three'
'four five area'
'. . area';
}
.item{
border:2px dashed #990055;
}
.item:nth-child(1){
background-color: coral;
grid-area: 1 / 2 / 3 / five;
}
</style>
</head>
<body>
<div class="container">
<div class="item">1</div>
<div class="item">2</div>
<div class="item">3</div>
<div class="item">4</div>
<div class="item">5</div>
<div class="item">6</div>
<div class="item">7</div>
<div class="item">8</div>
<div class="item">9</div>
</div>
</body>
</html>
justify-self | align-self
属性,定义单个项目的对齐方式(1)
justify-self
设置水平方向对齐方式
序号 | 属性值 | 描述 |
---|---|---|
1. | start | 内容与网格区域的左端对齐 |
2. | end | 内容与网格区域的右端对齐 |
3. | center | 内容位于网格区域的中间位置 |
4. | stretch | 内容宽度占据整个网格区域空间(这是默认值) |
(2)align-self
设置垂直方向对齐方式
序号 | 属性值 | 描述 |
---|---|---|
1. | start | 内容与网格区域的左端对齐 |
2. | end | 内容与网格区域的右端对齐 |
3. | center | 内容位于网格区域的中间位置 |
4. | stretch | 内容宽度占据整个网格区域空间(这是默认值) |
(3)使用方式:
.item {
justify-self: start | end | center | stretch;
align-self: start | end | center | stretch;
}
(4)justify-self
与align-self
可简写为place-self
属性,先垂直后水平,使用方式如下:
.item {
place-self: <align-self> <justify-self>;
}
(5)代码示例与运行结果:
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title></title>
<style>
.container {
width:600px;
height: 600px;
border:2px dashed #3ad900;
display:grid;
grid-template-columns: 150px 150px 150px;
grid-template-rows: 150px 150px 150px;
grid-column-gap: 5px;
grid-row-gap: 5px;
justify-content: space-between;
align-content: space-evenly;
}
.item{
border:2px dashed #990055;
}
.item:nth-child(1){
background-color: coral;
/****/
justify-self: center;
align-self: center;
/*等同于*/
place-self: center center;
/****/
}
</style>
</head>
<body>
<div class="container">
<div class="item">
<div>hello</div>
<div>world</div>
</div>
<div class="item">2</div>
<div class="item">3</div>
<div class="item">4</div>
<div class="item">5</div>
<div class="item">6</div>
<div class="item">7</div>
<div class="item">8</div>
<div class="item">9</div>
</div>
</body>
</html>