【问题标题】:Span attribute on colgroup and colcolgroup 和 col 的 span 属性
【发布时间】:2011-09-13 04:12:31
【问题描述】:

这些代码在逻辑上是等价的吗?

<colgroup span="7">
</colgroup>

<col span="7" />

<colgroup>
<col />
<col />
<col />
<col />
<col />
<col />
<col />
</colgroup>

任何通过 HTML 的属性或通过 CSS 的属性是否具有相同的效果?也可以添加“colgroup”标签。没有足够的代表让我这样做。

【问题讨论】:

    标签: html col colgroup


    【解决方案1】:

    来自specification for &lt;col&gt;

    可以使用此元素的上下文:
    作为没有 span 属性的 colgroup 元素的子元素。
    [...]
    内容属性: 全局属性
    跨度

    我读到的意思是 &lt;col span="7" /&gt; 本身是无效的,但是这个:

    <colgroup>
        <col span="7" />
    </colgroup>
    

    有效且等同于:

    <colgroup span="7">
    </colgroup>
    

    但是,如果是&lt;colgroup&gt; has a span attribute,那么它就不应该有&lt;col&gt; 子代:

    如果 colgroup 元素不包含 col 元素,则该元素可能具有指定的 span 内容属性...

    我的解释(基于 HTML4 specification 而不是更薄的 HTML5 之一)是您通常会使用 &lt;colgroup span="n"&gt; 除非您需要对组中的列之一进行不同的样式设置,如在这个(修改的)示例中HTML4 规范:

    <colgroup style="width: 20px; font-weight: bold;">
        <col span="39">
        <col id="format-me-specially" style="width: 35px;">
    </colgroup>
    

    所以前 39 列将使用 &lt;colgroup&gt; 指定的任何内容,但可以调整第 40 列。 OTOH,我很难让浏览器在 jsfiddle.net 上关注任何这些(尽管规范是这样说的)所以 YMMV。

    【讨论】:

    • 浏览器会自动添加“colgroup”,即使我们添加了一个“col”,所以看起来“col”不能在“table”中单独存在,必须是一个“colgroup”,不管你是否添加它。看起来它们只是做同一件事的两种方式。基本上是“表格列”的 HTML 选择器 感谢您的回答和您的时间。
    • @Jawad:我不会依赖浏览器添加任何东西(或者,一般来说,始终是明智的 :) 在浏览器访问它之前确保您的嵌套是正确的,您可能会更安全。
    • @mu 太短:是的,你是对的。添加“colgroup”会更安全。顺便说一句,完全偏离主题,你名字中的这个“mu”和Zen中的“mu”是一样的吗?即,与逻辑中的二价原理和排中律相反(Sombody问禅师。狗有禅吗?禅师回答:“mu”)。
    • @Jawad:我不问你的问题 :) 它实际上来自 Measure Theory
    • @muistooshort:我喜欢你的回答,但它没有触及使用colgroups 和cols 的语义(如果有的话)。他们的唯一目的是实现样式的捷径吗?喜欢divspan没有样式使用它们的理由是什么?
    【解决方案2】:

    这是我对规格的解释。 更新:查看 HTML4 规范后,我改变了对 colgroup 元素的 span 属性的看法。

    (这也是对我自己在@mu的回答中的第二个问题评论的回应。)

    colgroup 代表 group of one or more columns,它的 span specifies the number of columns in a column group。所以我认为它是一个捷径,让作者不用连续写多个col元素。

    <colgroup class="x" span="3"></colgroup>
    

    列组跨越三列,并根据 CSS 规则 .x {...} 设置样式。这相当于

    <colgroup class="x">
        <col/>
        <col/>
        <col/>
    </colgroup>
    

    另一方面,col 代表one or more columns in the column group,它的span specifies the number of columns "spanned" by the COL element...如果你问我,这是一个循环定义。

    我能解释的唯一方法是写

    <colgroup class="x"><col class="y" span="3"/></colgroup>
    

    你是说有三列,每一列都在同一个逻辑分组中,根据.y {...} 的样式相同。这是写作的捷径

    <colgroup class="x">
        <col class="y"/>
        <col class="y"/>
        <col class="y"/>
    </colgroup>
    

    目前,我不确定会有明显的不同。当然,这一切看起来如何取决于您的 CSS。但在语义上,它们是非常不同的。第一个示例表示三组列,每组包含一列,而第二个示例表示一组三列。

    重新考虑后,我决定它们都是一样的。拥有一个colgroup 跨度n 列数与拥有一个colgroup 和一个跨越col 列的col 子级相同。我认为没有逻辑或语义上的差异。

    注意:the col element must be contained in a colgroup element that has no span attribute. It may not be a direct child of the table element

    【讨论】:

    • 感谢您的回答。除了语义的观点,我没有遇到任何现实世界的例子,除了它被用作“非官方”的 html 列选择器。但在场外,它也取决于数据本身。例如,您可以将地址列分为街道、区域、邮政编码等子列,其中数据彼此之间具有自然链接,在这里您可以使用 colgroup 对它们进行分组。但是因为它是网页设计而不是 RDBMS,所以它完全没用!
    • 我理解您的不满。截至目前(2012 年 1 月;Google Chrome v 16),除了更改背景颜色外,我无法在 colgroupcol 元素上使用 CSS 做任何事情。我尝试调整widthcolorfont-size 和许多其他属性,但无济于事。只有background-color 有效。我还没有在不同的浏览器上尝试过。任何关注此的人,如果有更多消息,请回复。
    • 如果给定了一个类,则应用样式 - reference.sitepoint.com/html/colgroup
    • 您确定col 不能是table 的直接子代吗?这是一个教程,正是这种情况,span 属性用于colgroup 元素。 w3.org/WAI/tutorials/tables/irregular
    • @Vun-HughVaw :从技术上讲,col 元素不能是 table 元素的直接子元素。 Content Model of table: col 元素是不允许的。 Contexts in which col may be used:仅作为colgroup 的孩子。 但这里有个问题: 在某些情况下,colgroup 的开始标记 结束标记可能会被省略。所以在标记中,你的table 可以看起来像它有一个直接的col 孩子,但这只是因为有一个隐含的colgroup
    猜你喜欢
    • 1970-01-01
    • 2012-06-14
    • 2021-08-01
    • 2020-02-10
    • 2017-06-06
    • 2015-03-16
    • 2011-05-29
    • 2012-05-04
    • 1970-01-01
    相关资源
    最近更新 更多