HTML的<COL align>已经被弃用了吗?

24
我正在查看W3Schools演示如何使用<COL>元素对齐列
<table width="100%" border="1">
  <col align="left" />
  <col align="left" />
  <col align="right" />
  <tr>
    <th>ISBN</th>
    <th>Title</th>
    <th>Price</th>
  </tr>
  <tr>
    <td>3476896</td>
    <td>My first HTML</td>
    <td>$53</td>
  </tr>
</table>

并且浏览器的呈现效果并不令人鼓舞:

Chrome(10.0.648.127):
enter image description here

FireFox(3.6.8):
enter image description here

Internet Explorer 9(标准模式):
enter image description here

Internet Explorer 8(标准模式):
enter image description here

Internet Explorer 7(标准模式):
enter image description here

Internet Explorer(怪异模式): enter image description here

有趣的是,<COL align>曾经在浏览器中起作用,但该功能在ie8中被取消了。(而Chrome作为所有完美事物的仲裁者,并不支持它。)

这让我想知道<COL align>是否是一些本应该不能工作的东西。

<COL align>已被弃用吗?


更新一

我知道它还没有正式被弃用。但是浏览器曾经支持它,然后又停止支持它,这使我相信有一些历史故事我不知道。我假设IE故意删除了对col align的支持,并且其他浏览器仍然缺乏支持,说明有些事情正在发生。

更新二

我错误地认为所有<COL>的特性都不支持,这意味着<COL>本身不受支持。我错误地认为,由于我尝试的唯一属性无法工作:元素也无法工作。这是我的错误;事后我应该已经问过"COL align"是否已被弃用(是的)。

在我的辩护中,我假设一个例子会显示哪些内容"不再"工作。

另请参阅


14
请记住,W3School与W3C无关! - Tobias
3
这是正确的。但是,向人们展示一个不是我的代码的示例作为独立测试是有帮助的。 - Ian Boyd
4
请阅读http://w3fools.com/! - Domenic
4
@Domenic 这是一个有趣的抱怨网站。引用问题中的HTML源代码有什么问题吗? - Ian Boyd
4
最终,HTML及其使用的“align”没有任何错误,只是在HTML5中“align”已经过时。这就是为什么IE停止支持它的原因。虽然w3fools可能更喜欢wiki编辑的例子,但该页面(在其冗长的投诉列表中)并不对“COL align”提出异议。因此,在这个特定的StackOverflow问题上没有必要链接到它:因为w3fools上的任何内容都不适用。如果HTML中有错误,则w3fools上的任何更正都将有所帮助。但由于没有错误,所以也没有必要。 - Ian Boyd
显示剩余4条评论
6个回答

27

是的,HTML5 中不再出现 <col />align 属性。 规范如此描述!

另外值得注意的是,你不能通过 CSS 来在 <col /> 标签上实现类似的效果。只有 style 属性(或从 idclass 等引发的样式)会考虑适用于列本身的属性。也就是说,每个 <td /> 可以包含文本内容,因此可以设置类似 text-align 的属性,但是 <col /> 元素不包含文本,因此没有任何文本级别的样式应用。(像 background-color 这样的块级样式仍然有效。)

然而,在不涉及colspanrowspan的基本情况下,您可以使用CSS伪类:nth-of-type选择<td />(因此在某种程度上选择"列")。例如,要使具有类c3的表格的第三列居中,请使用以下代码
table.c3 td:nth-of-type(3) { text-align: center; }

编辑者注:

来自HTML标准

16 废弃特性

[...]

16.2 非规范特性

以下属性已经废弃(尽管元素仍然是语言的一部分),作者不得使用: ...
col元素上的align属性
...

请改用CSS。

WHATWG维基为各种废弃的表现属性提供了一些推荐的替代方案:

Attribute              CSS equivalent
=====================  =====================================
align on col elements  'text-align' on the appropriate td/th

感谢提供链接;我之前并没有意识到自己没有阅读最新的HTML规范,真的很感激。 - Ian Boyd
18
太烂的建议了,“在那一列的每个单元格中添加'text-align'样式属性。”:/ - canon
3
我同意@antisanity的观点,我认为移除"align"是一个错误。 - Ian Boyd
我认为它们有非常不同的目的。我很惊讶看到这个。我理解,您可以使用align属性将列与表对齐。当然,使用CSS对齐文本更好。 - Iharob Al Asimi
1
如果您使用colspan来跨多列显示单元格,则td:nth-of-type(3)将无法正常工作。 - MT0
显示剩余4条评论

4

尝试

<!doctype html>
<html>
  <head>
    <title>Table</title>
    <style>
      table.foo td:nth-of-type(2) {
        font-style: italic;
      }
    </style>
  </head>
  <body>
    <table class="foo">
      <thead>
        <tr> <th>first</th> <th>second</th> </tr>
      </thead>
      <tbody>
        <tr> <td>bar</td> <td>baz</td> </tr>
        <tr> <td>bim</td> <td>buh</td> </tr>
      </tbody>
    </table>
  </body>
<html>

这个呈现为什么样子:

输入图片描述


2

1
我了解到XHTML目前处于1.1版本。 - David Thomas
@David:这取决于你所说的“当前”是什么意思。HTML5(可以使用传统的HTML语法或XHTML语法编写)尚未成为W3C推荐,但它是所有浏览器供应商正在趋同的方向,也没有任何竞争性的努力。这是(X)HTML的现在和未来。 - Paul D. Waite

0

0

为了使标记语言在语义上更有意义,您是否考虑过<colgroup>替换<col>标签

<col>仅用于样式,而<colgroup>可用于分组相关列(也许这就是您想要将其中两个左对齐的原因?)然后,您可以将CSS应用于各个列组以相应地进行样式设置。


2
听起来是个好主意,不过你需要发布能正常工作的 HTML 代码片段。我试了一下,浏览器忽略了对我的 <colgroup class="alignTheseRight"> 的 CSS 样式设置,其中包括 .alignTheseRight { text-align: right; } - Ian Boyd

0

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接