搜索

首页  >  问答  >  正文

使用空白的表格列内的 Flexbox:nowrap

Flexbox 容器内的空白 nowrap 文本溢出了页面。

我似乎在 CSS 布局中遇到了一个奇怪的边缘情况。

我有一个表格,在一列中我有一个包含两列的弹性容器。第一列包含一个选择,第二个文本需要保留在一行中,如果太长则以省略号结尾(文本是动态的)

需要明确的是,我无法控制表格 html。只有在列内,我才能添加 HTML。

弹性盒内的文本溢出似乎是一个常见问题,但其所有正常解决方案在我的情况下都不起作用。我尝试过的:

这就是我在许多不同的 stackoverflow 文章中找到的所有解决方案,但对我来说,没有任何效果。如果弹性容器位于表格之外,那么一切都可以正常工作,但同样,这对我来说不是一个选择。

这将清楚地表明我的意思:

.container {
    display: flex;
    min-width: 0;
    width: 100%;
    column-gap: 3rem;
}

.text {
  white-space: nowrap;
  overflow: hidden;
  text-overflow: ellipsis;
}
<!-- Works perfectly (just a test)-->
<b>This is what i need:</b>
<div class='container'>
  <div class='child select'>
    <select>
      <option>Option 1 is a long option</option>
      <option>Option 2 is shorter</option>
    </select>
  </div>
  <div class='child text'>
    Lorem ipsum dolor sit amet, consetetur sadipscing elitr, sed diam nonumy eirmod tempor invidunt ut labore et dolore magna aliquyam erat, sed diam voluptua.
  </div>
</div>
<br><br>

<!-- Overflows page (this needs to actually work) -->
<b>This is where it needs to work (inside table):</b>
<table>
  <tbody>
    <tr>
      <th scope="row">
        <label for="select-id">Description field</label>
      </th>
      <td>
        <div class='container'>
          <div class='child select'>
            <select id='select-id'>
              <option>Option 1 is a long option</option>
              <option>Option 2 is shorter</option>
            </select>
          </div>
          <div class='child text'>
            Lorem ipsum dolor sit amet, consetetur sadipscing elitr, sed diam nonumy eirmod tempor invidunt ut labore et dolore magna aliquyam erat, sed diam voluptua.
          </div>
        </div>
      </td>
    </tr>
  </tbody>
</table>

我同意该解决方案仅适用于最新的浏览器,或者即使需要特定的浏览器。

P粉217784586P粉217784586244 天前406

全部回复(2)我来回复

  • P粉908643611

    P粉9086436112024-03-29 19:35:29

    您可以通过使用 vw 单元将宽度分配给 .text 来解决此问题。

    例如,当我简单地将 width: 50vw; 添加到 .text 时会发生这种情况

    .container {
        display: flex;
        min-width: 0;
        width: 100%;
        column-gap: 3rem;
    }
    
    .text {
      white-space: nowrap;
      overflow: hidden;
      text-overflow: ellipsis;
      width: 50vw;
    }
    
    This is what i need:
    
    Lorem ipsum dolor sit amet, consetetur sadipscing elitr, sed diam nonumy eirmod tempor invidunt ut labore et dolore magna aliquyam erat, sed diam voluptua.


    This is where it needs to work (inside table):
    Lorem ipsum dolor sit amet, consetetur sadipscing elitr, sed diam nonumy eirmod tempor invidunt ut labore et dolore magna aliquyam erat, sed diam voluptua.

    回复
    0
  • P粉715274052

    P粉7152740522024-03-29 13:28:28

    默认情况下,表格宽度将根据其内容进行调整。您必须使用 table-layout 更新算法:fixed ; 并添加 width: 100%; 来限制其宽度:

    .container {
      display: flex;
      min-width: 0;
      width: 100%;
      column-gap: 3rem;
    }
    
    table {
      table-layout: fixed;
      width: 100%;
    }
    
    .text {
      white-space: nowrap;
      overflow: hidden;
      text-overflow: ellipsis;
    }
    
    This is what i need:
    
    Lorem ipsum dolor sit amet, consetetur sadipscing elitr, sed diam nonumy eirmod tempor invidunt ut labore et dolore magna aliquyam erat, sed diam voluptua.


    This is where it needs to work (inside table):
    Lorem ipsum dolor sit amet, consetetur sadipscing elitr, sed diam nonumy eirmod tempor invidunt ut labore et dolore magna aliquyam erat, sed diam voluptua.

    回复
    0
  • 取消回复