SSF0SSF0
首页
前端
  • Node
  • Go
  • C#
  • MySql
  • Bash
  • Git
  • Docker
  • VuePress
  • CI/CD
  • 服务器
  • 网站
  • 学习资料
  • 软件
Timeline
Github
标签
分类
首页
前端
  • Node
  • Go
  • C#
  • MySql
  • Bash
  • Git
  • Docker
  • VuePress
  • CI/CD
  • 服务器
  • 网站
  • 学习资料
  • 软件
Timeline
Github
标签
分类
  • HTML

    • html1
    • html2
  • CSS

    • Flex 布局常见问题与解决方案
  • JavaScript

    • 数据类型及引用问题
    • 处理 Blob 类型文件下载问题总结
    • localStorage 与 sessionStorage 区别
    • JavaScript 中的 script 标签问题详解
    • JavaScript 中的`this`指向问题详解
    • SessionStorage踩坑记录:它真的能"只设置一次"吗?
    • 动态加载 JS 脚本方法对比
    • 浏览器页面关闭场景下的数据上报
  • es6

    • Promise
    • es6 模块导出方式全解析
  • Vue2

    • created VS mounted 发起异步请求
    • vue2-2
  • Vue3

    • Vite + Vue3 修改 element-plus 源码
    • Vue v-if 与 v-show
    • Vue3 ref 获取组件
    • Vue3 路由传参
    • 父子组件与组件里 Hooks 加载顺序
    • 第三方组件传入参数TS提示
    • Vue3 Props 在 Hooks 中的响应性处理
    • Vue Router 的两种历史模式及部署配置详解
    • 在Vue 3项目中顺利集成Tailwind CSS的完整指南
    • Vue 3 深度选择器:deep()完全指南
  • Electron

    • 快速构建 electron + vue3 项目
  • TS

    • TS 泛型
    • 记录模板使用断言的问题
    • type 与 interface
  • WebPack

    • Webpack 介绍
  • Vite

    • Vite CLI 常见命令
    • vite 与 webpack 比较
  • 项目工程

    • 前端代码风格
    • Vue3 项目规范
    • npm 镜像问题
    • 包管理工具
    • 使用 engines 限制开发环境依赖
    • 打包与shell交互指定模式
    • 使用 pnpm 构建 Monorepo 实战指南
    • pnpm 修改依赖源码打包报错
  • 记录一下小程序
  • 控制浏览器正确保存网站账号密码的技巧

Flex 布局常见问题与解决方案

一、内容溢出问题

使用 flex 布局时,内容可能会超出预期宽度,导致子元素宽度不一致。

解决方案

方案一:直接在弹性容器设置

方案二:在溢出元素处设置

在.content 设置 flex:1,但是忘记设置 width:0的情况 需要在指定超出的地方设置 width:0。

注意

方法 2 是因为在.content 设置 flex:1,但是忘记设置 width:0,导致.content 的宽度没有被限制,所以内容超出宽度,导致宽度不一致。

二、flex:1 与 width:0 的配合使用

.box {
  flex: 1;
  width: 0;
}

原理解释

  • flex: 1: 元素将占据剩余空间

  • width: 0: 强制初始宽度为 0,确保内容被限制在分配的空间内

为什么需要 width:0?

  • 不设置时:元素会保持其内容的自然宽度

  • 设置后:元素完全受 flex 属性控制,确保均匀分布

flex-shrink: 0;

基本概念

flex-shrink 控制 flex 元素在空间不足时的收缩行为:

  • flex-shrink: 0 - 禁止收缩

  • flex-shrink: 1 - 默认值,允许收缩

  • 数值越大收缩程度越大

不设置 flex-shrink: 0; 的问题

  • 当 content 超出适应 width 的时候就会往.sidebar 挤,导致.sidebar 的 width 到不了 200px。

实际应用场景

  1. 固定宽度的侧边栏
.container {
  display: flex;
}

.sidebar {
  width: 200px;
  flex-shrink: 0; /* 侧边栏宽度固定,不会被压缩 */
}

.main-content {
  flex: 1; /* 主内容区域自适应 */
}
  1. 图片尺寸保持
.gallery {
  display: flex;
  overflow-x: auto;
}

.gallery img {
  width: 150px;
  height: 150px;
  flex-shrink: 0; /* 图片尺寸保持不变,允许水平滚动 */
  margin-right: 10px;
}
  1. 导航栏菜单项
.nav {
  display: flex;
}

.nav-item {
  padding: 0 20px;
  flex-shrink: 0; /* 确保菜单项文字不会被压缩 */
  white-space: nowrap;
}

.nav-spacer {
  flex: 1; /* 占据剩余空间 */
}

注意事项

  • 当设置 flex-shrink: 0 时,元素可能会溢出容器,需要考虑添加 overflow 处理

  • 搭配 min-width 使用可以设置最小宽度限制

  • 在响应式布局中要谨慎使用,可能会影响移动端展示效果

最后更新时间:
贡献者: 何风顺