使用空白的表格列内的 Flexbox:nowrap
P粉217784586
P粉217784586 2024-03-28 22:08:37
[CSS3讨论组]

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

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

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

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

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

  • 添加最小宽度:0;弹性容器
  • 添加弹性收缩:0;带有文本的弹性框
  • 添加弹性增长:1;使用 select 来伸缩框
  • 许多较小的东西(容器宽度为 100% 等)

这就是我在许多不同的 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粉217784586
P粉217784586

全部回复(2)
P粉908643611

您可以通过使用 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.
P粉715274052

默认情况下,表格宽度将根据其内容进行调整。您必须使用 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.
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板
关于我们 免责申明 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送
PHP中文网APP
随时随地碎片化学习
PHP中文网抖音号
发现有趣的

Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号