为啥不允许样式表列?
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
的算法的唯一原因是因为可以合理地理解谁应该“获胜”(有关详细信息,请参阅算法)。但是你能想象尝试找出哪个color
或font
应该“获胜”吗?
【讨论】:
呃,@colspan 和@rowspan 有什么区别? @ms2ger:使用 colspan,跨越多行的单元格始终是特定<tr>
元素的后代。
@George:很好的答案,但有一个问题......如果我正在寻找正确的地方,“冲突解决算法”只是列出了优先顺序:单元格(最高),行,行组、列、列组、表。为什么不能用于颜色或字体?【参考方案4】:
可能是因为表格中的每一行不一定要为您的列显示一个单元格(例如,因为 colspan)。该单元格应该从哪一列继承它的样式?只是猜测。
【讨论】:
以上是关于为啥不允许样式表列?的主要内容,如果未能解决你的问题,请参考以下文章