为啥不允许样式表列?

Posted

技术标签:

【中文标题】为啥不允许样式表列?【英文标题】:Why is styling table columns not allowed?为什么不允许样式表列? 【发布时间】:2010-11-10 06:50:48 【问题描述】:

W3 specifies 表列(带有<col> 元素)只允许使用四个 CSS 规则 - 边框、背景、宽度和可见性。

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

【问题讨论】:

【参考方案1】:

Ian Hixie 在这里详细解释:The mystery of why only four properties apply to table columns。相关引述:

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

所以对于单元格中的某些文本,颜色是由单元格的'color'属性决定的,该属性取自行,取自表格,取自表格的父级,以此类推.

那列呢?好吧,该列不是单元格的祖先之一,因此它永远不会被查看!这就是问题所在。

【讨论】:

有趣的帖子。很多都是有道理的,但它没有解释为什么这 4 条 CSS 规则是允许的,而其他的则不是。当然需要修改解析模型以应用背景,那么为什么是背景而不是文本颜色呢? 列有背景色。如果单元格和行的背景颜色为透明,则可以看到列颜色。这只是将元素叠加在一起。字体颜色不能那样工作。【参考方案2】:

根据我有限的理解,只是在黑暗中的狂野刺伤:

我认为通过列相关元素进行样式设置受到限制,因为虽然<col><colgroup> 表示单元格列,但它实际上并不包含它们(它们实际上包含在<tr>s 中)。随之而来的是优先级和特异性以及级联问题(因为级联只能在包含/容器元素之间进行) - 当来自<tr><col> 的样式规则发生冲突时(这将是多重继承层次结构中的同一级别)发生 - 单元格实际应该使用哪个?

至于为什么允许特定的少数样式属性:不知道。

【讨论】:

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

一个词:模棱两可。单元格必须是行的孩子;否则它不会是一张桌子。但是没有可以下降的列。使用colspan 意味着一个单元格可以在两列中。与其想出一些令人困惑的出路,为什么不让开发人员在每个第 n 个单元格上放置一个class

如果您仔细查看链接到的规范,您会看到解决歧义的尝试。 width 属性指定最小值; background 位于行和单元格的后座; border 引用了“冲突解决算法”。甚至有border 的算法的唯一原因是因为可以合理地理解谁应该“获胜”(有关详细信息,请参阅算法)。但是你能想象尝试找出哪个colorfont 应该“获胜”吗?

【讨论】:

呃,@colspan 和@rowspan 有什么区别? @ms2ger:使用 colspan,跨越多行的单元格始终是特定 <tr> 元素的后代。 @George:很好的答案,但有一个问题......如果我正在寻找正确的地方,“冲突解决算法”只是列出了优先顺序:单元格(最高),行,行组、列、列组、表。为什么不能用于颜色或字体?【参考方案4】:

可能是因为表格中的每一行不一定要为您的列显示一个单元格(例如,因为 colspan)。该单元格应该从哪一列继承它的样式?只是猜测。

【讨论】:

以上是关于为啥不允许样式表列?的主要内容,如果未能解决你的问题,请参考以下文章

Webpack 从我的样式表中的内联 SVG 中去除标签,我不知道为啥

为啥在html中调用外部css样式表没有效果

为啥用户代理样式表会覆盖我的样式? [关闭]

为啥 XSLT 文档被认为是“样式表”?

为啥我们不能使用 CSS 设置下拉菜单的样式? [复制]

Wordpress:为啥我的样式表没有入队?