Correcting teacher:天蓬老师
Correction status:qualified
Teacher's comments:grid现在的兼容性已经很好了, 只要不太古老的浏览器都没问题
介绍:
/* 创建grid容器 */
display: grid;
代码:
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
<title>创建grid容器</title>
<style>
.container {
/* 容器大小 */
width: 500px;
height: 500px;
/* 背景颜色 */
background-color: wheat;
/* 创建grid容器 */
display: grid;
/* 设置项目在网格中的填充方案, 默认行优先 */
grid-auto-flow: row;
/* grid-auto-flow: column; 这个是列优先*/
/* 显式地划分行与列, 三列二行 */
/* grid-template网格模板columns列 值 第一列 第二列 第三列*/
grid-template-columns: 100px 100px 100px;
/* grid-template网格模板rows行 值 第一行 第二行*/
grid-template-rows: 100px 100px 100px;
/* 对于放置不下的项目,会隐式生成单元格 */
grid-auto-rows: auto; /*默认*/
grid-auto-rows: 150px; /*自定义放不下的项目*/
}
.item {
/* 背景颜色 */
background-color: lightblue;
/* 文字2倍大 */
font-size: 2rem;
}
</style>
</head>
<body>
<div class="container">
<div class="item item1">1</div>
<div class="item item2">2</div>
<div class="item item3">3</div>
<div class="item item4">4</div>
<div class="item item5">5</div>
<div class="item item6">6</div>
<div class="item item7">7</div>
<div class="item item7">8</div>
<div class="item item7">9</div>
</div>
</body>
</html>
效果:
介绍:
代码
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
<title>设置单元格的数量与大小</title>
<style>
.container {
/* 容器大小 */
width: 400px;
height: 400px;
background-color: wheat;
/* 创建grid容器 */
display: grid;
/* 固定值 */
/* grid-template网格模板columns列 值 第一列 第二列 第三列*/
grid-template-columns: 100px 100px 100px;
/* grid-template网格模板rows行 值 第一行 第二行*/
grid-template-rows: 100px 100px 100px;
/* 百分比 第一列用百分之20 第二列用百分之30 第三列自动*/
grid-template-columns: 20% 30% auto;
/* 高度设置 第一行100 第2行自动 第三行100 */
grid-template-rows: 100px auto 100px;
/* 比例 1fr 等于一比一 每行每列都一样宽或者高*/
grid-template-columns: 1fr 2fr 2fr;
grid-template-rows: 1fr auto 2fr;
/* 重复设置 */
/* repeat(显示几个, 定义的值); */
grid-template-columns: repeat(3, 100px);
/* repeat(显示几个, 定义的值); */
grid-template-rows: repeat(3, 100px);
/* 按分组来设置: (50px-100px) repeat(重复次数, 这里为一个组的值第一列50px 第二列100px);*/
/* 会生成4列 50px 100px 50px 100px */
grid-template-columns: repeat(2, 50px 100px);
/* 弹性 */
/* repeat(重复次数, minmax(最小值50px, 最大值100px)); */
grid-template-columns: repeat(2, minmax(50px, 100px));
/* 这里是设置高度 repeat(重复次数, minmax(最小150px, 1fr));*/
grid-template-rows: repeat(3, minmax(150px, 1fr));
/* 自动填充 */
/* repeat(从左到右auto-fill, 宽度120px); */
grid-template-columns: repeat(auto-fill, 50px);
/*行 repeat(从左到右auto-fill, 宽度120px); */
grid-template-rows: repeat(auto-fill, 50px);
}
.item {
background-color: lightblue;
font-size: 2rem;
}
</style>
</head>
<body>
<div class="container">
<div class="item item1">1</div>
<div class="item item2">2</div>
<div class="item item3">3</div>
<div class="item item4">4</div>
<div class="item item5">5</div>
<div class="item item6">6</div>
<div class="item item7">7</div>
<div class="item item7">8</div>
<div class="item item7">9</div>
</div>
</body>
</html>
效果:
/* 选中起始行 第一行起 */
grid-row-start: 1;
/* 选中结束行 第三行 */
grid-row-end: 3;
/* 选中起始列 第一行起 */
grid-column-start: 1;
/* 选中结束列 第三行 */
grid-column-end: 3;
代码:
/* 简写 起始行 结束行 */
grid-row: 1 / 3;
/* 简写 起始列 结束列 */
grid-column: 3 / 5;
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
<title>使用默认的网格线来划分单元格</title>
<style>
.container {
/* 容器大小 */
width: 400px;
height: 400px;
background-color: wheat;
/* 创建grid容器 */
display: grid;
/* repeat(生成四个列4, 按比例1fr); */
grid-template-columns: repeat(4, 1fr);
/* repeat(生成四个行4, 按比例1fr); */
grid-template-rows: repeat(4, 1fr);
}
.item {
font-size: 2rem;
}
/* 选中第一个 将第一个占据4个单元格 */
.item.item1 {
background-color: lightgreen;
/* 选中起始行 第一行起 */
grid-row-start: 1;
/* 选中结束行 第三行 */
grid-row-end: 3;
/* 选中起始列 第一行起 */
grid-column-start: 1;
/* 选中结束列 第三行 */
grid-column-end: 3;
/* 按反向选择 放最后
grid-row-start: -1;
grid-row-end: -3;
grid-column-start: -1;
grid-column-end: -3; */
/* 放到中间
grid-row-start: 2;
grid-row-end: 4;
grid-column-start: 2;
grid-column-end: 4;
选择全部占据 结尾可以选择负-1 代表最后
grid-row-start: 1;
grid-row-end: -1;
grid-column-start: 1;
grid-column-end: -1; */
}
/* 选中第二个 简写 */
.item.item2 {
background-color: lightpink;
/* 简写 起始行 结束行 */
grid-row: 1 / 3;
/* 简写 起始列 结束列 */
grid-column: 3 / 5;
}
/* 选中第三个 使用偏移量来简化, 将第三个移动到左下角 */
.item.item3 {
background-color: yellow;
/*行 span表示跨越 span2 表示跨越2行 */
grid-row: 3 / span 2;
/*列 span表示跨越 span2 表示跨越2行 */
grid-column: 1 / span 2;
}
/* 选中4 */
.item.item4 {
background-color: lightgrey;
/* 行 直接跨越2行grid-row-end: 3; */
grid-row-end: span 2;
/*列 直接跨越2列grid-column-end: 3; */
grid-column-end: span 2;
}
</style>
</head>
<body>
<div class="container">
<div class="item item1">1</div>
<div class="item item2">2</div>
<div class="item item3">3</div>
<div class="item item4">4</div>
</div>
</body>
</html>
练习代码:
.item.item1 {
background-color: lightgreen;
/* 选中起始行 第一行起 */
grid-row-start: 1;
/* 选中结束行 第三行 */
grid-row-end: -1;
/* 选中起始列 第一行起 */
grid-column-start: 1;
/* 选中结束列 第三行 */
grid-column-end: 2;
.item.item2 {
background-color: lightpink;
/* 简写 起始行 结束行 */
grid-row: 1 / 2;
/* 简写 起始列 结束列 */
grid-column: 2 / span 3;
}
/* 选中第三个 使用偏移量来简化, 将第三个移动到左下角 */
.item.item3 {
background-color: yellow;
/*行 span表示跨越 span2 表示跨越2行 */
grid-row: 2 / -1;
/*列 span表示跨越 span2 表示跨越2行 */
grid-column: 1 / span -1;
练习效果:
命名方法介绍:
/* [c1代表第一列-start代表起始线] [c1第一列-end第一列结束县 c2第二列-start第二列起始] ... */
grid-template-columns: [c1-start] 100px [c1-end c2-start] 100px [c2-end c3-start] 100px [c3-end];
/* [c1代表第一行-start代表起始线] [c1第一行-end第一行结束县 c2第二行-start第二行起始] ... */
grid-template-rows: [r1-start] 100px [r1-end r2-start] 100px [r2-end r3-start] 100px [r3-end];
代码:
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
<title>使用命名网格线来划分单元格</title>
<style>
.container {
/* 容器大小 */
width: 400px;
height: 400px;
background-color: wheat;
/* 创建grid容器 */
display: grid;
/* [c1代表第一列-start代表起始线] [c1第一列-end第一列结束县 c2第二列-start第二列起始] ... */
grid-template-columns: [c1-start] 100px [c1-end c2-start] 100px [c2-end c3-start] 100px [c3-end];
/* [c1代表第一行-start代表起始线] [c1第一行-end第一行结束县 c2第二行-start第二行起始] ... */
grid-template-rows: [r1-start] 100px [r1-end r2-start] 100px [r2-end r3-start] 100px [r3-end];
}
.item {
font-size: 2rem;
}
.item.item1 {
background-color: lightgreen;
/* 默认就是跨越一行/一列,所以可以省略 */
/* 开始行 第一行开始 第二行结束*/
grid-row-start: span 4;
/* 开始列 第三列开始*/
grid-column-start: span 1;
}
/* 简写 */
.item.item2 {
background-color: lightpink;
grid-column-start: 2;
/* grid-column: c1-start / c3-end; */
/* 直接跨越三行 */
grid-column-end: span 3;
}
/* 使用偏移量来简化, 将第三个移动到左下角 */
.item.item3 {
background-color: yellow;
/* 跨越2行 */
grid-row-end: span 2;
/* 跨越2列 */
grid-column-end: span 2;
}
.item.item4 {
background-color: lightgrey;
}
</style>
</head>
<body>
<div class="container">
<div class="item item1">1</div>
<div class="item item2">2</div>
<div class="item item3">3</div>
<div class="item item4">4</div>
</div>
</body>
</html>
练习效果:
练习代码:
.item.item1 {
background-color: lightgreen;
grid-area: span 4 / span 4;
.item.item2 {
background-color: lightpink;
grid-area: span 1 / span 4;
}
}
效果:
代码:
.container {
/* 容器大小 */
width: 400px;
height: 400px;
background-color: wheat;
/* 创建grid容器 */
display: grid;
/* 第一列80 第二列自动计算 第三列80 */
grid-template-columns: 80px 1fr 80px;
/* 第一行40 第二行自动计算 第三行40 */
grid-template-rows: 40px 1fr 40px;
/* 设置命名网格区域, 相同名称的命名区域会合并 */
grid-template-areas:
"hello hello hello"
"left main right"
"footer footer footer";
}
代码:
grid-template-areas:
"hello hello hello"
". . . "
"footer footer footer";
效果:
代码:
.item.item1 {
background-color: lightgreen;
grid-area: header-start / header-start / header-end / header-end;
}
/* 简写 */
.item.item2 {
background-color: lightpink;
/* 多余 */
/* grid-area: left; */
}
/* 使用偏移量来简化, 将第三个移动到左下角 */
.item.item3 {
background-color: yellow;
/* grid-area: main; */
}
.item.item4 {
background-color: lightgrey;
grid-area: footer-start / footer-start / footer-end / footer-end;
效果:
/* 水平方向对齐 */
justify-content: end;
/* 垂直方向对齐 */
align-content: end;
/* center居中 */
justify-content: center;
align-content: center;
/* 水平方向两端对齐space-between; */
justify-content: space-between;
/* 水平方向分散对齐space-around */
justify-content: space-around;
/* 水平方向平行对齐space-evenly */
justify-content: space-evenly;
/* 纵向两端对齐space-between */
align-content: space-between;
/* 纵向分散对齐space-around; */
align-content: space-around;
/* 纵向平行对齐space-evenly; */
align-content: space-evenly;
/* place-content: 垂直对齐 水平对齐; */
place-content: center start;
介绍:
/ 水平平设置靠左 /
justify-items: stretch;
/ 垂直方向 /
align-items: stretch;
/ 水平靠左 /
justify-items: start;
/ 垂直居中 /
align-items: center;
/ 水平居中 /
justify-items: center;
/ 垂直居中 /
align-items: center;
常用的:
/* z直接设置全部居中 */
place-items: center;
效果