组件库设计与开发:打造可复用的组件生态
2026/5/11 21:40:37
我的代码是148px宽度,但是实际上显示的只有133px
在 Flex 布局中,flex-shrink是flex 子元素的收缩属性,默认值是1,意思是:
.main的宽度被压缩,从164px变成了148px,我会帮你梳理这个问题的本质和最终的解决方案。我把flex-shrink: 0添加到你的.main样式中,确保宽度不会被收缩:
.main { width: 164px; /* 你期望的宽度 */ height: 100%; background: #f8fafc; display: flex; align-items: center; padding: 24px 0px; flex-direction: column; gap: 6px; flex-shrink: 0; /* 禁止flex收缩,固定宽度 */ .item { width: 132px; height: 40px; } .line { width: 108px; height: 1px; } }为了让你更好地掌握flex子元素的尺寸控制,这里简单说明flex的三个核心属性:
| 属性 | 作用 | 默认值 |
|---|---|---|
flex-grow | 子元素的放大比例 | 0(不放大) |
flex-shrink | 子元素的收缩比例 | 1(自动收缩) |
flex-basis | 子元素的初始宽度/高度 | auto(默认取元素自身尺寸) |
日常开发中,也可以用简写flex: 0 0 164px;(等价于flex-grow: 0; flex-shrink: 0; flex-basis: 164px;),直接固定子元素的宽度,更简洁。
flex-shrink: 1的默认行为,导致.main在父元素宽度不足时被收缩,宽度从164px变为148px。flex-shrink: 0;可以禁止flex子元素的收缩行为,让.main的宽度保持为你设置的164px。flex: 0 0 164px;简写形式,一次性设置放大、收缩和初始宽度,更高效。