flex-shrink: 0
是 CSS Flexbox 布局中的一个关键属性,用于禁止弹性项目(flex item)在容器空间不足时被压缩。以下是详细解释和示例:
核心作用
当容器的可用空间小于所有弹性项目的总宽度(或高度)时:
- 默认行为(
flex-shrink: 1
):项目会按比例缩小以适应容器。 flex-shrink: 0
:项目会保持原始大小,拒绝被压缩,可能导致溢出或换行。
示例场景
假设容器宽度为 500px
,包含三个项目,每个项目初始宽度为 200px
:
.container {display: flex;width: 500px;
}
.item {width: 200px;
}
默认行为(flex-shrink: 1
)
所有项目会按比例缩小,总宽度适配容器:
.item {flex-shrink: 1; /* 默认值 */
}
- 每个项目实际宽度:
500px / 3 ≈ 166.67px
禁止压缩(flex-shrink: 0
)
若第二个项目设置 flex-shrink: 0
:
.item:nth-child(2) {flex-shrink: 0;
}
- 第二个项目保持
200px
,其他两个项目按比例分配剩余空间:- 剩余空间:
500px - 200px = 300px
- 其他两个项目各占
150px
(300px / 2
)
- 剩余空间:
对比其他属性
flex-grow
:控制项目在容器空间充足时的扩展行为。flex-basis
:定义项目的初始大小(类似width/height
)。- 简写属性:
flex: 0 0 auto
等价于flex-shrink: 0
+ 不扩展 + 初始大小为auto
。
典型应用场景
- 固定关键元素:如导航栏中的 Logo 或按钮,防止被压缩变形。
- 响应式布局:在移动端保持某些元素(如侧边栏)的最小宽度。
- 表单布局:确保输入框标签不因空间不足而挤压。
注意事项
- 溢出风险:若多个项目同时设置
flex-shrink: 0
,可能导致内容溢出容器。 - 换行影响:若容器启用
flex-wrap: wrap
,溢出项目会自动换行,而非压缩。
通过合理使用 flex-shrink: 0
,可以更精准地控制 Flexbox 布局的响应式行为,确保关键元素在空间不足时保持稳定。