批改状态:合格
老师批语:其实grid布局与flex是二个完全不同的东西, 同意不?
创建grid容器
display:gird,创建grid容器
grid-auto-flow设置项目在网格中的填充方式,默认行优先
grid-template-columns显示的行
grid-template-rows显示的列
<!DOCTYPE html><html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Document</title>
<style>
.container {
width: 400px;
height: 400px;
background-color: wheat;
/* 创建grid容器 */
display: grid;
/* 设置项目在网格中的填充方式,默认行优先 */
grid-auto-flow: row;
/* grid-auto-flow: column; */
/* 显示的行与列,三列两行 */
grid-template-columns: 100px 100px 100px;
grid-template-rows: 100px 100px;
/* 对于放置不小的项目,会隐式生产单元格 */
grid-auto-rows: auto;
grid-auto-rows: 150px;
}
.item {
background-color: lightblue;
font-style: 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>
</body>
</html>
2.单元格的数量和大小
gird布局设置单元格的数量和大小可以有这几种方式:固定值、百分比、按比例、重负设置、按分组设置、弹性设置、自动填充。
<style>
.container {
width: 400px;
height: 400px;
background-color: wheat;
/* 创建grid容器 */
display: grid;
/* 固定值 */
grid-template-columns: 100px 100px 100px;
grid-template-rows: 100px 100px 100px;
/* 百分比 */
grid-template-columns: 20% 30% 50%;
grid-template-rows: 100px auto 100px;
/* 按比例 */
grid-template-columns: 1fr 2fr 2fr;
grid-template-rows: 1fr auto 2fr;
/* 重复设置 */
grid-template-columns: repeat(3,100px);
grid-template-rows: repeat(3,100px);
/* 按分组来设置 50px 100px*/
grid-template-columns: repeat(2,50px 100px);
/* grid-template-rows: repeat(2,50px 100px); */
/* 弹性设置 */
grid-template-columns: repeat(2, minmax(50px,100px));
grid-template-rows: repeat(3, minmax(150px,1fr));
/* 自动填充 */
grid-template-columns: repeat(auto-fill,100px);
grid-template-rows: repeat(auto-fill,100px);
}
.item {
background-color: lightblue;
font-style: 2rem;
}
</style>
3使用默认网格线来划分单元格
grid-row-start:单元格行开始网格线
grid-row-end:单元格行结束网格线
grid-column-start:单元格列开始网格线
grid-column-end:单元格列结束网格线
还可以通过偏移量来简化
<style>
.container {
width: 400px;
height: 400px;
background-color: wheat;
/* 创建grid容器 */
display: grid;
grid-template-columns: repeat(4,1fr);
grid-template-rows: repeat(4,1fr);
}
.item {
font-style: 2rem;
}
.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; */
/* grid-row-start: 1;
grid-row-end: -1;
grid-column-start: 1;
grid-column-end: -1; */
}
/* 简写 */
.item.item2{
background-color: lightpink;
grid-row-start: 1;
grid-row-end: 3;
grid-column-start: 3;
grid-column-end: 5;
grid-row: 1/3;
grid-column: 3/5;
}
/* 使用偏移量来简化,将第三个移动到左下角 */
.item.item3 {
background-color: yellow;
/* grid-row-start: 3;
grid-row-end: span 2;
grid-column-start: 1;
grid-column-end: span 2; */
grid-row: 3 / span 2;
grid-column: 1 / span 2;
}
.item.item4{
background-color: lightgrey;
/* grid-row-start: 3; */
grid-row-end: span 2;
/* grid-column-start: 3; */
grid-column-end: span 2;
}
</style>
4.使用命名网格线来划分单元格
<style>
.container {
width: 400px;
height: 400px;
background-color: wheat;
/* 创建grid容器 */
display: grid;
grid-template-columns: [c1-start]100px[c1-end c2-start] 100px[c2-end c3-start] 100px[c3-end];
grid-template-rows: [r1-start]100px[r1-end r2-start] 100px[r2-end r3-start] 100px[r3-end];;
}
.item {
font-style: 2rem;
}
.item.item1 {
background-color: lightgreen;
/* 默认就是跨越一行/一列,所以可以省略 */
grid-row-start: r2-start;
grid-row-end: r1-end;
grid-column-start: c3-start;
}
/* 简写 */
.item.item2{
background-color: lightpink;
grid-column-end: span 3;
}
/* 使用偏移量来简化,将第三个移动到左下角 */
.item.item3 {
background-color: yellow;
grid-column-end: span 2;
grid-row-end: span 2;
}
.item.item4{
background-color: lightgrey;
}
</style>
5.默认网格区域
grid-area: row-srart/col-start/row-end/col-end;
<style>
.container {
width: 400px;
height: 400px;
background-color: wheat;
/* 创建grid容器 */
display: grid;
grid-template-columns: repeat(4,1fr);
grid-template-rows: repeat(4,1fr);
}
.item {
font-style: 2rem;
}
.item.item1 {
background-color: lightgreen;
/* grid-area: 1 / 1 / 2 / 5; */
/* 用偏移量进行简化 */
/* grid-area: 1 / 1 / span 1 / span 4; */
/* 是从当前位置开始的填充 */
grid-area: span 1 / span 4;
}
/* 简写 */
.item.item2{
background-color: lightpink;
/* grid-area: 2 / 1 / span 2 /span 1; */
/* grid-area: span 2 / span 1; */
/* 默认就是偏移一行/一列 */
grid-area: span 2;
}
/* 使用偏移量来简化,将第三个移动到左下角 */
.item.item3 {
background-color: yellow;
}
.item.item4{
background-color: lightgrey;
}
.item.item5{
background-color: violet;
/* grid-area: row-srart/col-start/row-end/col-end; */
}
</style>
6.命名网格区域
使用grid-template-areas这个属性来命名网格区域
<style>
.container {
width: 400px;
height: 400px;
background-color: wheat;
/* 创建grid容器 */
display: grid;
grid-template-columns: 80px auto 80px;
grid-template-rows: 40px auto 40px;
/* 设置命名网格区域 */
grid-template-areas:
"header header header"
"left main right"
"footer footer footer"
;
}
.item {
font-style: 2rem;
}
.item.item1 {
background-color: lightgreen;
grid-area: header;
}
/* 简写 */
.item.item2{
background-color: lightpink;
grid-area: left;
}
/* 使用偏移量来简化,将第三个移动到左下角 */
.item.item3 {
background-color: yellow;
grid-area: main;
}
.item.item4{
background-color: lightgrey;
grid-area: right;
}
.item.item5{
background-color: violet;
grid-area: footer;
}
</style>
7.网格区域占位符
"."使用点来进行网格区域占位
<style>
.container {
width: 400px;
height: 400px;
background-color: wheat;
/* 创建grid容器 */
display: grid;
grid-template-columns: 80px auto 80px;
grid-template-rows: 40px auto 40px;
/* 设置命名网格区域 */
grid-template-areas:
"header header header"
" . . ."
"footer footer footer"
;
}
.item {
font-style: 2rem;
}
.item.item1 {
background-color: lightgreen;
grid-area: header;
}
/* 简写 */
.item.item2{
background-color: lightpink;
/* 多余 */
/* grid-area: left; */
}
/* 使用偏移量来简化,将第三个移动到左下角 */
.item.item3 {
background-color: yellow;
/* 多余 */
/* grid-area: main; */
}
.item.item4{
background-color: lightgrey;
/* 多余 */
/* grid-area: right; */
}
.item.item5{
background-color: violet;
grid-area: footer;
}
</style>8.网格区域默认先名称
<style>
.container {
width: 400px;
height: 400px;
background-color: wheat;
/* 创建grid容器 */
display: grid;
grid-template-columns: 80px 1fr;
grid-template-rows: 40px auto 40px;
/* 设置命名网格区域 */
grid-template-areas:
"header header"
" . . "
"footer footer "
;
}
.item {
font-style: 2rem;
}
.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: right; */
grid-area: footer-start / footer-start /footer-end / footer-end
}
</style>
9.设置单元格在容器中的对齐方式
主要是使用 justify-content来设置垂直方向的对齐方式和align-content来设置水平方向的对齐方式
<style>
.container {
width: 400px;
height: 400px;
background-color: wheat;
/* 创建grid容器 */
display: grid;
grid-template-columns: repeat(3, 50px);
grid-template-rows: repeat(3,50px);
justify-content: center;
align-content: center;
justify-content: space-between;
justify-content: space-around;
justify-content: space-evenly;
align-content: space-between;
align-content: space-around;
align-content: space-evenly;
/* justify-content: stretch;
grid-template-columns: repeat(3,auto);
align-content: stretch;
grid-template-rows: repeat(3,1fr); */
/* place-content: 垂直对齐,水平对齐; */
place-content: center start;
place-content: center;
}
.item {
background-color: violet;
font-style: 2rem;
}
</style>
10.设置项目单元格在容器中的对齐方式
使用justify-self设置项目单元格在容器中的行对齐方式
align-items设置项目单元格在容器中的列对齐方式
上面两个属性也可以简写为place-items: 垂直 水平;
<style>
.container {
width: 400px;
height: 400px;
background-color: wheat;
/* 创建grid容器 */
display: grid;
grid-template-columns: repeat(3, 1fr);
grid-template-rows: repeat(3,1fr);
justify-content: stretch;
align-content: stretch;
justify-self: center;
align-items: center;
/* place-items: 垂直 水平; */
place-items: start end;
place-items: center center;
place-items: center;
}
.item {
width: 50px;
height: 50px;
background-color: violet;
font-style: 2rem;
}
</style>
总结:gird布局主要是模仿表格,我们也可以把一个网页看成是由多个表格单元格来组成的,单元格的属性设置就能使得元素在网页中排列。对于gird对齐方式这一块,和flex布局的属性是一样的,可以一起结合起来记忆。
Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号