[转载]网页栅格系统研究(4):技术实现

[出自]http://lifesinger.org/blog/2008/11/grid-system-4/

前三篇文章中,明确了栅格系统的设计细节和适用范围。这一篇将集中讨论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的特点简单总结如下:

  1. 采用浮动来实现布局,简单明了
  2. 950两侧没有margin, 最后一列的class需要加上last
  3. 采用额外标签来清除浮动

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>

上面就构建了三栏布局:

有意思的几点:

  1. margin是均匀放在950两侧的
  2. 所有grid除了宽度不同,左右边距都一致margin: 0 10px;
  3. 代码简单清晰,起始和结束列不需要添加额外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>

YUI的特点是:

  1. 依旧是采用浮动布局,槽(Gutter)宽通过margin-left来控制(Blueprint采用右边距,960.gs采用均分,这三个框架对槽的处理实在有意思)
  2. 总宽度采用em, 这样可以用在弹性布局上
  3. 栏的布局用的是百分比,采用了流体布局

YUI的好处是能用来做自适应布局,在这前面两个框架里是没有的。但普通的定宽布局,YUI则显得有点麻烦,比如我们要实现四栏布局,dom得这样写:

先来两个两栏布局,再细分为四栏布局,清晰度上欠佳。

更多栅格实现

栅格化更多是一种布局思想,实现技术可以千差万别。比如今年冒出来的伪绝对定位,立刻就可以用来实现栅格系统。明城兄弟就尝试了一把

肯定还有非常多的栅格化实现方案,这里就不一一挖掘了。

双飞翼栅格系统

挺奇怪这个名字?请先阅读这篇文章:渐进增强式布局探讨. 简单说,双飞翼布局是一种布局实现技术,可以利用它来实现一整套栅格系统。

先看test页面:Grids Layout Test.

具体技术细节在渐进增强式布局探讨一文中已经阐述,这里不再重复。有几点需要说明:

  1. 这套栅格系统并不能实现所有布局。这和YUI Grids类似,只能实现预定的一些布局。比如三栏布局,目前只加入了5 : 13 : 6, 5 : 12 : 7, 9 : 9 : 6, 8 : 8 : 8四种情况,这是从淘宝的现有页面中分析总结出来的。对于同一个站点来说,太多不同的三栏比例不是好事(淘宝目前都有点多,以后可能还会进一步统一)。因此如果采用这套栅格系统的话,需要先分析站点,定义出一套合适的比例。这里有个所有比例的自动生成工具:grids_css_generator.html.
  2. 关于命名:.grid-c2-s6表示两栏(c2: column 2)布局,sub栏的宽度是4列(s4: sub width is 4 * 40 -10). 而.grid-c2-s6f, 最后的f表示两栏布局的第二种情况,即submain互换。类似地,.grid-c3-s5e6d表示三栏布局,其中sub栏的宽度是5, extra栏的宽度是6, 最后的d表示是s5e6三栏布局中的第四种情况。
  3. 为了方便使用,将最常用的两栏布局.grid-c2-s5.grid-c2直接表示。同样的,.grid-c3表示.grid-c3-s5e6. 这是淘宝的默认值,其他站点可以根据实际情况修改。
  4. 这套布局符合渐进增强式工作流程。细心的你可能已经发现,所有两栏布局和三栏布局,HTML中的DOM结构是完全一样的,只有最外层divclass不同。如果要交换左右栏,只要非常简单的修改下class就可以。
  5. 实际使用时,两栏布局和三栏布局已经够用。其实有了两栏,其它布局就都可以组合出来。这里有一个尝试性页面:grids_test4_v0.1.html. 组合布局看起来很强大,但实际使用时会把问题搞复杂,不推荐使用,干脆忘掉吧。

最后来看下两个测试页面:两栏布局grid-c2_test.html三栏布局grid-c3_test.html.

目前除了发现在ie6下有个bug(超大图片等会撑乱布局,其实可以用overflow: hidden来解决,但考虑overflow负面影响,最后还是由布局内部的模块来自主控制的好),尚未发现其他问题。

小结

栅格系统更多的是一种布局思想,在实际使用时,根据具体需求选用合适的技术来实现即可。需要注意的是,对于栅格的技术实现来说,太灵活未必是件好事,适度灵活最难得。怎么才能适度呢?这需要疯狂实践 + 不断的反思 + 持续的重构 + 悟…

栅格搭好了页面框架,接下来很重要的一件事情就是往里面添加内容模块。让内容模块规范化,让页面制作工业化,对大型站点来说,这是栅格系统最有商业价值的地方。下一篇也是本系列最后一篇将展示栅格系统中的模块化应用。

2009-07-15 更新:栅格的模块化应用和栅格关系不大,主要是模块的设计和应用,因此不打算继续此系列,这篇是最后一篇。

时间: 2024-09-15 07:49:54

[转载]网页栅格系统研究(4):技术实现的相关文章

