在线时间:8:00-16:00
迪恩网络APP
随时随地掌握行业动态
扫描二维码
关注迪恩网络微信公众号
CSS网格布局是一个二维的基于网格的布局系统, 其目的在于完全改变我们设计基于网络的用户界面的方式。CSS一直用来布局我们的网页, 但是他从来没有做过很好的工作, 最开始我们使用表格,然后
网格容器 在元素中应用 <div class="container"> <div class="item item-1"></div> <div class="item item-2"></div> <div class="item item-3"></div> </div> 网格项目 网格容器的小孩(例如直接子元素),这里的 <div class="container"> <div class="item"></div> <div class="item"> <div class="sub-item"></div> </div> <div class="item"></div> </div> 网格线 构成网格结构的分界线, 他们既可以是垂直的(列)也可以是水平的(行)。这里的黄线是一个列网格线的例子
网格轨道 两个相邻网格线之间的空间。你可以把它们想象成网格的列或行。这是第二行和第三行网格线之间的网格轨道 网格单元格 两个相邻的行和两个相邻的列网格线之间的空间,也就是网格中的一个单元,这是行网格线1和2之间的网格单元, 以及列网格线2和3 网格空间 四个网格线包围的总空间,网格空间可以由任意数量的网格单元组成。这里是行网格线1和3之间的网格空间, 以及列网格线1和3 网格容器的属性 display 将元素定义为网格容器, 并未其内容建立新的网格格式上下文 值:
.container{ display: grid | inline-grid | subgrid } grid-template-columns, grid-template-rows 使用空格分隔的值列表来定义网格的列和行。这些值表示轨道大小,他们之间的空间表示网格线 值: : 可以是网格中的空闲空间的长度,百分比, 或分数 : 线的名称 例如, 在网格轨迹之间流出空白区域时, 网格线会自动分配数字名称 .container{ display: grid; grid-template-columns: 40px 50px auto 50px; grid-template-rows: 25% 100px auto; } 但是你可以选择明确命名行,请注意行名称的括号语法 .container{ grid-template-columns: [first] 40px [line2] 50px [line2] auto [line3] auto [col4-start] 50px [five] 5px; grid-template-rows: [row1-start] 25% [row1-end] 100px [thrid-line] auto [last-line]; } 请注意,一行/列可以有多个名字,例如这里第二列将有两个名字 .contaienr{ grid-template-rows: [row1-start] 25% [row1-end row2-start] 25% [row2-end] } 如果您的定义包含重复的部分,您可以使用repeat()符号来简化 .container{ grid-template-columns: repeat(3, 20px [col-start]) 5%; } 相当于这个 .container{ grid-template-columns: 20px [col-start] 20px [col-start] 20px [col-start] 5%; } 设置单位为 .container { grid-template-columns: 1fr 1fr 1fr; } 可用空间是在任何非弹性项目之后计算的,在这个例子中, .container{ grid-template-columns: 1fr 50px 1fr 1fr; } grid-template-areas 通过应用
.container{ grid-template-areas: "<grid-area-name> | . | none | ..."; } 例子 .container{ display: grid; grid-template-columns: repeat(4, 50px); grid-template-rows: auto; grid-template-areas: "header header header header" "main main . slidebar" "footer footer footer footer" } .item-a{ grid-area: header; } .item-b{ grid-area: main; } .item-c{ grid-area: slidebar; } .item-d{ grid-area: footer; } 注意: 你不是用这个语法命名行只是空间, 当你使用这种语法时, 空间两端的行实际上是自动命名的,如果你的网格空间名字是foo,那么这个空间的起始行和起始列的名字就是foo-start,最后一列和最后一行就是foo-end; grid-template 一个简短设置 .container { grid-template: none | subgrid | <grid-template-rows> <grid-area-name>/ <grid-template-columns>; } 由于 grid-column-gap grid-row-gap 指定网格线的大小 值: : 长度值 .container{ grid-column-gap: <line-size>; grid-row-gap: <line-size>; } .container{ display: grid; grid-template-columns: repeat(4, 50px); grid-template-rows: repeat(4, 80px); grid-column-gap: 10px; grid-row-gap: 15px; }
grid-gap 一种速记 : 长度值 .container { grid-gap: <grid-row-gap><grid-column-gap> } justify-items 沿着行轴对齐网格内的内容(而不是
.container{ justify-items: start | end | center | stretch } 例子 .container{ justify-items: start; }
.container{ justify-items: end; } .container{ justify-items: center; }
.container{ justify-items: stretch; } 此行为也可以通过 align-items 沿列轴对齐网格的内容(而不是
.container { align-items: start | end | center | stretch; } 例子 .container { align-items: start; } .container { align-items: end; } .container { align-items: center; } .container { align-items: stretch; }
此行为也可以通过 属性在个别网格项目上设置 justify-content 有时,网格的总大小可能小于其网格容器的大小, 如果您的所有网格项目都是用非灵活单位进行大小调整,就可能发生这种情况。这时候可以设置网格容器内的网格的对齐方式,此属性沿着行轴对齐网络 值:
.container{ justify-content: start; }
.container{ justify-content: end; }
.container{ justify-content: center; }
.container{ justify-content: stretch }
.container{ justify-content: space-around; }
.container{ justify-content: space-between; } .container{ justify-content: space-evenly; }
align-content 此属性和
.container{ align-content: start; } .container{ align-content: end }
.container{ align-content: center; }
.container{ align-content: stretch; } .container{ align-content: space-around; }
.container{ align-content: space-between; }
.container{ align-content: space-evenly; }
grid-auto-columns grid-auto-rows 指定任何自动生成的网格轨道的大小,当你明确声明超出定义的网格空间的行或列(通过grid-template-rows / grid-template-columns)时间,会创建隐式网格轨道 值: : 可以长度, 百分比, 或分数(使用 .contaienr{ display: grid; grid-template-columns: repeat(2, 60px); grid-template-rows: repeat(2, 90px); } 这样会创建一个2 X 2的网格 但现在如果你使用 .item-a { grid-column: 1 / 2; grid-row: 2 / 3; } .item-b { grid-column: 5 / 6; grid-row: 2 / 3; } 我们告诉 .container{ grid-auto-columns: 60px; } grid-auto-flow 如果您没有明确放置在网格上的网格项目,则自动分配算法会自动分配这些项目。该属性控制自动分配算法的原理 值:
<section class="container"> <div class="item-a">item-a</div> <div class="item-b">item-b</div> <div class="item-c">item-c</div> <div class="item-d">item-d</div> <div class="item-e">item-e</div> </section> 你定义了一个五行两列的网格,并设置 .container{ display: grid; grid-template-columns: repeat(5, 60px); grid-template-rows: repeat(2, 30px); grid-auto-flow: row; } 将项目分配在网格容器上,只能为其中的两个项目分配空间 .item-a { grid-column: 1; grid-row: 1 / 3; } .item-e { grid-column: 5; grid-row: 1 / 3; } 如果将
grid 简写为所有设置下列属性的单一声明: 网格项目的属性 grid-column-start, grid-column-end, grid-row-start,grid-row-end 通过引用特定的网格线来确定网格内项目的位置。 值:
.item-a { grid-column-start: 2; grid-column-end: five; grid-row-start: row1-start grid-row-end: 3 } .item-b { grid-column-start: 1; grid-column-end: span col4-start; grid-row-start: 2 grid-row-end: span 2 } 如果没有 grid-column, grid-row 简写为 .item-c { grid-column: 3 / span 2; grid-row: third-line / 4; }
grid-area 为项目提供一个名称,以便可以通过使用
.item { grid-area: <name> | <row-start> / <column-start> / <row-end> / <column-end>; } 例子: 作为项目分配名称的一种方法 .item-d{ grid-area: header; } 作为 .item-d { grid-area: 1 / col4-start / last-line / 6 }
justify-self 沿着行轴对齐网格的内容,此属性适用与单个网格项目的内容 值:
.item { justify-self: start | end | center | stretch; } 例子: .item-a { justify-self: start; }
.item-a { justify-self: end; } .item-a { justify-self: center; }
.item-a { justify-self: stretch; } align-self 沿列轴对齐网格内的内容,此值适用与单个网格项目内的内容 值 start: 将内容对齐到网格空间的顶部 end: 将内容对齐到网格空间的底部 center: 将网格空间中心的内容对齐 stretch: 填充网格空间的整个高度 .item { align-self: start | end | center | stretch; } 例子: .item-a { align-self: start; }
.item-a { align-self: end; }
.item-a { align-self: center; } .item-a { align-self: stretch; }
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持极客世界。 |
2023-10-27
2022-08-15
2022-08-17
2022-09-23
2022-08-13
请发表评论