css - css flexBox 中的文本溢出只需添加宽度 :0, 即可解决,但为什么呢?

标签 css flexbox

.textEllipsis{
  overflow: hidden;
  text-overflow: ellipsis;
  white-space:nowrap;
}

.wrapper{
  display: flex;
  width: 500px;
  padding: 10px;
  background: green;
}

.wrapper .main,.sub{
  padding: 10px;
}

.wrapper .main{
    flex: 1;
    background: red;
}

.wrapper .main.widthConfig{
  width: 0;
}

.wrapper .sub{
  width: 100px;
  flex-shrink: 0;
  background: blue;
  color: #fff;
}
<h3>right behavior</h3>
<div class="wrapper">
  <div class="main widthConfig">
    <div class="inner textEllipsis">
adfadfafasfafasdfasdfasdfasfafasdfasdfasdfasfafasdfasdfasdfasfafasdfasdfasdfasfafasdfasdfasdfasf
    </div>
  </div>
  <div class="sub">
    aaaaaaaaaaa
  </div>
</div>
<h3>remove width: 0 get wrong behavior</h3>

<div class="wrapper">
  <div class="main">
    <div class="inner textEllipsis">
adfadfafasfafasdfasdfasdfasfafasdfasdfasdfasfafasdfasdfasdfasfafasdfasdfasdfasfafasdfasdfasdfasf
    </div>
  </div>
  <div class="sub">
    aaaaaaaaaaa
  </div>
</div>

在代码片段中,我使用 .wrapper 创建了一个 flexBox 布局元素。 我添加flex:1.main元素,添加固定宽度,如 width: 100px到子元素。 在 .main 的子元素中元素我添加一些长文本然后 .main 的宽度元素失控。

但是当我添加width: 0时到.main元素一切都向右转。 谁能告诉我为什么吗?

最佳答案

在 Flex 子项上设置 min-width: 0;

或者将 min-width 设置为某个实际值。
如果没有这个,包含其他文本元素的 Flex 子元素将不会缩小到超过这些文本元素的“隐含宽度”。

根据草案规范,当 flex 容器缩小时,上述文本不应完全折叠。因为字幕的宽度为 100%,所以 flex-box 进行的 min-width: auto 计算表明它的容器应该比我们想要的要大。

此行为在 Chrome、Opera 和 Firefox 中是一致的。即使没有 min-width(我认为这违反了规范),Safari 也会缩小/截断。

关于css - css flexBox 中的文本溢出只需添加宽度 :0, 即可解决,但为什么呢?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/67682635/

相关文章:

html - 如何将 flexbox 元素与文本区域输入的基线对齐

css - 在 Stylus 中使用变量进行计算

css - 宽度 100% 不适用于 IE,段落在整个页面上展开

html - 用 If 替换帖子上的图片

html - 如何使用CSS的线性渐变来创建像设计一样的 Angular

CSS 导航栏未使用 Flex 向右对齐

html - 为什么 height=100% 不起作用?

html - 浏览器对 translate() 和绝对定位的解释不同

javascript - flex 元素是否有可能与它们上方的元素紧密对齐?

css - 如何使用 flexbox 实现 box-sizing 功能?