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

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

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

【问题讨论】:

    标签: html css css-tables col


    【解决方案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)。该单元格应该从哪一列继承它的样式?只是猜测。

    【讨论】:

      猜你喜欢
      • 2020-11-01
      • 2023-03-20
      • 2015-08-15
      • 1970-01-01
      • 2011-08-17
      • 1970-01-01
      • 2021-01-27
      • 2014-08-23
      • 1970-01-01
      相关资源
      最近更新 更多