[转载]网页栅格系统研究(3):粒度问题

[出自]http://lifesinger.org/blog/2008/10/grid-system-3/ 研究(2)中讨论了栅格系统的基础知识.这一篇将集中探讨栅格系统的粒度问题.(注:如非特别指明,栅格系统均指24列960栅格系统) 淘宝的首页(截图)目前尚未严格遵守栅格系统,如果重构的话,宽度方向可以考虑采用下面的栅格布局(只考虑页面主体部分,忽略高度的比例):(图1) 纷乱的高度世界 我们来看下图1左上角.左上角部分目前的宽度为256px, 重构的话可以将宽度缩小到230px以符合栅格(

网页栅格系统研究(4):技术实现

前三篇文章中,明确了栅格系统的设计细节和适用范围.这一篇将集中讨论960栅格系统的技术实现. Blueprint的实现 Blueprint是一个完整的CSS框架,栅格系统是它的一部分功能.我们来看demo页面: 以上三栏布局的代码为: <style type="text/css"> .container { margin: 0 auto; width: 950px } .span-8 { float: left; margin-right: 10px } div.last

网页栅格系统研究:技术实现

前三篇文章中,明确了栅格系统的设计细节和适用范围.这一篇将集中讨论960栅格系统的技术实现. Blueprint的实现 Blueprint是一个完整的CSS框架,栅格系统是它的一部分功能.我们来看 demo 页面: 以上三栏布局的代码为: <style type="text/css">    .container { margin: 0 auto; width: 950px }    .span-8 { float: left; margin-right: 10px }  

[转]网页栅格系统研究(2):蛋糕的切法

[出自]http://lifesinger.org/blog/2008/10/grid-system-2/ 首先澄清一个应用场景问题.研究(1)中指出,对于结构复杂的网站,不少设计师们喜欢采用960固定宽度布局.但要注意的是,960并不是万能钥匙,大部分网站没有也不需要栅格系统.Amazon采用的是宽度自适应布局,最大限度的呈现信息.Google更是简简单单,主题部分就一个列表.eBay的页面非常简洁,商品页面宽度自适应,信息自然流畅,噪音少,购物很踏实.类似的站点还有很多,对于这些站点来说,宽

学习网页栅格系统的几篇好文

1.[蓝色理想]网页的栅格系统设计[1] http://www.blueidea.com/design/doc/2008/6171.asp 2.[蓝色理想]网页的栅格系统设计[2] http://www.blueidea.com/design/doc/2008/6171_2.asp 3.网页栅格系统研究(1):960的秘密 http://www.68design.net/Web-Guide/Web-Theory/37967-1.html 4.网页栅格系统研究(2):蛋糕的切法http://www

网页栅格系统中的最佳宽度:960px

网站 首页页面宽度 px Yahoo! 950 淘宝 950 MySpace 960 新浪 950 网易 960 Live Search 958 搜狐 950 优酷 960 AOL 960 上面列举的都是 Alexa全球排名前100的站点 ,它们的首页宽度为950px/960px. 除了微软的Live Search, 这些站点有个共同特点:页面结构较复杂,都可以认为是门户型网站. 再来看看Google, YouTube, Facebook, Flickr!, eBay等知名站点,它们的首页宽度没

网页 网站-工业上用的设备提供网页进行监控的技术如何实现?

问题描述 工业上用的设备提供网页进行监控的技术如何实现? 有的设备,厂家不提供可执行文件exe格式的上位机进行监控,提供给用户一个网址,用户连上网线,在浏览器输入网址就可以对设备进行监控.操作.请问设备里内置了什么样的程序,用什么手段开发,是部署了一个网站吗? 最简单的例子,家里设置路由器的时候,输入192.168.1.1就可以访问路由器,设置密码,控制连接个数等等.

[转载] 陈皓——程序员技术练级攻略

          PS:原文出自酷壳上的陈皓对程序员从入门到精通的攻略,让你感受一下真正的大神吧!又是阿里人,他的文章真心不错,希望对你也有用.原文地址:http://coolshell.cn/articles/4990.html           陈皓酷壳博客地址:    http://coolshell.cn/haoel                陈皓CSDN博客地址: http://blog.csdn.net/haoel 个人简介 15年软件开发相关工作经验,8年以上项目和团队管理

Dreamweaver网页制作之框架技术

框架技术 在浏览网页的时候,我们常常会遇到这样的一种导航结构.就是超级连接做在左边单击以后链接的目标出现在右面.或者在上边单击链接指向的目标页面出现在下面.要做出这样的效果,必须使用框架.为了更好的理解什么是框架.我们画一张示意图来进行讨论. 这是一个左右结构的框架.事实上这样的一个结构是由三个网页文件组成的.首先外部的框架是一个文件,图中我们用index.htm命名.框架中左边命名为A,指向的是一个网页A.htm.右边命名为B,指向的是一个网页B.htm. 下面我们就来从头开始制作一个框架.(