css样式用flex 布局的时候元素尺寸展示不对

问题描述

我的代码是148px宽度,但是实际上显示的只有133px

问题根源

在 Flex 布局中,flex-shrink是flex 子元素的收缩属性,默认值是1,意思是:

  • 当父元素的宽度不足以容纳所有子元素的宽度总和时,子元素会按照flex-shrink的数值比例自动收缩,以适应父元素的宽度。
  • 你写的.main作为 flex 子元素时,因为flex-shrink: 1,父元素宽度不够的情况下,它就被收缩了 6px(164px →148px)。
    你确认了问题根源是flex-shrink的默认收缩行为 导致.main的宽度被压缩,从164px变成了148px,我会帮你梳理这个问题的本质和最终的解决方案。

二、最终修复后的完整代码

我把flex-shrink: 0添加到你的.main样式中,确保宽度不会被收缩:

scss 复制代码
.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的三个核心属性:

属性 作用 默认值
flex-grow 子元素的放大比例 0(不放大)
flex-shrink 子元素的收缩比例 1(自动收缩)
flex-basis 子元素的初始宽度/高度 auto(默认取元素自身尺寸)

日常开发中,也可以用简写flex: 0 0 164px;(等价于flex-grow: 0; flex-shrink: 0; flex-basis: 164px;),直接固定子元素的宽度,更简洁。

总结

  1. 问题根源是flex-shrink: 1的默认行为,导致.main在父元素宽度不足时被收缩,宽度从164px变为148px。
  2. 添加flex-shrink: 0;可以禁止flex子元素的收缩行为,让.main的宽度保持为你设置的164px。
  3. 也可以使用flex: 0 0 164px;简写形式,一次性设置放大、收缩和初始宽度,更高效。
相关推荐
豹哥学前端17 分钟前
事件循环(Event Loop)深度解析:让你彻底搞懂 JS 的执行顺序
前端·javascript·面试
竹林81821 分钟前
用 wagmi v2 + Next.js 14 搞 NFT 交易市场前端:从合约调用失败到顺利上架,我踩了哪些坑
javascript·next.js
前端不开发30 分钟前
用一个 Bookmarklet(书签脚本),给任意网页挂一个可拖拽悬浮窗
前端·javascript
接着奏乐接着舞1 小时前
【无标题】
开发语言·前端·javascript
biubiubiu_LYQ1 小时前
萌新小白基础篇之CSS定位布局(干货满满)!
css
Ian在掘金1 小时前
SSE 还是 WebSocket?从 AI 流式输出聊到实时通信选型
前端·人工智能
雨雨雨雨雨别下啦1 小时前
心理健康AI助手 - 项目总结
前端·javascript·vue.js·人工智能·信息可视化
PILIPALAPENG1 小时前
第4周 Day 3:多 Agent 协作——让 Agent 们"组队干活"
前端·人工智能·python