批改状态:合格
老师批语:
grid布局就是网格布局,首先来了解几个基本内容
display:grid;grid-template-columnsgrid-template-columns:10em 10em 10em设置了三列,每列宽为10emgrid-template-rowsgrid-template-rows:5em 5emgap:水平 垂直gap:0.5em 1em设置了每行间距0.5em 每列间距 1emgrid-template-columns:1fr 2fr 1fr划分三列,中间的那列是两边的二倍。
<style>/* 网格容器 */.container{border:1px solid #000;padding: 0.5em;display: grid;/*中间一列的宽度是两边的3倍 */grid-template-columns: 1fr 3fr 1fr;/* 使用百分比的话,会超div的宽度,因为百分比没有办法将轨道间距计算在内 */grid-template-columns: 20% 60% 20%;/*将5em的宽度减去,剩下的交由fr分配,第三列是第二列的两倍*/grid-template-columns: 5em 1fr 2fr;/* 设置轨道的行高 */grid-template-rows: 5em 5em;/* 设置轨道的间隙 */gap: 0.5em 1em;}</style><body><div class="container"><span class="item">item1</span><span class="item">item2</span><span class="item">item3</span><span class="item">item4</span><span class="item">item5</span><span class="item">item6</span></div></body>
grid-template-columns:10em 10em 10em可以写为grid-template-columns:repeat(3,10em)repeat(2,10em 2em) = 10em 2em 10em 2emrepeate(2,1fr) 2fr=1fr 1fr 2frgrid-template-columns: 1fr minmax(20em,2fr) 1fr;grid-auto-rows:5em表示在水平排列时增加的项目行高是5em。grid-auto-columns:2fr网格容器的内部都是有编号的,从左上角开始(1,1)并递增
grid-area:设置任何一个项目所在的网格单元的区域
grid-area:行起使编号 /列起始编号 /行结束编号 /列结束编号
如图所示:先不考虑负数。1,2,3分别表示轨道之间的间隙通道,跨的也是这些通道
比如:项目5的起始位置就是 2/2结束位置是3/3
现在将项目5放到项目1的位置,就是
1/1/2/2
项目默认跨越一行一列,结束位置可不写grid-area:1/1;
但是要跨越1行以上或一列以上就要写上
例如:跨越2行3列grid-area:1/1/3/4;
通常只关心跨几行或几列,并不关心结束的编号可以使用span来表示跨的数量grid-area: 1 / 1 /span 2 /span 3;
如果当前位置不变,则起始位置编号可以不写grid-area:span 1/span 3;
起始位置不变,只是跨的行数,不跨列grid-area:span3;
起始位置不变,只是跨的列数,前面用auto表示grid-area:auto /span 3;
总结:
grid-area:参数数量不同,意义不同
1.值中只有span
单值:跨的行数
双值:跨的行与列数,如果只想设置列数,就必须设置行数(auto)
2.值中有span和编号
双值:没有span 默认跨1行1列 grid-area:2 / 3;
三值:省了列的结束编号或跨的数量,此时前面的值可使用auto
四值:最完整的语法。
<style>.container{border: 1px solid #000;padding: .5em;display: grid;grid-template-columns: repeat(3,1fr);grid-template-rows: 5em 5em;/* 自动生成的隐式轨道的高度是自动的 */grid-auto-rows: 5em;gap:0.5em/* 列优先 *//* grid-auto-flow: column; *//* grid-auto-columns: 1fr; */}.container>.item{background-color: lightcyan;border: 1px solid #000;padding: 0.5em;}/* 以第5个项目来举例 */.container>.item:nth-of-type(5){background-color: lightyellow;/* 将它放入到第一个网格单元中 *//* 默认项目是跨越一行一列 所以结束位置不用写*/grid-area: 1/1;/* 但是如果要跨越1行以上或1列以上,就不能省 *//* 例如要跨2行3列 */grid-area: 1/1/3/4;/* 通常只关心跨几行或几列,并不关心结束的编号可以使用span来表示跨的数量*/grid-area: 1 / 1 /span 2 /span 3;}.container>.item:nth-of-type(1){background-color: limegreen;/* 跨1行 3列 *//* grid-area:3/1/ span 1 /span 3 *//* 因为 3/1是还是起始位置,所以可以省略 */grid-area:span 1 /span 3;/* 跨的行数 *//* grid-area:span 3; *//* 跨的列数 *//* grid-area:auto /span 3; */}</style><body><div class="container"><span class="item">item1</span><span class="item">item2</span><span class="item">item3</span><span class="item">item4</span><span class="item">item5</span><span class="item">item6</span><span class="item">item7</span><span class="item">item8</span><span class="item">item9</span></div></body>
Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号