为什么不允许样式化表格列?

20

W3规定,表格列(使用<col>元素)只允许使用四个CSS规则 - border、background、width和visibility。

有人知道这个决定背后的原因吗?如果可以设置边框和背景,为什么不能设置字体和颜色呢?

4个回答

13
伊恩·希克斯在这里详细解释:“为什么只有四个属性适用于表格列”的谜团。相关引用如下:

文本的颜色取决于其元素的“color”属性。除非指定,“color”属性(基本上)默认为“inherit”,这意味着“继承父元素的值”。

因此,对于单元格中的某些文本,颜色取决于单元格的“color”属性,该属性从行中获取,行又从表中获取,表又从其父元素中获取,以此类推。

那么列呢?由于列不是单元格的祖先之一,所以它永远无法生效!此处就是问题所在。


有趣的帖子。其中很多都是有道理的,但它并没有解释为什么允许这4个CSS规则,而其他规则却不行。肯定需要修改解析模型来应用背景,那么为什么可以使用背景而不能使用文本颜色呢? - DisgruntledGoat
2
该列具有背景颜色。如果单元格和行的背景颜色为透明,则可以看到列的颜色。这只是将元素叠加在彼此上面。字体颜色不起作用。 - Quentin

8

根据我有限的理解,以下是一个猜测:

我认为通过列相关元素进行样式设置受到限制,因为尽管 <col><colgroup> 表示单元格的列,但它们实际上并不包含它们(它们实际上被 <tr> 包含)。这带来了优先级、特定性和级联的问题(因为级联只能在包含/被包含元素之间完成)——当来自 <tr><col> 的冲突样式规则(它们在多重继承层次结构中处于相同的级别)发生时,单元格应该使用哪个?

至于为什么允许使用那些特定的一些样式属性:我不知道。


1
对于冲突,我链接到的页面说单元格优先于行,然后是列。因此,除非在行或单元格级别被覆盖,否则将应用列上的任何样式。 - DisgruntledGoat

4
一个词:模糊不清。单元格必须是行的子级;否则,它就不是表格了。但是没有列可以从中下降。使用 colspan 意味着一个单元格可以在两个列中。与其想出一些令人困惑的方法,为什么不让开发人员对每个第 n 个单元格放置一个 class 呢?
如果您仔细查看您链接到的规范,您将看到尝试消除歧义的努力。 width 属性指定最小值;background 落后于行和单元格;border 引用“冲突解决算法”。之所以甚至有一个 border 算法,是因为我们可以合理地理解谁应该“获胜”(详见算法)。但是,您能想象试图弄清哪个 colorfont 应该“获胜”吗?

嗯,@colspan和@rowspan有什么区别? - Ms2ger
@ms2ger:使用colspan时,跨越多行的单元格始终是特定<tr>元素的子代。 - DisgruntledGoat
@George:回答很好,但是有一个问题……如果我正在查看正确的地方,“冲突解决算法”只是列出优先顺序:单元格(最高),行,行组,列,列组,表格。为什么不能将其应用于颜色或字体? - DisgruntledGoat

0
可能是因为表中的每一行不一定要显示列(例如,因为存在合并单元格)。那个单元格应该继承哪个列的样式呢?只是猜的。

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