1) 计算列宽
首先,您必须将宽度应用于每一列。
如果列之间没有排水沟,那么数学很容易。每列的宽度应等于 100% 除以列数。例如。如果您有 5 列,则宽度应为 100%/5 = 20%。
如果你想要排水沟,你将不得不做一些更复杂的数学。问题是排水沟的数量比列的数量少一。所以你必须解方程:
K*X + (K-1)*Y = 100%
其中 K 是列数,X 是每列的宽度,Y 是每个装订线的宽度。
假设列数为 4,而 gutter 应为列的 1/4。现在我们有一个方程组:
/ K*X + (K-1)*Y = 100%
< K = 4
\ Y = 1/4 * X
现在我们替换 K 和 Y 并且有:
4X + (4-1) * 1/4 * X = 100%
这可以简化为:
4X + 3/4 * X = 100%
4.75X = 100%
X = 21.0526%
现在当我们知道 X 的值时,我们可以计算 Y:
/ X = 21.0526%
\ Y = 1/4 * X
Y = 21.0526% / 4
Y = 5.26315%
耶!现在我们可以把它放到 CSS 中:
.column {
width: 21.0526%;
margin-right: 5.26315%; }
.column:last-child {
margin-right: 0; }
2)水平对齐列
我们有列和排水沟的宽度,但它们仍然出现在垂直堆栈中。我们需要它们在水平行中。
有不同的方法可以让您使用 CSS 构建列。
a) 内联块
已经提到的一个是使用inline-block
显示样式。这会将您的列放在一行中。除非您提供列的宽度,否则列将缩小以匹配其内容的宽度。
列标签之间不要有空格是非常重要的。正确:</div><div class="column">
,错误:</div> <div class="column">
。
示例 HTML:
<div class=column>
Foo
</div><div class=column>
Foo
</div><div class=column>
Foo
</div><div class=column>
Foo
</div>
示例 CSS:
/* Spanning the columns */
.column {
display: inline-block;
width: 21.0526%;
margin-right: 5.26315%; }
/* Removing the margin from the last column */
.column:last-child {
margin-right: 0; }
演示:http: //jsbin.com/aqedum/2/edit
b) 浮点数
float 方法不需要从 HTML 中删除空格:
<div class=column>
Foo
</div>
<div class=column>
Foo
</div>
<div class=column>
Foo
</div>
<div class=column>
Foo
</div>
对于要在水平行中对齐的列,您可以应用float: left;
它们。
浏览器不太擅长将小数百分比值四舍五入为绝对值,因此每列的位置可能相差 1px。浮动方法允许您通过将最后一列向右浮动来使舍入误差不那么明显。
/* Spanning the columns */
.column {
float: left;
width: 21.0526%;
margin-right: 5.26315%; }
/* Removing the margin from the last column */
.column:last-child {
float: right;
margin-right: 0; }
演示:http: //jsbin.com/idekux/2/edit
使用 SASS 自动计算宽度
SASS是一种允许您使用变量和其他方便的编程材料来构建 CSS 的语言。还有一个Compass工具,它支持 SASS 的强大扩展社区,让您无需每次都重新发明轮子来解决各种任务。
有许多基于 SASS 的 SASS 网格系统可以自动构建网格。我最喜欢的网格系统是Singularity。
使用 Singularity,您只需提供列数和相对于列的装订线宽度即可获得结果!
$grids: 4;
$gutters: 0.25;
.column {
@include float-span(1);
&:last-child {
@include float-span(1, omega); }}
这将产生类似于前面示例的 CSS。
Singularity 还允许创建不对称网格和/或响应式网格,其中列数和列内元素的对齐方式根据不同的屏幕宽度而变化。
它还允许使用另一种称为 Isolation 的网格方法,进一步减少浏览器舍入错误。