如何(以及为什么)使用display:table-cell(CSS)

Jim*_*Jim 17 html css css-tables

我有一个非常活跃的网站背景(我说的是6个左右不同的z索引,其中2个带有动画).我想在前景中有一个内容,但想要一个"窗口"到它的背景.我遇到的一些问题:

  1. 你不能在背景中"打洞",所以......

    • 我构建了一个包含div,让我们称之为"srminfo"
    • 在里面,我有一个"顶部","左","窗口","右"和"底部"
    • 顶部,左侧,右侧,底部都有不透明的白色背景
    • 而srminfo和window divs有background:none;
  2. 无论我怎么努力,"正确"的div都不会填补"顶部"和"底部"div之间的空间,我尝试了很多不同的东西.它必须是动态的原因是"left"div中的文本是基于背景颜色动态的,背景颜色本身是用JavaScript随机生成的.

如何显示:表; 以及所有其他相关的CSS代码,如表格?它怎么用?

Jim*_*Jim 42

经过几天试图找到答案,我终于找到了

显示:表;

令人惊讶的是,在线提供的关于如何实际使用它的信息很少,即使在这里也是如此,所以"如何":

要使用这段精彩的代码,您需要回想一下表格是构建HTML的唯一真正方法,即语法.要获得包含2行和3列的表,您必须执行以下操作:

<table>
    <tr>
        <td></td>
        <td></td>
        <td></td>
    </tr>
    <tr>
        <td></td>
        <td></td>
        <td></td>
    </tr>
</table>
Run Code Online (Sandbox Code Playgroud)

与获取CSS类似,您将使用以下内容:

HTML

<div id="table">
    <div class="tr">
        <div class="td"></div>
        <div class="td"></div>
        <div class="td"></div>
    </div>
    <div class="tr">
        <div class="td"></div>
        <div class="td"></div>
        <div class="td"></div>
    </div>
</div>
Run Code Online (Sandbox Code Playgroud)

CSS

#table{ 
    display: table; 
}
.tr{ 
    display: table-row; 
}
.td{ 
    display: table-cell; }
Run Code Online (Sandbox Code Playgroud)

正如您在下面的JSFiddle示例中所看到的,第3列中的div没有内容,但是它们遵循前2列中文本设置的自动高度.赢得!

http://jsfiddle.net/blyzz/1djs97yv/1/

值得注意的是,display: table;在IE6或7中不起作用(感谢FelipeAls),因此根据您对浏览器兼容性的需求,这可能不是您所寻求的答案.

  • FWIW,[我写了一个解释css表格显示样式的早期答案](/sf/ask/533219291/# 13983507),包括使用`table-column`。 (2认同)
  • 就可访问性而言,这与实际表格有何不同? (2认同)

Dmi*_*sov 23

使用parent> child选择器关系甚至更容易,因此内部div不需要显式定义其css类:

.display-table {
    display: table; 
}
.display-table > div { 
    display: table-row; 
}
.display-table > div > div { 
    display: table-cell;
    padding: 5px;
}
Run Code Online (Sandbox Code Playgroud)
<div class="display-table">
    <div>
        <div>0, 0</div>
        <div>0, 1</div>
    </div>
    <div>
        <div>1, 0</div>
        <div>1, 1</div>
    </div>
</div>
Run Code Online (Sandbox Code Playgroud)


mac*_*ost 7

如何(以及为什么)使用 display: table-cell (CSS)

我只是想提一下,因为我认为其他任何答案都没有直接做到,“为什么”的答案是:没有充分的理由,您可能永远不应该这样做。

在我 10 多年的 Web 开发经验中,我想不出有哪一次比只有表格元素更适合拥有一堆<div>带有display样式的s 。

我能想到的唯一假设是,如果您有以某种非 HTML 表格格式(例如 CSV 文件)存储的表格数据。在这种情况的一个非常特定的版本中,只在所有内容周围添加标签,然后添加基于后代的样式,而不是添加实际的表格标签,可能会更容易<div>

但这是一个非常人为的例子,在我知道的所有真实情况下,简单地使用表格标签会更好。

  • 我相信“&lt;table&gt;”被屏幕阅读器视为内容/表格数据。这就是为什么不建议使用 `&lt;table&gt;` 进行布局,因为布局不是表格数据。`display: table` 也被视为内容吗?如果没有,那么您可以毫无愧疚地使用它们进行布局。编辑:有人在这里测试了这个;它似乎不一致:https://www.456bereastreet.com/archive/201110/using_displaytable_has_semantic_effects_in_some_screen_readers/ (3认同)
  • 我认为在某些情况下,使用“display: table;”和类似的 CSS 声明对于实现复杂的布局非常有用;但我同意 html `table` 元素几乎总是表格数据的首选。现在我们有了 Flexbox 和 CSS 网格,甚至连用于 `display: table;` 的布局和朋友也变得不再那么必要了。 (2认同)
  • 当您尝试在小型移动设备上显示表格时会发生什么?依赖`HTML` 标签(表格)进行布局的一个缺点是它可能会干扰*响应式设计*。只是一个想法 - 在实践中,在这种情况下我可能不会使用 * 要么 * HTML 或 CSS 表元素,所以可能不是一个很好的例子。 (2认同)

The*_*est 6

display:tableCSS属性的家庭大多有使HTML表格可以在他们来界定。因为它们与特定的标签结构如此紧密地联系在一起,所以除此之外他们看不到太多用途。

如果您打算在您的页面中使用这些属性,您将需要一个与表格非常相似的标签结构,即使您实际上并未使用<table>标签系列。最小版本将是单个容器元素 ( display:table),具有可以全部表示为行 ( display:table-row) 的直接子元素,而行本身具有可以全部表示为单元格 ( display:table-cell) 的直接子元素。还有其他属性可以让您模仿系列中的其他标签table,但它们需要 HTML 中的类似结构。没有这个,就很难(如果不是不可能的话)充分利用这些属性。


Jea*_*eur 5

我没有 10 年的 Web 开发经验,但只有一年左右的时间,我很快就遇到了一个不能使用表格元素但可以使用 CSS table : forms 的用例。表格和表格不能很好地结合在一起。表单不允许是表元素的子元素。因此,评论之前的评论:div 和 CSS table 至少在您想要将表单放入表格时很有用。让-伊夫