【问题标题】:Using flexbox on table header <th> elements在表头 <th> 元素上使用 flexbox
【发布时间】:2019-06-21 11:53:48
【问题描述】:

我有一个场景需要在表头 &lt;th&gt; 元素中进行复杂布局。我想通过使&lt;th&gt; 元素成为弹性容器来解决这个问题。

但是,如果我从这个最小的例子开始

并将&lt;th&gt;元素更改为display: inline-flex,表格变为:

即,标题的列宽不再与&lt;td&gt; 元素的列宽匹配。

如何在不影响列渲染的情况下在标题中使用 flexbox?

编辑以阐明用例:我的&lt;th&gt; 元素最终将包含多个元素,左+右对齐(类似于this question)。此外,我希望能够控制拉伸行为(这就是为什么 flexbox 而不仅仅是浮动)。


例如jsfiddle:

<table>
  <thead>
    <tr>
      <th class="column-header">A</th>
      <th class="column-header">B</th>
      <th class="column-header">C</th>
    </tr>
  </thead>
  <tbody>
    <tr>
      <td>Something</td>
      <td>Something</td>
      <td>Something</td>
    </tr>
  </tbody>
</table>
table, th, td {
  border: 1px solid #000;
}

.column-header {
  display: inline-flex;
}

【问题讨论】:

  • 你能在th 中使用一个包含display: flex 的包装元素吗?
  • @insertusernamehere 我宁愿避免使用包装器,但如果这是唯一的解决方案,那也很好。
  • 这是您要找的吗? - jsfiddle.net/mjyzs4o2 - 我也不确定为什么要在表格中使用 display flex,因为使用 div 会更好
  • @Andrew 不,这不是我要找的。我不想让&lt;tr&gt; 成为弹性,而是让&lt;th&gt;。在我的用例中,我需要对齐每个 &lt;th&gt; 中的各种内容、多个左对齐的文本元素、右对齐的符号,其中一些应该拉伸等等。
  • @bluenote10 你可以把你的&lt;td&gt; 也写成display:inline-flex 然后添加一个min-witdh

标签: html css flexbox


【解决方案1】:

我的元素最终将包含多个元素,左+右对齐。此外,我希望能够控制拉伸行为(这就是为什么 flexbox 而不仅仅是浮动)。

在这种情况下,您需要在每个 th 中使用 div 并调整

table,
th,
td {
  border: 1px solid #000;
}

.column-header div {
  display: flex;
  justify-content: space-between;
}
<table>
  <thead>
    <tr>
      <th class="column-header">
        <div><span>A</span><span>A</span></div>
      </th>
      <th class="column-header">
        <div><span>B</span><span>B</span></div>
      </th>
      <th class="column-header">
        <div><span>C</span><span>C</span></div>
      </th>
    </tr>
  </thead>
  <tbody>
    <tr>
      <td>Something</td>
      <td>Something</td>
      <td>Something</td>
    </tr>
  </tbody>
</table>

【讨论】:

  • 想知道为什么需要这样做会很有趣,有没有规定什么可以和什么不能是弹性的?
  • 在表格中,是的。你基本上打破了布局算法。 div 在语义上是空的,因此它可以用作包装器,但实际上没有任何意义。
  • 我之所以问,是因为我正在搜索官方规格,但找不到任何东西。有answers on SO 表明display: flexth 有效。
  • 这是有效的,是的,但这不是问题所在。问题是给单元格display:flex 会覆盖display:table-cell 的默认值(通过用户代理默认样式表设置)。正如 Paulie_D 所说,这是表格布局算法的重要组成部分。如果没有它,您将不得不覆盖父 &lt;tr&gt; 元素上的 display 属性,并在 thead 的兄弟 tbody 元素上设置 display:table而且您很可能需要在每列的单元格上设置明确的宽度。
猜你喜欢
  • 1970-01-01
  • 2020-06-28
  • 1970-01-01
  • 2011-12-10
  • 1970-01-01
  • 2017-12-18
  • 2021-08-07
  • 2020-09-09
  • 2016-11-30
相关资源
最近更新 更多