一、概念
1.网格由水平和垂直线集合创建的一个模式,根据这个模式排列设计元素。帮助我们创建设计——在页面之间移动时元素不会跳动或更改宽度,从而在我们的网站上提供高一致性。
2.网格通常具有列(column),行(row),以及在每行和列之间的间隙——通常称为沟槽(gutter).
二、创建简单的网格框架
1.概述:
大多数网格类型布局使用浮动创建的 - 创建多列布局等。
要创建的最简单的网格框架类型是固定宽度的:
我们只需要计算出想要设计的总宽度,想要多少列,以及沟槽和列的宽度。
如果我们决定在具有列根据浏览器宽度增长和缩小的网格上布置设计,我们需要计算出列和沟槽之间的百分比宽度。
2.一个简单的定宽网格
创建一个使用固定宽度的网格系统
1 | <div class="wrapper"> |
1 | * { |
列之间的沟槽为20像素宽,每列的左侧创建一个20px的外边距(margin)作为沟槽——包括第一列,以平衡容器右侧的填充的20像素; 沟槽宽度:12 20 ,总宽度960,剩余每列宽度=(960-1220)/12 = 60;
1 | .row{ |
想要跨越多个列的布局容器需要被赋予特殊的类,来将它们的width 值调整到所需的列数(加上之间的沟槽)。我们需要创建一个额外的类,以允许容器跨越2到12列。每个宽度是将该列数的列宽加上沟槽宽度得到的结果,总是比列数少1:
1 | /* Two column widths (120px) plus one gutter width (20px) */ |
3.创建流体网格
流体网格会随着浏览器视口的可用空间而相应变化,为了实现可以使用参考像素宽度并将其转化为百分比。
将固定宽度变为基于百分比的灵活(flexible)宽度的公式:
target / context = result
eg:对于列宽,上下文是一个960px的容器,目标宽度是60px;
60/960 = 0.0625 = 6.25%可以替换像素列宽度为60px的值。
更新网格
1 | body { |
使用calc()函数更容易的计算,上述css等价于:
1 | .col.span2 { width: calc((6.25%*2) + 2.08333333%); } |
4.语义和‘非语义’网格系统
1 | <div class="col span6">14</div> |
1 | .col.span6 { width: 460px; } |
等价于:
1 | <div class="contecnt">14</div> |
1 | .content{ |
5.在网格中启用偏移容器
eg:将容器元素偏移一列宽度
1 | 将 |
1 | .offset-by-one { |
浮动网格限制
当使用浮动网格时,需要注意:
总宽度要加起来正确,并且不能在一行中包含跨(越)度为多列的超过该行所能包含的元素。由于浮动工作方式,如果网格列的数量相对于网格变得太宽,则末端上的元素将下降到下一行,从而打破网格。
元素的内容比它们占据的行更宽,它会溢出,会看起来像一团糟。
这个系统的最大限制是它基本上是一维的。我们处理的是列元素只能跨越多个列,而不能跨越行。这些旧的布局方法非常难以控制元素的高度,而没有明确设置高度,这是一个非常不灵活的方法 - 它只有当你能保证你的内容将是一定的高度才有效。
三、Flexbox网格?
1 | body { |
1.Flexbox是一维设计。它处理单个维度,即行或列。不能为列和行创建严格的网格,这意味着如果我们要为网格使用flexbox,我们仍然需要为浮动布局计算百分比.
四、第三方网格系统
流行框架:Bootstrap和Foundation
五、本地CSS网格和网格布局
1.构建本地网络
1 | <div class="wrapper"> |
1 | .wrapper { |
1 | 跨6列 |
CSS网格是二维的,因此随着布局的增长和缩小,元素保持水平和垂直排列。
1 | 将 |
2.CSS网格特性
1 | 将: |
1 | 将 |
不需要使用边距伪造沟槽或显式计算它们的宽度 — CSS网格具有这种功能内置的grid-gap属性;
六、例子
1 | <form> |
1 | html { |
1 | html { |