css table布局:基于display:table的css布局 -凯发k8官方网
两种类型的表格布局
你有两种方式使用表格布局 -html table(
标签)和css table(display:table 等相关属性)。html table是指使用原生的
在w3c关于
显而易见html table使用标签
等标签,就是使用css table的相关属性来实现的。从上面html4的默认样式表中可以看出他们的使用对于css属性的情况: 
 一个关键的区别作为从《css禅意花园》中学习css的个人,我讨厌html table布局。我不知不觉的产生了“虚幻的相关偏见”,高估html table和css table之间的区别。 如果它看起来、工作起来、听起来像一个表格,那么它必须是一个表格? 错误! 事实上,html table和css table之间的真正区别是:适当地调整css属性,css的table能做到许多html table 不能做的事情,可以从table中择优选择属性使用。 使用css表格css表格能够解决所有那些我们在使用绝对定位和浮动定位进行多列布局时所遇到的问题。例如,“display:table;”的css声明能够让一个html元素和它的子节点像table元素一样。 使用基于表格的css布局,使我们能够轻松定义一个单元格的边界、背景等样式,而不会产生因为使用了table那样的制表标签所导致的语义化问题。 在深入了解这种方法之前,让我们先来写份html文档实例: "wrapper"> "main"> 
"nav">navigation column content… "extras">news headlines column content… "content">main article content… 这份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: 1px dotted #d7ad7b; } #content {display: table-cell;width: 380px;padding-left: 10px; }这种基于表格的新css布局方式能够正确的在ie8、firefox、safari和opera(译者注:包括ff2/ff3/google都通过了测试)中显示出来。我们轻松实现了三栏等高布局,而无需使用伪造背景图片之类的技巧,更不用担心定位和清除浮动的问题! 它是怎样实现的?你可以给html元素指定与表格相关的display属性值,使得它们像表格元素那样渲染。以下是这些可用的display属性值: table难道用table布局不是错的吗?  可能你会对我们上面给出的布局实例有点不爽——毕竟,正如我自己也是一名web标准化的拥护者,我们不都一直坚持不应该使用table来进行布局吗? 匿名表格元素css表格除了包含table布局的普通规则之外,同时还有着css table布局的超强特性:缺少的表格元素会被浏览器以匿名方式创建。css2.1规范中写道: css2.1表格模型中的元素,可能不会全部包含在除html之外的文档语言中。这时,那些“丢失”的元素会被模拟出来,从而使得表格模型能够正常工作。所有的表格元素将会自动在自身周围生成所需的匿名table对象,使其符合table/inline-table、table-row、table-cell的三层嵌套关系。 这段话的意思是,如果我们为元素使用“display:table-cell;”属性,而不将其父容器设置为“display:table-row;”属性,浏览器会默认创建出一个表格行,就好像文档中真的存在一个被声明的表格行一样。 创建匿名表格元素的规则  这些匿名的盒对象不是用魔术变出来的,它们也不会自动往你的html源码中添加新的标签。为了完全发挥出匿名表格元素的优势,你最好能够对创建它们的规则有所了解。如果布局中调用了匿名元素,浏览器将会根据需要创建一个匿名的盒对象并将它的css display属性设置为table、table-row或table-cell中的一个。 class=”cell”>cell a 
class=”cell”>cell b 
class=”cell”>cell c 
not a cell   上面的三个类名为“cell”的div元素均被设置为“display:table-cell;”,它们将会像一个单行表格的三个单元格一样并列排布。最后一个div元素则不会被包含在这一表格行当中,因为它没有被设置成“display:table-cell;”。 class=”row”>row a 
class=”row”>row b 
not a row   上面两排类名为“row”的div元素被设置了“display:table-row;”属性,它们将会像单列表格中的两行一样依次排列。最后一个div元素则不会包含在这个匿名的table中。 其他有用的表格属性当使用css表格时,因为这些元素遵从table布局的普通规则,所以你还可以给它们应用其它表格相关的css属性。下面是一些派得上用场的属性: table-layout制作完美的栅格制作等高栅格对于传统css布局技术来说已经成为一个难题,然而使用合适的css表格则很容易实现。例如,如果我们想制作一个包含图片和标题的影像图库栅格(如下图),使用css表格很快就能搞定。   以下是我们这个影像图库的代码:每张图片被一个img标签引用,它的标题包含在p元素中,它们均被包含在一个类名为“image”的div元素中。同一行的div被一个类名为“row”的div元素包含,整个影像图库被一个类名为“grid”的div元素包含。 class='grid'> class='row'> class='image'>'images/11.png' alt='a lily' /> a lily in the gardens of the vyne country house class='image'>'images/11.png' alt='a fuchsia plant' /> fuchsia plant in my garden class='row'> 
class='image'>'images/11.png' alt='a crazy looking allium flower' /> a crazy looking flower class='image'>'images/11.png' alt='a robin sitting on a fence' /> this robin has been visiting our garden over the summer.he is very friendly and doesn’t seem to be too worried about sharing the garden with us. 效果图: 当然,这个我采用的是vertical-align:middle;你如果采用top对齐,那么图片就是完全一致对齐啦。 
 转载于:https://www.cnblogs.com/goloving/p/7678291.html 总结以上是凯发k8官方网为你收集整理的css table布局:基于display:table的css布局的全部内容,希望文章能够帮你解决所遇到的问题。 如果觉得凯发k8官方网网站内容还不错,欢迎将凯发k8官方网推荐给好友。 
  |