我有 4 个 flexbox 列,一切正常,但是当我在列中添加一些文本并将其设置为大字体大小时,由于 flex 属性,它使列宽于应有的宽度。
我尝试使用 word-break: break-word
并且它有所帮助,但是当我将列调整为非常小的宽度时,文本中的字母被分成多行(每行一个字母),但列没有宽度小于一个字母大小。
观看此 视频(一开始,第一列是最小的,但是当我调整窗口大小时,它是最宽的列。我只想始终遵守 flex 设置;flex 大小为 1 : 3 : 4 : 4)
我知道,将字体大小和列填充设置为更小会有所帮助……但是还有其他解决方案吗?
我不能使用 overflow-x: hidden
。
.container {
display: flex;
width: 100%
}
.col {
min-height: 200px;
padding: 30px;
word-break: break-word
}
.col1 {
flex: 1;
background: orange;
font-size: 80px
}
.col2 {
flex: 3;
background: yellow
}
.col3 {
flex: 4;
background: skyblue
}
.col4 {
flex: 4;
background: red
}
<div class="container">
<div class="col col1">Lorem ipsum dolor</div>
<div class="col col2">Lorem ipsum dolor</div>
<div class="col col3">Lorem ipsum dolor</div>
<div class="col col4">Lorem ipsum dolor</div>
</div>
原文由 tomas657 发布,翻译遵循 CC BY-SA 4.0 许可协议
弹性项目的自动最小尺寸
您遇到了 flexbox 默认设置。
弹性项目不能小于其内容沿主轴的大小。
默认值为…
min-width: auto
min-height: auto
…分别用于行方向和列方向的弹性项目。
您可以通过将弹性项目设置为:
min-width: 0
min-height: 0
overflow: hidden
(或任何其他值,除了visible
)弹性盒规范
关于
auto
值…换句话说:
min-width: auto
和min-height: auto
默认值仅适用于overflow
是visible
。overflow
值不是visible
,则 min-size 属性的值是0
。overflow: hidden
可以替代min-width: 0
和min-height: 0
。和…
min-height: auto
。您已经应用了 min-width: 0 并且项目仍然没有缩小?
嵌套的 Flex 容器
如果您在 HTML 结构的多个级别上处理弹性项目,则可能需要在更高级别的项目上覆盖默认的
min-width: auto
/min-height: auto
。基本上,具有
min-width: auto
的更高级别的弹性项目可以防止在下面嵌套的项目上收缩min-width: 0
。例子:
浏览器渲染说明
至少从 2017 年开始,Chrome 似乎要么 (1) 恢复到
min-width: 0
/min-height: 0
默认值,或者 (2) 自动应用0
默认值在某些情况下基于神秘算法。 (这可能是他们所谓的 干预。)因此,许多人看到他们的布局(尤其是所需的滚动条)在 Chrome 中按预期工作,但在 Firefox / Edge 中却没有。此处更详细地介绍了此问题: flex-shrink discrepancy between Firefox and Chrome如规范中所述,
min-width
和min-height
属性的auto
值是“新的”。这意味着某些浏览器可能仍会默认呈现0
值,因为它们在值更新之前实现了 flex 布局,并且因为0
是 ---min-width
的初始值---
和min-height
在 CSS 2.1 中。 一种这样的浏览器是 IE11。 其他浏览器已更新至 flexbox 规范 中定义的更新的auto
值。修改后的演示
jsFiddle