CSS display:table属性
当IE8发布时,它将支持很多新的CSS display属性值,包括与表格相关的属性值:CSS display:table、 CSS display:table-row和CSS display:table-cell,它也是最后一款支持这些属性值的主流浏览器。它标志着复杂CSS布局技术的结束,同时也给了HTML表格布局致命一击。最终,使用CSS布局来制作出类似于table布局的栅格将会变得十分迅速和简单。
网页元素应用上那些与表格相关的display属性值后,能够模仿出与表格相同的特性。我将会在该文中给大家演示这种方法给CSS布局带来的巨大影响。
使用CSS表格
CSS表格能够解决所有那些我们在使用绝对定位和浮动定位进行多列布局时所遇到的问题。例如,“CSS display:table;”的CSS声明能够让一个HTML元素和它的子节点像table元素一样。使用基于表格的CSS布局,使我们能够轻松定义一个单元格的边界、背景等样式,而不会产生因为使用了table那样的制表标签所导致的语义化问题。
在深入了解这种方法之前,让我们先来写份HTML文档实例:
- <!DOCTYPEhtmlPUBLIC"-//W3C//DTDXHTML1.0Strict//EN"
- "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
- <htmlxmlnshtmlxmlns=http://www.w3.org/1999/xhtml
- lang="en-US">
- <head>
- ?HTMLheadcontent…
- </head>
- <body>
- <dividdivid="wrapper">
- <dividdivid="header"></div>
- <dividdivid="main">
- <dividdivid="nav">
- ?navigationcolumncontent…
- </div>
- <dividdivid="extras">
- ?newsheadlinescolumncontent…
- </div>
- <dividdivid="content">
- ?mainarticlecontent…
- </div>
- </div>
- </div>
- </body>
- </html>
这份HTML源代码满足了内容呈现方面的要求。先是导航栏,然后是附加栏,最后是内容栏。我们同样需要将以下CSS样式应用上去:
- #main{
- display:table;
- border-collapse:collapse;
- }
- #nav{
- display:table-cell;
- width:180px;
- background-color:#e7dbcd;
- }
- #extras{
- display:table-cell;
- width:180px;
- padding-left:10px;
- border-right:1pxdotted#d7ad7b;
- }
- #content{
- display:table-cell;
- width:380px;
- padding-left:10px;
- }
这种基于表格的新CSS布局方式能够正确的在IE8、Firefox、Safari和Opera(译者注:包括FF2/FF3/Google都通过了测试)中显示出来。下面这张图片是它在IE8中的样子:
我们轻松实现了三栏等高布局,而无需使用伪造背景图片之类的技巧,更不用担心定位和清除浮动的问题!
需要注意的是,我们在进行布局表格的时候,需要两层div,一层是模拟table,一层是模拟tabel-cell