我理解从<div>
转向<table>
标记的目标是有意义的,因为它更具语义性。但是,如果您仍需要清除块来使基于列的布局工作,我不明白所获得的好处。例如:
<!-- Note: location-info & personal-info both float left. -->
<div class="contact">
<div class="personal-info">
<p>
Shawn, etc, etc
</p>
</div>
<div class="location-info">
<p><address>etc</address></p>
</div>
<br style="clear:both" /> <!-- clearing block -->
</div>
无关的<br>
标记用于严格描述样式,并且需要使布局有效。这是否会破坏从删除表中获得的所有好处?
答案 0 :(得分:32)
.clear-block:after {
content: ".";
display: block;
height: 0;
clear: both;
visibility: hidden;
}
.clear-block {
display: inline-block;
}
<div id="wrapper" class="clear-block">
<div style="float:right">
Your content here
</div>
<div style="float:left">
More content here
</div>
</div>
答案 1 :(得分:11)
如果您正在显示表格数据,那么使用表格然后许多浮动的div仍然更有意义。明智地使用你的工具 - 不要盲目地使用CSS,其中表是最好的选择。
答案 2 :(得分:8)
我理解从
<div>
转向<table>
代码的目标是有道理的,因为它更具语义性。
实际上,恰恰相反:从<table>
移动到<div>
会使您的HTML 更少语义。事实上,<div>
(和<span>
)元素的整点是 no 语义!
当我看到<div>
被称为“语义HTML”的森林时,它总是让我感到震惊。不,这不对!这是* un- *语义HTML!特别是如果它包含大量<div class='float-left'>
,<div id='bottom'>
和我个人的收藏夹<div class='paragraph'>
和<span class='emphasis'>
。
不要误解我的意思,使用非语义<div>
肯定比使用错误的 - 语义<table>
更好,但更好的方法是使用语义上正确的元素 - 尽管在许多情况下问题是HTML不提供任何元素。例如,在您的代码段中,您使用<address>
元素,但根据the specification,此元素不用于标记地址! 仅用于标记页面作者的地址 - 它完全没用。
您发布的示例缺少大量上下文,因此很难说,但实际上您可能希望显示表格或分层数据,在这种情况下<table>
s或{{ 1}}可能是更好的选择。
答案 3 :(得分:1)
完全没有。避免使用表格还有很多其他好处。
答案 4 :(得分:1)
我个人使用clearfix hack来满足我的清算需求。
/* Clearfix */
#content:after,
.box:after {
content:'.';
display: block;
clear: both;
visibility: hidden;
height: 0;
}
#content,
.box {
zoom: 1; /* IE */
}
注意我只是用逗号分隔选择器而不是将clearfix
类添加到所有内容中。它工作得很好。唯一的问题是zoom
属性是IE特定的并且不验证,但是没有副作用,例如有时可能与其他属性一起使用,例如overflow: auto
。
我已经在专业网站上使用了5年没有任何问题。
答案 5 :(得分:0)
正如annakata的回答所示,你不需要那些清算块。但除此之外,避免表的一个优点是页面可以逐步呈现。只有在解析了整个表(包括其所有内容)时才能呈现表,如果您有大页面和慢速连接,则可能需要一段时间。 div可以立即呈现,这意味着您可以比使用表格更快地向用户呈现可用的内容。
当然,这只是一个不错的小优点,它不是,也不应该是 避免表格的原因(对于非表格数据)