【问题标题】:What does display: table-column do?display: table-column 有什么作用?
【发布时间】:2021-03-06 07:06:09
【问题描述】:

根据mdndisplay: table-column应该

表现得像 HTML 元素。

但据我所知,<col> 元素没有显示模式,它们实际上只是 html 的粗略边缘,它定义了标记中的样式。那么 css 中的 table-column 到底应该做什么呢?

【问题讨论】:

标签: css css-tables


【解决方案1】:

它允许您将其他 HTML 元素视为<col> 元素

因为<col> 元素不属于任何内容类别并且不允许它们包含任何内容,所以它们基本上从流中移除并且它们的内容被忽略(就像它们具有display: none 一样)。

display: none 不同,当正确应用于列组的子项时,table-column 关键字可用于影响与该组中的列关联的单元格(甚至是模拟单元格)的样式。

根据CSS 2.1 §17.2 The CSS table model

display 设置为 table-columntable-column-group 的元素不会被渲染(就像它们具有 display: none 一样),但它们很有用,因为它们可能具有为它们的列引入某种样式的属性代表。

根据CSS 2.1 §17.3 Columns

表格单元格可能属于两种上下文:行和列。但是,在源文档中,单元格是行的后代,而不是列的后代。不过,单元格的某些方面可能会受到在列上设置属性的影响。

以下属性适用于 columncolumn-group 元素:[border, background, width, visibility]

例如:

.table {
    display: table;
    table-layout: fixed;
    border-collapse: collapse;
    width: 100%;
}
.table-row {
    display: table-row;
}
.table-cell {
    display: table-cell;
    border: 1px solid silver;
    padding: 0.5em;
}
.table-colgroup {
    display: table-column-group;
}
.table-col {
    display: table-column;
}
.col-1 {
    /* Invalid. See: CSS 2.1 §17.3 Columns */
    text-align: center;
}
.col-2 {
    /* Valid.   See: CSS 2.1 §17.3 Columns */
    background-color: tomato;   
}
<div class="table">
    <div class="table-colgroup">
        <div class="table-col col-1">Col 1 (hidden content)</div>
        <div class="table-col col-2">Col 2 (hidden content)</div>
    </div>
    <div class="table-row">
        <div class="table-cell">Row 1, Col 1</div>
        <div class="table-cell">Row 1, Col 2 </div>
    </div>
    <div class="table-row">
        <div class="table-cell">Row 2, Col 1</div>
        <div class="table-cell">Row 2, Col 2</div>
    </div>
    <div class="table-row">
        <div class="table-cell">Row 3, Col 1</div>
        <div class="table-cell">Row 3, Col 2</div>
    </div>
</div>

无障碍问题

尽管存在 table-* 显示属性,但对表格使用非语义 HTML 不利于可访问性,因为它可能会导致屏幕阅读器等辅助技术误解数据。

根据Web Accessibility Initiative (WAI) Tables Tutorial

数据表用于在网格中组织具有逻辑关系的数据。可访问的表格需要 HTML 标记来指示标题单元格和数据单元格并定义它们的关系。辅助技术使用这些信息为用户提供上下文。

如果你想使用非语义标记和 CSS 来构建表格,我建议阅读Tables, CSS Display Properties, and ARIA | Adrian Roselli

【讨论】:

  • 我明白了,table-column 中的内容会以其他方式显示吗?顺便注意一下,@mattytommo 的回答准确地解释了它是如何 notdisplay: none
  • 出于所有意图和目的,内容被忽略,但如果你想用它做点什么,你仍然可以使用 JavaScript 访问它。在真正的&lt;col&gt; 元素中,不允许使用内容,这会使您的代码无效。这里不认为是无效的。
【解决方案2】:

虽然您是对的,但它们只是为该列中的每个 tdth 定义样式,但从技术上讲,它们本身确实具有 display 模式,因为正是 display: table-column 赋予了它们这种能力。

如果您将&lt;col&gt; 设置为display: none,则相应的表格元素将不再应用在col 中设置的样式(在此Fiddle 中尝试)。

就我个人而言,我觉得这是一种让 HTML 元素表现得像一组 CSS 规则来决定表格内容的样式的方式有点笨拙。

【讨论】:

  • @GeorgeMauer 告诉我,这就像一些可怕的肮脏秘密,需要从 HTML 规范中删除 :)
猜你喜欢
  • 2013-03-08
  • 2016-06-26
  • 1970-01-01
  • 2013-07-18
  • 1970-01-01
  • 2012-05-01
  • 2016-09-22
  • 2012-02-16
  • 1970-01-01
相关资源
最近更新 更多