网页栅格系统研究:技术实现
前三篇文章中,明确了栅格系统的设计细节和适用范围。这一篇将集中讨论960栅格系统的技术实现。
Blueprint的实现
Blueprint是一个完整的CSS框架,栅格系统是它的一部分功能。我们来看 demo 页面:
以上三栏布局的代码为:
<style type="text/css">
.container { margin: 0 auto; width: 950px }
.span-8 { float: left; margin-right: 10px }
div.last { margin-right: 0 }
hr { clear: both; height: 0; border: none }
</style>
<div class="container">
<div class="span-8"></div>
<div class="span-8"></div>
<div class="span-8 last"></div>
<hr />
</div>
上面是基本功能,Blueprint还支持append-n, prepend-m, border等“高级”功能,这些就不细说了。Blueprint的特点简单总结如下:
- 采用浮动来实现布局,简单明了
- 950两侧没有margin, 最后一列的class需要加上last
- 采用额外标签来清除浮动
960.gs的实现
谈到960栅格系统,不得不提 960.gs . Nathan Smith在 这篇文章 中,详细阐述了他的想法和设计思路。这里有个 demo页面 ,核心代码很简单:
<style type="text/css">
.container_12 { margin: 0 auto; width: 960px }
.grid_4 { float: left; margin: 0 10px }
</style>
<div class="container_12">
<div class="grid_4"></div>
<div class="grid_4"></div>
<div class="grid_4"></div>
<div class="clear"></div>
</div>
上面就构建了三栏布局:
有意思的几点:
- margin是均匀放在950两侧的
- 所有grid除了宽度不同,左右边距都一致margin: 0 10px;
- 代码简单清晰,起始和结束列不需要添加额外class
很明显,Blueprint和960.gs都是采用浮动来实现布局的,主容器需要添加额外标签来清除浮动(可以参考这里)。当然,这也不是什么大问题,请看 这篇文章的总结 ,不添加额外标签也可以清除浮动。
YUI的实现
接着来看大名鼎鼎的YUI Grids CSS. YUI的CSS框架由三个文件组成:
reset.css - 样式重置
fonts.css - 版式字体控制
grids.css - 栅格系统
我们从 demo 开始:
注意,demo链接中的宽度是750的,但我们只要将<div id="doc"></div>中的id改为doc2, 页面宽度就自动变为950宽了(YUI非常强大^o^)。来看下dom结构:
采用的也是浮动布局,简化后的CSS代码为:
<style type="text/css">
.doc2 { margin: auto; width: 73.076em }
.yui-u { float: left; margin-left: 1.99%; width: 32% }
div.first { margin-left: 0 }
#ft { clear: both }
</style>