为什么弹性项目不会缩小到超过内容大小?
P粉242126786
2023-08-27 16:35:08
<p>我有 4 个 Flexbox 列,一切正常,但是当我向列中添加一些文本并将其设置为大字体大小时,由于 Flex 属性,它会使列比应有的宽度更宽。</p>
<p>我尝试使用<code>word-break:break-word</code>并且它有所帮助,但是当我将列的大小调整到非常小的宽度时,文本中的字母被分成多行(一个字母每行),但列的宽度不会小于一个字母的大小。 </p>
<p>观看此视频
(一开始,第一列是最小的,但是当我调整窗口大小时,它是最宽的列。我只想始终尊重 Flex 设置;Flex 大小 1 : 3 : 4 : 4)</p>
<p>我知道,将字体大小和列填充设置为较小会有所帮助......但是还有其他解决方案吗?</p>
<p>我无法使用<code>overflow-x:hidden</code>。</p>
<p>JSFiddle</p>
<p><br /></p>
<pre class="brush:css;toolbar:false;">.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
}</pre>
<pre class="brush:html;toolbar:false;"><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></pre>
<p><br /></p>
我发现多年来 Flex 和 grid 一直困扰着我,所以我提出以下建议:
然后如果您需要这种行为,只需使用
min-width: auto
或min-height: auto
即可。事实上,还可以加入框大小以使所有布局更加合理:
有人知道是否会产生任何奇怪的后果吗?在混合使用上述方法的几年里我还没有遇到过任何问题。事实上,我想不出任何我想要从内容向外布局到 Flex/Grid 的情况,而不是从 Flex/Grid 向内布局到内容的情况 --- 当然,如果它们存在,它们也是罕见的。所以这感觉像是一个糟糕的默认值。但也许我错过了一些东西?
Flex 项目的自动最小尺寸
您遇到了 Flexbox 默认设置。
弹性项目不能小于其内容沿主轴的尺寸。
默认值是...
最小宽度:自动
最小高度:自动
...分别用于行方向和列方向的弹性项目。
您可以通过将弹性项目设置为来覆盖这些默认值:
最小宽度:0
最小高度:0
溢出:隐藏
(或任何其他值,可见
除外)Flexbox 规范
关于
auto
值...换句话说:
min-width: auto
和min-height: auto
默认值仅在overflow
可见
时适用.overflow
值不可见
,则min-size属性的值为0
。overflow: hide
可以替代min-width: 0
和min-height: 0
。还有...
min-height: auto
。你已经应用了 min-width: 0 但项目仍然没有缩小?
嵌套 Flex 容器
如果您要处理 HTML 结构的多个级别上的 Flex 项目,则可能需要覆盖默认的
min-width: auto
/min-height: auto code> 位于更高级别的项目上。
基本上,具有
min-width: auto
的更高级别的 Flex 项目可以防止使用min-width: 0
嵌套在下面的项目收缩。示例:
浏览器渲染说明
Chrome 与 Firefox / Edge
至少自 2017 年以来,Chrome 似乎要么 (1) 恢复到
min-width: 0
/min-height: 0
默认值,或者 ( 2) 基于神秘算法在某些情况下自动应用0
默认值。 (这可能就是他们所说的干预。)因此,许多人人们看到他们的布局(尤其是所需的滚动条)在 Chrome 中按预期工作,但在 Firefox / Edge 中却不然。此处更详细地介绍了此问题:Firefox 和 Chrome 之间的 flex-shrink 差异IE11
如规范中所述,
min-width
和min-height
属性的auto
值为“新”。这意味着某些浏览器默认情况下仍可能呈现0
值,因为它们在更新该值之前实现了 Flex 布局,并且0
是min 的初始值CSS 2.1。 IE11 就是这样的浏览器。 其他浏览器已更新到较新的
flexbox 规范中定义的 auto中定义的 auto
值a>.修改后的演示