css - 最小宽度不适用于嵌套 Flexbox

标签 css flexbox

此代码具有最小宽度工作。

.list-header {
  display: flex;
  width: 150px;
  height: 80px;
  background-color: #ececec;
}

.list-component {
  display: flex;
  flex: 1;
  padding-left: 24px;
  padding-right: 24px;
  min-width: 0;
}

.header-container {
  display: flex;
  flex: 1;
  min-width: 0;
}

.header-text {
  display: flex;
  flex-direction: column;
  justify-content: center;
  min-width: 0;
}

span {
  text-overflow: ellipsis;
  white-space: nowrap;
  overflow: hidden;
}
<div class="list-header">
  <div class="list-component">
    <div class="header-container">
      <div class="header-text">
        <span>long long long long long long text</span>
      </div>
    </div>
  </div>
</div>

但是,如果将 align-items: flex-start; 设置为 .header-text,则 min-width 将不起作用。这是代码。

.list-header {
  display: flex;
  width: 150px;
  height: 80px;
  background-color: #ececec;
}

.list-component {
  display: flex;
  flex: 1;
  padding-left: 24px;
  padding-right: 24px;
  min-width: 0;
}

.header-container {
  display: flex;
  flex: 1;
  min-width: 0;
}

.header-text {
  display: flex;
  flex-direction: column;
  justify-content: center;
  align-items: flex-start; /* ADD THIS!! */
  min-width: 0;
}

span {
  text-overflow: ellipsis;
  white-space: nowrap;
  overflow: hidden;
}
<div class="list-header">
  <div class="list-component">
    <div class="header-container">
      <div class="header-text">
        <span>long long long long long long text</span>
      </div>
    </div>
  </div>
</div>

我认为flex-direction有效果,并将min-width: 0;更改为min-height: 0;,但是但没有成功。

另外,我阅读了它的规范,但我无能为力。

我还是第一次见到这种现象。 为什么会出现这种情况?有解决办法吗?

谢谢。

最佳答案

问题并不像您想象的那样与 min-width 相关,因为如果添加边框,您将看到所有元素都没有溢出(由于 min-width:0) 并且只有最后一个跨度溢出

.list-header {
  display: flex;
  width: 150px;
  height: 80px;
  background-color: #ececec;
  border:2px solid red;
}

.list-component {
  display: flex;
  flex: 1;
  padding-left: 24px;
  padding-right: 24px;
  min-width: 0;
  border:2px solid blue;
}

.header-container {
  display: flex;
  flex: 1;
  min-width: 0;
  border:2px solid green;
}

.header-text {
  display: flex;
  flex-direction: column;
  justify-content: center;
  align-items:flex-start;
  min-width: 0;
  border:2px solid yellow;
}

span {
  text-overflow: ellipsis;
  white-space: nowrap;
  overflow: hidden;
  border:2px solid;
}
<div class="list-header">
  <div class="list-component">
    <div class="header-container">
      <div class="header-text">
        <span>long long long long long long text</span>
      </div>
    </div>
  </div>
</div>

因此我们可以简化您的问题,如下所示:

.header-text {
  display: flex;
  flex-direction: column;
  justify-content: center;
  align-items: flex-start;
  min-width: 0;
  border: 2px solid yellow;
  width: 150px;
}

span {
  text-overflow: ellipsis;
  white-space: nowrap;
  overflow: hidden;
  border: 2px solid;
}
<div class="header-text">
  <span>long long long long long long text</span>
</div>

为什么align-items会破坏你的代码?很简单,因为初始值为 stretch ,这意味着您的 span 的宽度将被拉伸(stretch)以适合 Flex 容器的宽度(就像执行 width:100% 一样)。通过更改对齐方式,您将不再具有此功能,并且会产生溢出。

要解决此问题,您只需使用 width:100% 即可。主要思想是拥有一个属性,该属性将强制宽度为父元素的全宽度,以便限制元素的宽度,从而省略号将起作用:

.header-text {
  display: flex;
  flex-direction: column;
  justify-content: center;
  align-items: flex-start;
  min-width: 0;
  border: 2px solid yellow;
  width: 150px;
}

span {
  text-overflow: ellipsis;
  white-space: nowrap;
  overflow: hidden;
  border: 2px solid;
  width:100%;
}
<div class="header-text">
  <span>long long long long long long text</span>
</div>

以及您的初始代码:

.list-header {
  display: flex;
  width: 150px;
  height: 80px;
  background-color: #ececec;
  border:2px solid red;
}

.list-component {
  display: flex;
  flex: 1;
  padding-left: 24px;
  padding-right: 24px;
  min-width: 0;
  border:2px solid blue;
}

.header-container {
  display: flex;
  flex: 1;
  min-width: 0;
  border:2px solid green;
}

.header-text {
  display: flex;
  flex-direction: column;
  justify-content: center;
  align-items:flex-start;
  min-width: 0;
  border:2px solid yellow;
}

span {
  text-overflow: ellipsis;
  white-space: nowrap;
  overflow: hidden;
  border:2px solid;
  width:100%;
}
<div class="list-header">
  <div class="list-component">
    <div class="header-container">
      <div class="header-text">
        <span>long long long long long long text</span>
      </div>
    </div>
  </div>
</div>

关于css - 最小宽度不适用于嵌套 Flexbox,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53476420/

相关文章:

CSS Holy Grail(液体主要,固定权利),添加的 DIV 不扩展少量内容?

javascript - 在开发阶段,应用程序在 Tablet rotate 上崩溃

css - 如何使用@media 查询在 rails 中添加照片作为 div 的背景?

html - 屏幕上的大灰框

html - 对齐 flexbox 内容器底部的元素

html - 使用 flexbox 和伪元素构建 line-through 样式

html - 如何在内联 block 元素之间添加相等的空间?

css - 当引用 https 服务器上的 css 文件时,Angular 获取 CORS No Access-Control-Allow Origin

html - 当容器具有动态高度时设置 flex 元素的百分比高度

html - 响应式设计中的复杂 flex 菜单