为什么Bootstrap网格布局更适合HTML表格?
[注意:对于那些可能将此问题与“为什么不使用表格进行HTML布局”混淆的人,我不会问这个问题。 我问的问题是为什么网格布局与表格布局根本不同。]
我正在研究一个项目的CSS库(特别是Bootstrap)。 我是一名程序员而不是网页设计师,我觉得我可以从封装好设计的图书馆中受益。
我们都知道,使用HTML表格来完成基本的网站布局是一种不好的做法,因为它将表现与内容混合在一起。 像Bootstrap这样的CSS库提供的好处之一是它们可以在不使用表的情况下创建“网格”布局。 然而,我遇到了一些麻烦,了解他们的网格布局与等效的表格布局有何不同。
换句话说,这两个HTML例子之间的根本区别是什么? 我错在认为网格布局只是另一个名字的表格吗?
<div class="row">
<div class="span16"></div>
</div>
<div class="row">
<div class="span4"></div>
<div class="span4"></div>
<div class="span4"></div>
<div class="span4"></div>
</div>
和
<table>
<tr>
<td colspan=4></td>
</tr>
<tr>
<td></td>
<td></td>
<td></td>
<td></td>
</tr>
</table>
不同之处在于第一个示例是在语义上标记的,假设数据被标记为实际不是表格。 <table>
只能用于表格数据,不能用于任何恰好以类似于表格的布局显示的数据。
不过,使用像Bootstrap这样的CSS软件包是正确的,它要求您将类分配给非语义但表示性的HTML元素,从而减少了内容和表示的分离,使得这种差异有点没有实际意义。 您应该为您的元素指定语义上有意义的类,并使用lesscss mixins(或类似技术)将CSS框架中定义的表示行为分配给这些类,而不是直接将表示类指派给元素。
说:
<div class="products">
<div class="product"></div>
</div>
.products {
.row;
}
.products > .product {
.span16;
}
请注意,我说应该。 在实践中,这不一定总是更可行的选择,但它应该是理论目标。
我相信CBroe的评论是最好的选择,所以我选择澄清它。
避免div
的。 div
应该是你的最后一招,而不是你的第一选择。 相反,尝试在实际元素上使用Bootstrap类。 例如:
<form class="container">
<fieldset class="row">
<label class="span4" for"search">Type your search</label>
<input class="span6" type="text" id="search" />
</fieldset>
</form>
使用fieldset来包含单个字段是一件div
的事情,但它在语义上最好比使用div
来实现同样的功能。 HTML5标准定义了许多新的容器元素,例如article
, section
, header
, footer
等等。 在某些情况下,你将不得不使用div
,但是如果你最小化它的使用,那么你的代码会更加语义化。
根本区别在于,只需使用媒体查询而不需要更改标记,就可以使用Bootstrap对布局进行“重新布置”。 例如,我可以决定,在桌面上,我希望你的4个div位于同一行,因为用户具有高分辨率的宽屏幕显示,但在手机上,我希望在一行上进行2次潜水,在下一行上进行下一个div。 所以这样我可以使用媒体查询来调整每行中的列数。 如果你使用硬编码的HTML表格,那么这很难做到。
话虽如此,我并不喜欢bootstrap的实现,原因如下:
所以,并非所有的东西都是自助的黄金,他们的做法并不一定总是最好的(因为在旁边,我鄙视自己的另一件事是他们对所谓的“超大型电脑”的痴迷 - 那些房地产在你的脸上浪费不便标题 - 我希望社区不会将其视为“新标准”)。 就我个人而言,我现在使用CSS表格布局( display:table
),与我的标记中没有硬编码<table>
bootstrap具有相似的好处。 例如,我仍然可以使用媒体查询重新排列行,具体取决于纵向还是横向。 然而,最重要的好处是我的布局是真正的像素或甚至百分比独立。 例如,在3列布局中,我让内容决定第一列和最后一列需要占用多少空间。 没有像素或甚至百分比宽度。 中间列抓取所有剩余的空间(这对我的应用程序来说是好事,但它可能不适用于其他应用程序)。 另外,我在媒体查询中断点使用了ems,而引导程序令人惊讶的是没有。
上一篇: Why is the Bootstrap grid layout preferable to an HTML table?