批改状态:合格
老师批语:
基于行与列的二维空间布局
有若干个矩形网格单元构成;
使用属性display:grid就是网格容器;
默认是块元素在span中设置dispaly:grid其本身的行内元素会成为块元素
单元格|网格区域
网格容器中的子元素就是网格项目;
默认生成1行N列的容器(N就是项目的数量)
由多个网格单元组成
轨道就是行和列
设置列数量grid-template-columns :
设置轨道的行高 grid-template-rows :
容器中轨道之间的间距;
轨道间距 gap : 水平 垂直;
<!DOCTYPE html><html lang="en"><head><meta charset="UTF-8"><title>grid实现三行两列的布局</title><style type="text/css">.container{display: grid;/*设置三行*/grid-template-rows:2em 2em 2em;/*设置两列*/grid-template-columns:10em 10em;border:1px solid #000;}span{border: 1px solid #ccc;background-color: red;}</style></head><body><div class="container"><span>item1</span><span>item2</span><span>item3</span><span>item4</span><span>item5</span><span>item5</span></div></body></html>

设置轨道列宽的可以使用fr 响应式
auto默认是适应,fr可以实现对应的倍数等
比如3行2列时 中间一列是左右俩列的2倍宽,auto就无法实现,fr可以实现:grid-template-columns: 1fr 2fr 1fr;
<!DOCTYPE html><html lang="en"><head><meta charset="UTF-8"><title>grid实现三行两列的布局</title><style type="text/css">.container{display: grid;/*设置三行*/grid-template-rows:2em 2em 2em;/*设置两列*/grid-template-columns:1fr 2fr 1fr;border:1px solid #000;}span{border: 1px solid #ccc;background-color: red;}</style></head><body><div class="container"><span>item1</span><span>item2</span><span>item3</span><span>item4</span><span>item5</span><span>item6</span></div></body></html>

%无法计算列边距,会出现内容超出,如果使用%,则需要关闭gap间距;
%可以与fr共存,计算方式:总宽度-%的宽度,将剩下的分配给fr
总结:auto 、fr 、%都是相对单位,都可以触发自动计算,尽量不要同时出现。
px、em是固定值,计算时要减去固定值,将剩下的空间在fr之间分配;
grid-template-columns: 1em 2fr 3fr;
repeat()
重复:grid-template-columns: 1em 1em 1em;可以写成grid-template-columns: repeat(3,1em);
混合使用grid-template-columns: repeat(3,1fr) 2fr; 1fr 1fr 1fr 2fr;
minmax()最大最小值,grid-template-columns: 1fr minmax(5em,10fr) 1fr;
适用于局部响应式;超过了最大值页面不会收缩了,如果没有这个值这页面会无限收缩,不符合布局要求。
声明的网格单元数量与网格项目不匹配时,多余的网格单元称为隐式轨道
隐式轨道也是可以控制的;
控制排列方式:grid-auto-flow: row|columns;
行优先时使用grid-auto-rows设置行高
列优先时使用grid-auto-columns设置列宽
总结映射关系:行优先grid-auto-flow:row对应grid-auto-rows
列优先grid-auto-flow:columns对应grid-auto-columns
默认是按照书写顺序排列,可以自定义排序;
行号,列号:从左上角开始(1,1)递增;
属性grid-area: 行起始编号 / 列起始编号 /行结束编号 /列结束编号;
grid-area 参数不同意义不同
1、值中有span
单值:跨越的行数
双值:跨的行与列数,如果只想设置列数,就必须设置行数(auto);
2、值中有span和编号
双值:没有span 默认跨一行一列,
三值:省略了列结束编号或跨的数量,此时前面的值可以使用auto
<!DOCTYPE html><html lang="en"><head><meta charset="UTF-8"><title>grid实现三行两列的布局</title><style type="text/css">.container {display: grid;border: 1px solid #ccc;/* 轨道列宽 */grid-template-columns: repeat(3, 1fr);/*等同*//*grid-template-columns:1fr 1fr 1fr;*//* 行高 */grid-template-rows: 2em 2em;/* 间距表示水平垂直都是0.2em的间距*/gap: .2em;}.item {background-color: aquamarine;border: 1px solid #ccc;}.item:nth-of-type(5) {background-color: bisque;/*1/1表示是元素原来的位置而2/2表示是设置之后的位置*/grid-area: 1 / 1 / 2 / 2;/* 跨一行时可以简写 */grid-area: 1 / 1;}.item:first-of-type {background-color: brown;/*表示跨一行三列*/grid-area: span 1 /span 3;}</style></head><body><div class="container"><span>item1</span><span>item2</span><span>item3</span><span>item4</span><span>item5</span><span>item6</span></div></body></html>

<!DOCTYPE html><html lang="en"><head><meta charset="UTF-8"><title>grid实现圣杯布局</title><style type="text/css">body {display: grid;grid-template-columns: 15em minmax(50vh, auto) 15em;grid-template-rows: 3em minmax(80vh, auto) 3em;gap: 0.5em;}body *{border: 1px solid #ccc;}footer,header {/*跨一行三列*/grid-area: auto /span 3;grid-area: span 1 /span 3;}main {grid-area: 2 / 2;}</style></head><body><header>header</header><!-- 圣杯布局规定了主体优先 --><main>main</main><aside class="left">left</aside><aside class="right">right</aside><footer>footer</footer></body></html>

Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号