防止Flexbox缩小


74

我正在使用flexbox来布局页面,因为不断增长的行为很有用。但是我想完全防止收缩行为。

无论如何要解决这个问题?

示例代码:

<div class="flex-vertical-container">
    <div class="flex-box">
         This one should grow but not shrink
    </div>
    <div></div>
    <div></div>
</div>

的CSS

.flex-vertical-container {
    display: flex;
    flex-direction: column;
}

.flex-box {
    flex: 1;
}

Answers:


129

尝试将flex-shrink属性设置0.flex-box


出于某些原因,设置flex-shrink: 0;没有用,但是手动设置:flex-shrink: 1 0 auto;很好用……
Simon Boudrias

2
flex-shrink:1 0自动; 似乎不是有效的属性。
Ashish Ranjan

8
他们可能意味着flex: 1 0 auto;
Ryan Taylor

2
在这种特定情况下,将flex-shrink属性设置为0似乎还不够。与flex-direction:column您合作时,还需要设置一个min-width值来完成此目标。
klewis

在浪费一个小时左右的时间弄清楚为什么我的卡片经常缩水...愿上帝保佑您的出色工作!
Shardul Birje

32

添加一个min-width您想要的框的最小可能值。Flexbox不会将宽度缩小到最小宽度以下。


1
min-width确实可以正常工作,但是在响应式设计中,如果宽度小于指定的宽度,则不会随空间调整。flex-shrink根本不适合我。
Ashish Ranjan

此外,Safari仍将min-width属性用于flexbox行为,从而导致IE-Safari和“其余”之间出现奇怪的跨浏览器问题。检查罐中的注意事项使用:caniuse.com/#search=flexbox

4

您可以尝试向孩子申请:

.flex-box{
    width: max-content;
}

最后结果:

.flex-vertical-container{
  display: flex;
  flex-direction: column;
}
.flex-vertical-container div{
  background: gray;
}
.flex-box{
  width: max-content;
}
<div class="flex-vertical-container">
    <div class="flex-box">
         This one should grow but not shrink
    </div>
    <div>This is shrinking</div>
    <div>This is shrinking</div>
</div>



1
除非您针对的是非常特定的浏览器,max-content否则不是一个很好的通用选择。
klewis

IE和Edge不支持。受Chrome,Safari和Firefox支持。caniuse.com/#search=max-content
埃里克·马丁霍尔丹

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.