Correcting teacher:天蓬老师
Correction status:qualified
Teacher's comments:手写了这么多, 累点但效果应该是显著的
通过对网格布局的学习,发现他和flex弹性布局相似的地方不较多,区别只是作用范围上,其中flex
主要使用在一维空间,并且比较适合细节的布局和元素布局调整。而grid
则宏观上的效果更好一些,这都是得益于他的二位空间操作性。当然二者能做的工作没有必须使用哪一个,主要还是需要看页面的布局需求。尽量以减少代码冗余,以及提供复用性去考虑。
因为个人习惯原因,关于grid
的容器和项目属性说明都在代码中,请认真浏览哦 ~.~.~ !
我们以典型的圣杯布局为例,在整个grid
容器对齐(现对于页面)上使用了
.container{
/*标准写法
justify-content: center;
align-content: center;
*/
/*简写*/
place-content: center;
}
容器内项目的对齐使用了
.container{
/*设置项目(单元格)中元素的对齐方式:
justify-items:center;
align-items:center;
*/
place-items: center;
}
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Grid布局</title>
</head>
<body>
<div class="container">
<div class="header"><span>header</span></div>
<div class="left-ad">left-ad</div>
<div class="content">content</div>
<div class="right-ad">right-ad</div>
<div class="footer">footer</div>
</div>
</body>
</html>
/*网格布局涉及的术语:
1-网格线(grid lines):也就是划分格子的线,可以使用编号或者命名进行区分;
2-轨道(grid tracks):是指两条网格线中间的空间,轨道的宽度一般使用 px,%,fr来表示(fr表示等分份数的计量单位);
3-单元格(grid cell):指被四条网格线包围起来的封闭空间(矩形区域);
4-网格区域(grid area):由多个单元格形成的矩形区域(封闭);
5-网格间距(grid gap):行或者列之间的间隔;
*/
/*grid 网格容器的属性
1-划分行、列与命名(显式网格):
1.1 grid-template-rows,定义行(横向)的网格线之间轨道的大小;
1.2 grid-template-columns,定义列(纵向)的网格线之间轨道的大小;
其大小可是使用绝对值 px,也可以使用 %,同时也可按照等分份数占比 fr;
特列: grid-template-columns:100px 1fr ,其中的 ‘1fr’,表示将轨道剩余空间,分配给第二列的单元格;
1.3 repeat()函数,在轨道大小存在重复时可是使用此函数;
1.4 minmax()函数,指定轨道大小的 最小值 和最大值;
1.5 grid-template-area, 用于定义网格区域的名称;
一般配合网格元素(item项目)的 grid-area 属性来使用;
2-设置行或者列之间的间隔:
2.1 grid-row-gap,设置行之间的间隔距离;
2.2 grid-column-gap,设置列之间的间隔距离;
简写 grid-gap: 行间距,列间距; ,例如:grid-gap: 20px 30px ;
3-隐式网格,是指浏览器自动计算生成的网格,一般是未进行显示设置,但是grid容器中存在元素时;
3.1 grid-auto-columns, 设置隐式网格的列宽;
3.2 grid-auto-row, 设置隐式网格的行高;
4-网格的内元素(item项目)的设置:
4.1 grid-auto-flow, 设置网格中元素(item项目)的排列流动方向/排列方向(默认先行后列);
4.2 justify-content, 设置网格内所有元素(item项目)的水平方向对齐方式;
4.3 align-content, 设置网格内所有元素(item项目)的垂直对方向齐方式;
4.2/4.3 简写: place-content: 水平对齐方式 垂直对齐方式 ;
4.4 justify-items,设置单元格中内容,在单元格内的水平对齐方式;
4.5 align-items,设置单元格中内容,在单元格内的垂直对齐方式;
4.4/4.5 简写:place-items
*/
/*grid 网格子元素(item项目/单元格)的属性
1-定义子元素(item项目/单元格)所在的单元格;
1.1 grid-column:start/end ,定义项目所在单元格的列的起止线;
grid-row:start/end ,定义项目所在单元格的行的起止线;
1.2 grid-area: top-lines/left-lines/bottom-lines/right-lines ,按照逆时针顺序定义项目所在单元格的区域;
grid-area: header; 网格项目通过绑定容器中定义的网格区域名字,确认所在区域;
1.3 justify-self, 设置网格容器中,某一个特定项目(单元格)的水平对齐方式;
align-self, 设置网格容器中,某一个特定项目(单元格)的垂直对齐方式;
1.3 简写: place-self: 水平对齐方式 垂直对齐方式;
*/
/*CSS样式正文
公共样式*/
*{
margin: 0;
padding: 0;
}
* :not(body){
outline: 1px dashed red;
}
.container{
width: 600px;
height: 400px;
/*转换为网格布局*/
display: grid;
/*划分行和列,设置行和列的间距*/
grid-template-rows: 80px 100px 80px;
grid-template-columns: repeat(3,80px);
grid-gap:10px 15px;
/*定义网格内-项目名字*/
/*设置网格容器本身,在页面的对齐方式:
justify-content: center;
align-content: center;
*/
place-content: center;
/*设置项目(单元格)中元素的对齐方式:
justify-items:center;
align-items:center;
*/
place-items: center;
}
/*设置网格区域名字*/
.container{
grid-template-areas: 'header header header'
'left-ad content right-ad'
'footer footer footer';
}
/*绑定单元格所占区域名字*/
.container>.header{
grid-area: header;
width: 80%;
height: 80%;
background-color: #63a35c;
place-self: center;
/*转换flex 弹性盒子对 内部元素进行居中 */
display: flex;
flex-flow: row nowrap;
justify-content: center;
align-items: center;
}
/*头部内的子元素*/
.container>.header>span{
width: 100px ;
height: 30px;
background-color: #a71d5d;
/*元素内容文本居中*/
line-height: 30px;
text-align: center;
}
/*left-ad侧边栏*/
.container>.left-ad{
grid-area: left-ad;
width: 100%;
height: 100%;
background-color: #9a6e3a;
}
/*主体内容区域*/
.container>.content{
grid-area: content;
width: 100%;
height: 100%;
background-color: wheat;
}
/*right-ad侧边栏*/
.container>.right-ad{
grid-area: right-ad;
width: 100%;
height: 100%;
background-color: #9a6e3a;
}
/*底部版权*/
.container>.footer{
grid-area: footer;
width: 100%;
height: 100%;
background-color: #178cee;
}