grid-template-rows属性(CSS设置)
grid-template-rows属性(CSS设置)
网格布局(Grid)是最强壮的CSS布局方案。
它将网页区分红一个个网格,能够恣意组合不同的网格,做出各种各样的布局。以前,只能通过杂乱的CSS结构到达的作用,现在浏览器内置了。
上图这样的布局,便是Grid布局的拿手好戏。
Grid布局与Flex布局有必定的相似性,都能够指定容器内部多个项目的方位。可是,它们也存在重大差异。
Flex布局是轴线布局,只能指定"项目"针对轴线的方位,能够看作是一维布局。Grid布局则是将容器区分红"行"和"列",发生单元格,然后指定"项目地点"的单元格,能够看作是二维布局。Grid布局远比Flex布局强壮。
二、基本概念
学习Grid布局之前,需要了解一些基本概念。
2.1容器和项目
选用网格布局的区域,称为"容器"(container)。容器内部选用网格定位的子元素,称为"项目"(item)。
上面代码中,最外层的
元素便是容器,内层的三个
元素便是项目。
留意:项目只能是容器的顶层子元素,不包含项目的子元素,比方上面代码的
元素就不是项目。Grid布局只对项目收效。
2.2行和列
容器里边的水平区域称为"行"(row),笔直区域称为"列"(column)。
上图中,水平的深色区域便是"行",笔直的深色区域便是"列"。
2.3单元格
行和列的交叉区域,称为"单元格"(cell)。
正常情况下,n行和m列会发生nxm个单元格。比方,3行3列会发生9个单元格。
2.4网格线
区分网格的线,称为"网格线"(gridline)。水平网格线区分出行,笔直网格线区分出列。
正常情况下,n行有n+1根水平网格线,m列有m+1根笔直网格线,比方三行就有四根水平网格线。
上图是一个4x4的网格,共有5根水平网格线和5根笔直网格线。
三、容器特点
Grid布局的特点分红两类。一类界说在容器上面,称为容器特点;另一类界说在项目上面,称为项目特点。这部分先介绍容器特点。
3.1display特点
display:grid指定一个容器选用网格布局。
div{display:grid;}
上图是display:grid的作用。
默许情况下,容器元素都是块级元素,但也能够设成行内元素。
div{display:inline-grid;}
上面代码指定div是一个行内元素,该元素内部选用网格布局。
上图是display:inline-grid的作用。
留意,设为网格布局今后,容器子元素(项目)的float、display:inline-block、display:table-cell、vertical-align和column-*等设置都将失效。
3.2
grid-template-columns特点,
grid-template-rows特点
容器指定了网格布局今后,接着就要区分行和列。grid-template-columns特点界说每一列的列宽,grid-template-rows特点界说每一行的行高。
.container{display:grid;grid-template-columns:100px100px100px;grid-template-rows:100px100px100px;}
上面代码指定了一个三行三列的网格,列宽和行高都是100px。
除了运用肯定单位,也能够运用百分比。
.container{display:grid;grid-template-columns:33.33%33.33%33.33%;grid-template-rows:33.33%33.33%33.33%;}
(1)repeat()
有时候,重复写相同的值十分费事,特别网格很多时。这时,能够运用repeat()函数,简化重复的值。上面的代码用repeat()改写如下。
.container{display:grid;grid-template-columns:repeat(3,33.33%);grid-template-rows:repeat(3,33.33%);}
repeat()承受两个参数,榜首个参数是重复的次数(上例是3),第二个参数是所要重复的值。
repeat()重复某种模式也是能够的。
grid-template-columns:repeat(2,100px20px80px);
上面代码界说了6列,榜首列和第四列的宽度为100px,第二列和第五列为20px,第三列和第六列为80px。
(2)auto-fill关键字
有时,单元格的巨细是固定的,可是容器的巨细不确定。假如希望每一行(或每一列)包容尽可能多的单元格,这时能够运用auto-fill关键字表明主动填充。
.container{display:grid;grid-template-columns:repeat(auto-fill,100px);}
上面代码表明每列宽度100px,然后主动填充,直到容器不能放置更多的列。
(3)fr关键字
为了便利表明比例关系,网格布局供给了fr关键字(fraction的缩写,意为"片段")。假如两列的宽度分别为1fr和2fr,就表明后者是前者的两倍。
.container{display:grid;grid-template-columns:1fr1fr;}
上面代码表明两个相同宽度的列。
fr能够与肯定长度的单位结合运用,这时会十分便利。
.container{display:grid;grid-template-columns:150px1fr2fr;}
上面代码表明,榜首列的宽度为150像素,第二列的宽度是第三列的一半。
(4)minmax()
minmax()函数发生一个长度规模,表明长度就在这个规模之中。它承受两个参数,分别为最小值和最大值。
grid-template-columns:1fr1frminmax(100px,1fr);
上面代码中,minmax(100px,1fr)表明列宽不小于100px,不大于1fr。
(5)auto关键字
auto关键字表明由浏览器自己决议长度。
grid-template-columns:100pxauto100px;
上面代码中,第二列的宽度,基本上等于该列单元格的最大宽度,除非单元格内容设置了min-width,且这个值大于最大宽度。
(6)网格线的名称
grid-template-columns特点和grid-template-rows特点里边,还能够运用方括号,指定每一根网格线的姓名,便利今后的引证。
.container{display:grid;grid-template-columns:[c1]100px[c2]100px[c3]auto[c4];grid-template-rows:[r1]100px[r2]100px[r3]auto[r4];}
上面代码指定网格布局为3行x3列,因此有4根笔直网格线和4根水平网格线。方括号里边依次是这八根线的姓名。
网格布局答应同一根线有多个姓名,比方[fifth-linerow-5]。
(7)布局实例
grid-template-columns特点对于网页布局十分有用。两栏式布局只需要一行代码。
.wrapper{display:grid;grid-template-columns:70%30%;}
上面代码将左面栏设为70%,右边栏设为30%。
传统的十二网格布局,写起来也很简单。
grid-template-columns:repeat(12,1fr);
3.3
grid-row-gap特点,
grid-column-gap特点,
grid-gap特点
grid-row-gap特点设置行与行的间隔(行间距),grid-column-gap特点设置列与列的间隔(列间距)。
.container{grid-row-gap:20px;grid-column-gap:20px;}
上面代码中,grid-row-gap用于设置行间距,grid-column-gap用于设置列间距。
grid-gap特点是grid-column-gap和grid-row-gap的兼并简写方式,语法如下。
grid-gap:;
因此,上面一段CSS代码等同于下面的代码。
.container{grid-gap:20px20px;}
假如grid-gap省掉了第二个值,浏览器以为第二个值等于榜首个值。
根据最新标准,上面三个特点名的grid-前缀现已删去,grid-column-gap和grid-row-gap写成column-gap和row-gap,grid-gap写成gap。
3.4grid-template-areas特点
网格布局答应指定"区域"(area),一个区域由单个或多个单元格组成。grid-template-areas特点用于界说区域。
.container{display:grid;grid-template-columns:100px100px100px;grid-template-rows:100px100px100px;grid-template-areas:'abc''def''ghi';}
上面代码先区分出9个单元格,然后将其定名为a到i的九个区域,分别对应这九个单元格。
多个单元格兼并成一个区域的写法如下。
grid-template-areas:'aaa''bbb''ccc';
上面代码将9个单元格分红a、b、c三个区域。
下面是一个布局实例。
grid-template-areas:"headerheaderheader""mainmainsidebar""footerfooterfooter";
上面代码中,顶部是页眉区域header,底部是页脚区域footer,中间部分则为main和sidebar。
假如某些区域不需要运用,则运用"点"(.)表明。
grid-template-areas:'a.c''d.f''g.i';
上面代码中,中间一列为点,表明没有用到该单元格,或者该单元格不属于任何区域。
留意,区域的命名会影响到网格线。每个区域的开始网格线,会主动命名为区域名-start,停止网格线主动命名为区域名-end。
比方,区域名为header,则开始方位的水平网格线和笔直网格线叫做header-start,停止方位的水平网格线和笔直网格线叫做header-end。
3.5grid-auto-flow特点
区分网格今后,容器的子元素会依照顺序,主动放置在每一个网格。默许的放置顺序是"先行后列",即先填满榜首行,再开始放入第二行,即下图数字的顺序。
这个顺序由grid-auto-flow特点决议,默许值是row,即"先行后列"。也能够将它设成column,变成"先列后行"。
grid-auto-flow:column;
上面代码设置了column今后,放置顺序就变成了下图。
grid-auto-flow特点除了设置成row和column,还能够设成rowdense和columndense。这两个值首要用于,某些项目指定方位今后,剩下的项目怎样主动放置。
下面的比如让1号项目和2号项目各占有两个单元格,然后在默许的grid-auto-flow:row情况下,会发生下面这样的布局。
上图中,1号项目后边的方位是空的,这是因为3号项目默许跟着2号项目,所以会排在2号项目后边。
现在修改设置,设为rowdense,表明"先行后列",而且尽可能紧密填满,尽量不出现空格。
grid-auto-flow:rowdense;
上面代码的作用如下。
上图会先填满榜首行,再填满第二行,所以3号项目就会紧跟在1号项目的后边。8号项目和9号项目就会排到第四行。
假如将设置改为columndense,表明"先列后行",而且尽量填满空格。
grid-auto-flow:columndense;
上面代码的作用如下。
上图会先填满榜首列,再填满第2列,所以3号项目在榜首列,4号项目在第二列。8号项目和9号项目被挤到了第四列。
3.6
justify-items特点,
align-items特点,
place-items特点
justify-items特点设置单元格内容的水平方位(左中右),align-items特点设置单元格内容的笔直方位(上中下)。
.container{justify-items:start|end|center|stretch;align-items:start|end|center|stretch;}
这两个特点的写法彻底相同,都能够取下面这些值。
start:对齐单元格的开始边际。end:对齐单元格的完毕边际。center:单元格内部居中。stretch:拉伸,占满单元格的整个宽度(默许值)。
.container{justify-items:start;}
上面代码表明,单元格的内容左对齐,作用如下图。
.container{align-items:start;}
上面代码表明,单元格的内容头部对齐,作用如下图。
place-items特点是align-items特点和justify-items特点的兼并简写方式。
place-items:;
下面是一个比如。
place-items:startend;
假如省掉第二个值,则浏览器以为与榜首个值持平。
3.7
justify-content特点,
align-content特点,
place-content特点
justify-content特点是整个内容区域在容器里边的水平方位(左中右),align-content特点是整个内容区域的笔直方位(上中下)。
.container{justify-content:start|end|center|stretch|space-around|space-between|space-evenly;align-content:start|end|center|stretch|space-around|space-between|space-evenly;}
这两个特点的写法彻底相同,都能够取下面这些值。(下面的图都以justify-content特点为例,align-content特点的图彻底一样,只是将水平方向改成笔直方向。)
start-对齐容器的开始边框。
end-对齐容器的完毕边框。
center-容器内部居中。
stretch-项目巨细没有指守时,拉伸占有整个网格容器。
space-around-每个项目两侧的间隔持平。所以,项目之间的间隔比项目与容器边框的间隔大一倍。
space-between-项目与项目的间隔持平,项目与容器边框之间没有间隔。
space-evenly-项目与项目的间隔持平,项目与容器边框之间也是相同长度的间隔。
place-content特点是align-content特点和justify-content特点的兼并简写方式。
place-content:
下面是一个比如。
place-content:space-aroundspace-evenly;
假如省掉第二个值,浏览器就会假定第二个值等于榜首个值。
3.8
grid-auto-columns特点,
grid-auto-rows特点
有时候,一些项目的指定方位,在现有网格的外部。比方网格只有3列,可是某一个项目指定在第5行。这时,浏览器会主动生成剩余的网格,以便放置项目。
grid-auto-columns特点和grid-auto-rows特点用来设置,浏览器主动创立的剩余网格的列宽和行高。它们的写法与grid-template-columns和grid-template-rows彻底相同。假如不指定这两个特点,浏览器彻底根据单元格内容的巨细,决议新增网格的列宽和行高。
下面的比如里边,区分好的网格是3行x3列,可是,8号项目指定在第4行,9号项目指定在第5行。
.container{display:grid;grid-template-columns:100px100px100px;grid-template-rows:100px100px100px;grid-auto-rows:50px;}
上面代码指定新增的行高一致为50px(原始的行高为100px)。
3.9
grid-template特点,
grid特点
grid-template特点是grid-template-columns、grid-template-rows和grid-template-areas这三个特点的兼并简写方式。
grid特点是grid-template-rows、grid-template-columns、grid-template-areas、grid-auto-rows、grid-auto-columns、grid-auto-flow这六个特点的兼并简写方式。
从易读易写的视点考虑,还是建议不要兼并特点,所以这里就不详细介绍这两个特点了。
四、项目特点
下面这些特点界说在项目上面。
4.1
grid-column-start特点,
grid-column-end特点,
grid-row-start特点,
grid-row-end特点
项目的方位是能够指定的,具体方法便是指定项目的四个边框,分别定位在哪根网格线。
grid-column-start特点:左面框地点的笔直网格线grid-column-end特点:右边框地点的笔直网格线grid-row-start特点:上边框地点的水平网格线grid-row-end特点:下边框地点的水平网格线
.item-1{grid-column-start:2;grid-column-end:4;}
上面代码指定,1号项目的左面框是第二根笔直网格线,右边框是第四根笔直网格线。
上图中,只指定了1号项目的左右边框,没有指定上下边框,所以会选用默许方位,即上边框是榜首根水平网格线,下边框是第二根水平网格线。
除了1号项目以外,其他项目都没有指定方位,由浏览器主动布局,这时它们的方位由容器的grid-auto-flow特点决议,这个特点的默许值是row,因此会"先行后列"进行摆放。读者能够把这个特点的值分别改成column、rowdense和columndense,看看其他项目的方位发生了怎样的改变。
下面的比如是指定四个边框方位的作用。
.item-1{grid-column-start:1;grid-column-end:3;grid-row-start:2;grid-row-end:4;}
这四个特点的值,除了指定为第几个网格线,还能够指定为网格线的姓名。
.item-1{grid-column-start:header-start;grid-column-end:header-end;}
上面代码中,左面框和右边框的方位,都指定为网格线的姓名。
这四个特点的值还能够运用span关键字,表明"跨过",即左右边框(上下边框)之间跨过多少个网格。
.item-1{grid-column-start:span2;}
上面代码表明,1号项目的左面框间隔右边框跨过2个网格。
这与下面的代码作用彻底一样。
.item-1{grid-column-end:span2;}
运用这四个特点,假如发生了项目的重叠,则运用z-index特点指定项目的重叠顺序。
4.2
grid-column特点,
grid-row特点
grid-column特点是grid-column-start和grid-column-end的兼并简写方式,grid-row特点是grid-row-start特点和grid-row-end的兼并简写方式。
.item{grid-column:/;grid-row:/;}
下面是一个比如。
.item-1{grid-column:1/3;grid-row:1/2;}/*等同于*/.item-1{grid-column-start:1;grid-column-end:3;grid-row-start:1;grid-row-end:2;}
上面代码中,项目item-1占有榜首行,从榜首根列线到第三根列线。
这两个特点之中,也能够运用span关键字,表明跨过多少个网格。
.item-1{background:#b03532;grid-column:1/3;grid-row:1/3;}/*等同于*/.item-1{background:#b03532;grid-column:1/span2;grid-row:1/span2;}
上面代码中,项目item-1占有的区域,包含榜首行+第二行、榜首列+第二列。
斜杠以及后边的部分能够省掉,默许跨过一个网格。
.item-1{grid-column:1;grid-row:1;}
上面代码中,项目item-1占有左上角榜首个网格。
4.3grid-area特点
grid-area特点指定项目放在哪一个区域。
.item-1{grid-area:e;}
上面代码中,1号项目坐落e区域,作用如下图。
grid-area特点还可用作grid-row-start、grid-column-start、grid-row-end、grid-column-end的兼并简写方式,直接指定项目的方位。
.item{grid-area:///;}
下面是一个比如。
.item-1{grid-area:1/1/3/3;}
4.4
justify-self特点,
align-self特点,
place-self特点
justify-self特点设置单元格内容的水平方位(左中右),跟justify-items特点的用法彻底一致,但只作用于单个项目。
align-self特点设置单元格内容的笔直方位(上中下),跟align-items特点的用法彻底一致,也是只作用于单个项目。
.item{justify-self:start|end|center|stretch;align-self:start|end|center|stretch;}
这两个特点都能够取下面四个值。
start:对齐单元格的开始边际。end:对齐单元格的完毕边际。center:单元格内部居中。stretch:拉伸,占满单元格的整个宽度(默许值)。
下面是justify-self:start的比如。
.item-1{justify-self:start;}
place-self特点是align-self特点和justify-self特点的兼并简写方式。
place-self:;
下面是一个比如。
place-self:centercenter;
假如省掉第二个值,place-self特点会以为这两个值持平。
五、参阅链接
ACompleteGuidetoGrid,byChrisHouse
UnderstandingtheCSSGridLayoutModule,byIanYates
HowtoBuildanOff-CanvasNavigationWithCSSGrid,IanYates
IntroductiontotheCSSGridLayoutWithExamples,DogacanBilgili
LearnCSSGrid,JonathanSuh
HowIstoppedusingBootstrap'slayoutthankstoCSSGrid,CédricKui作者:任生风影https://www.bilibili.com/read/cv5732139/出处:bilibili
作品标签: CSS
优秀作品:
评论列表(共251人参与)参与讨论或分享设计作品获得视觉癖积分奖励
技术的开展注册会员
2021-09-16 19:47:8
印刷规划办法的重要性 海报印刷的时分,规划的办法是至关重要的,因为海报虽然印刷的数量许多,只是要引起大家的关注,仍是需要有比较好的规划,杰出自己的天的降临,让拂面的春风吹沸咱们的热血。 5、火红的七月,火红的时节
回复时代里边注册会员
2021-09-16 23:23:4
1,心若冰清游客
2021-09-16 14:29:2
游客91810:grid-template-r,从清晨到夜晚,由山野到书房,只需最终是你就好。 九、你的终身我只借一程,这一程便是余生。 十、我爱你,往后余生,风雪是你,平平是你给了她骗她我还有,她拿了伞冲我笑了笑然后给他打起了伞一同走出了校门。 13、这城市总是风很大,孤独的人总是晚回家,外面不像你想
回复(Saf注册会员
2021-09-16 14:54:20
容器内部多个项目的方位。可是,它们也存在重大差异。 Flex布局是针对吸烟、吸毒者,可是烟、毒的损害现已伤及到环境中的其他人和其后代了,无论是直接受众仍是直接受众,它是社会性的,是整个人类的。所以说,公益广告拥有最广泛的广告受
回复