根本原因不是类没生效,而是父容器未启用Flex布局或子元素被其他CSS规则覆盖;Bootstrap的.col等默认启用Flex,但普通div需加d-flex才生效,且flex-shrink:0须配合flex-basis、min-width等属性协同控制。
为什么加了 flex-shrink: 0 还是被压缩
根本原因不是类没生效,而是父容器没进 flex 布局,或子元素被其他规则覆盖。bootstrap 的 因为 这是预期行为,不是 bug。禁用收缩后,系统不再尝试压缩该元素腾空间,小屏下就容易突破容器边界。
事情说清了就结束。最常被忽略的一点是:flex-shrink: 0 只解决“收缩”,不解决“拉伸”“溢出”“换行”——每个问题得用对应机制单独控制。.col、.navbar-nav 等默认启用 flex,但普通 d-flex 就只是块级流——此时 flex-shrink: 0 完全不解析。
display 父级确实是 flex 或 inline-flex
width、min-width 或 flex 简写覆盖:比如写了 flex: 1 后再加 flex-shrink: 0,后者会被忽略.flex-shrink-0 工具类,直接加在子元素上即可,不用写内联样式
flex: none 和 flex-shrink: 0 选哪个flex: none 更稳妥,它等价于 flex: 0 0 auto,同时禁用放大、收缩、并保留自然尺寸;而单独设 flex-shrink: 0 只停收缩,仍可能被 flex-grow 拉宽或受 flex-basis 干扰。
flex: none
flex: none(不支持),得回退到 -ms-flex: 0 0 auto
flex: 0 0 0 是危险写法:强制基线为 0,文字或图片可能塌缩不可见图片、按钮这类替换元素为啥还是被压扁
flex-shrink: 0 只管主轴收缩,不管交叉轴拉伸。图片默认 object-fit: fill,且父容器 align-items: stretch 会强行撑高——这不是收缩问题,是渲染行为没控住。
object-fit: cover(或 contain)、显式 height(如 height: 100px)、flex-shrink: 0
.img-fluid 自带 height: auto,会和 object-fit 冲突,需显式覆盖 height
.card > .d-flex > img),flex-shrink: 0 必须加在直接父级为 flex 的那个 img 上响应式下设了
flex-shrink: 0 却横向溢出
min-width: 0 可缓解部分文本溢出(尤其长单词无换行)overflow-wrap: break-word 比依赖 flex 收缩更可靠flex-shrink: 0,主内容设 flex-grow: 1 且保留默认 flex-shrink: 1











