多栏自适应布局问题浅谈

作者:邦彦 来源:口碑网 时间:2010-08-16 12:56:00 

在网页局部的布局上,需要采用大量的自适应,来满足不同长度数据、内容的合理呈现。以此保证页面不至于因为内容过多等原因,导致重叠、溢出、撑开等破坏整体视觉效果的情况。这里就简单谈谈几个自己碰到过的自适应问题。

1、两栏自适应布局

在实际项目中,常常遇到如红色线框部分的两栏自适应问题。其关键点是,左右两栏均不定宽,右侧栏条目数量不定。

针对这种场景,可以采用两栏均浮动的方法。参考 Object-oriented CSS 中应用到的布局方案,则需要套用两层标签实现,两栏中一栏浮动,另一栏宽度自适应:

.wrap{background:gray;}.left{float:left;background:orange;}.right{ display:table-cell;_display:block;zoom:1;background:lime;}<div class="wrap">  <div class="left">左侧栏</div>  <div class="right">右侧栏</div></div>

点此查看该代码示例:two_column_layout.html
由于IE6并不支持 display:table-cell 属性,必须通过 CSS hack 来弥补这个缺陷。这里可以稍作改进,右侧栏直接设定 overflow:auto;zoom:1 或者 overflow:hidden;zoom:1 的样式。

2、三栏自适应布局

谈到三栏自适应布局,这应该是最为基本的网页排版形式了。以Amazon首页来说,其自适应布局采用的是与Object-oriented CSS相类似的方案:

.wrap{background:gray;}.left{float:left;width:250px;background:red;}.right{float:right;width:300px;background:orange;}.main{overflow:hidden;zoom:1;background:lime;}<div class="wrap">  <div class="left">左侧栏</div>  <div class="right">右侧栏</div>  <div class="main">主体部分</div></div>

点此查看该代码示例:three_column_layout.html
该案例中,左右侧栏分别浮动,主体部分(中间栏)溢出隐藏。这种布局的好处在于,无论外框宽度如何变化,主体部分总能自适应。但从页面结构上来说,节点物理顺序和视觉逻辑顺序不一致,最关键的主体部分内容被排在整个文档的后面,主次分布不合理,总觉得有一些遗憾。另外也会存在一些潜在的风险:如果右侧栏包含大量脚本资源,可能会影响甚至阻塞整个页面的载入(如果选择使用 iframe或者 ajax 来加载就另当别论)。

众所周知,HTML文档是顺序解析的。在这张使用 WebPageTest 对 Amazon 首页渲染过程的某一时刻截图中,可以发现左右两侧的内容率先予以呈现,而主体部分会造成一定时间的空白。因此这种方案并不宜用于整站页面框架的搭建。

考虑到页面结构的复杂程度和体积大小,大型站点的布局方案,个人倾向于采用诸如负边距之类自适应布局。实现原理可以参考《Creating Liquid Layouts with Negative Margins》这篇文章。利用负边距可以构建出很多复杂的流体布局形式。这里以 YUI 框架提供的栅格方案为例来说明:

.wrap{}.section{float:left;margin-right:-40em;width:100%;}.g1{margin-right:310px;float:none;width:auto;position:static;}.g2{float:right;margin-left:-40em;width:100%;}.main{margin-left:210px;float:none;width:auto;position:static;overflow:auto;background:red;}.left{float:left;width:200px;position:relative;background:orange;}.aside{float:right;width:300px;position:relative;background:lime;}<div class="wrap">  <div class="section">    <div class="g1">      <div class="g2">        <div class="main">主体部分</div>      </div>      <div class="left">左侧栏</div>    </div>  </div>  <div class="aside">右侧栏</div></div>

点此查看该代码示例:negative_margin_layout.html
虽然实现上要比其他方案更为复杂,需要嵌套多层标签,在一定程度上有失 HTML 文档的简洁性。但一个重要的好处是,其各个区块(左侧栏、主体部分、右侧栏)文档结构顺序可以随意调换,而在视觉呈现上却没有任何差异。目前口碑网的前端布局系统正是应用了这种解决方案,并有专用工具实现布局框架的自动化生成。

3、自适应栅格化布局

Object-oriented CSS 提出了一种结构化的多栏自适应布局,利用栅格控制容器宽度,内容控制容器高度。使得多层嵌套的自适应栅格化布局清晰明了。如果应用到类似表格的页面排版,这种方法行之有效。详细参考自适应栅格化布局代码示例:grid_layout.html
而目前大量的网站正在使用 950px/960px 宽度的栅格系统,固定最小栅格单元的宽度,保证整体结构的合理、稳定和一致。与其相比,在局部页面布局中,建议使用 Object-oriented CSS 这种简洁的、基于百分比的栅格方案。如果可以保证内部所有区块自适应,就只需要对最外层容器设定宽度,显得更为灵活。

标签:自适应,布局,网页布局
0
投稿

猜你喜欢

  • DW MX 2004新功能:加密FTP

    2009-09-13 18:42:00
  • JavaScript画圆

    2010-01-22 15:57:00
  • Asp Object 之:AddHeader

    2008-05-05 12:58:00
  • SQL学习笔记七函数 数字,日期,类型转换,空值处理,case

    2011-09-30 11:48:25
  • 几款黑体的测试和介绍

    2008-07-18 17:09:00
  • SQL Server数据库对上亿表的操作

    2008-11-16 18:13:00
  • 在select语句中使用top的一些小技巧

    2009-03-12 12:21:00
  • IE6,7下实现white-space:pre-wrap;

    2009-12-31 18:30:00
  • asp函数收藏

    2009-04-21 13:10:00
  • 巧用正则表达式获取新闻中图片地址

    2010-07-17 13:09:00
  • 一种弹出提示信息时页面背景色调改变的方法

    2008-12-01 12:22:00
  • ASP技巧:Script块不能放在另一个Script 块内

    2009-08-19 17:17:00
  • Sql语句优化注意

    2009-10-31 13:15:00
  • Mootools 1.2教程(21)——类(二)

    2008-12-28 20:58:00
  • 用JS实现一个页面两份样式表

    2008-07-23 12:37:00
  • 怎么样才能让ASP避免被SQL注入啊?

    2008-08-08 12:27:00
  • asp使用正则自动解析图片地址并保存

    2007-08-17 11:29:00
  • Yahoo!网站性能最佳体验的34条黄金守则—内容

    2008-05-13 12:14:00
  • chr()函数参照表 chr13 chr10 chr34

    2009-09-03 13:22:00
  • 混乱的标记语言XHTML2/HTML5

    2009-07-31 14:27:00
  • asp之家 网络编程 m.aspxhome.com