编程进阶网 编程进阶网
首页
  • 在线工具
  • JSON工具
  • 文本工具
  • 图片处理
  • 文档转化
  • 代码压缩
  • 加解密
  • 时间日期
  • 网络工具
  • 颜色设计
  • 二维码
  • 开发实用
  • 计算机原理
  • 操作系统
  • 网络协议
  • 数据库原理
  • 面向对象
  • 设计原则
  • 设计模式
  • 系统架构
  • 性能优化
  • 编程原理
  • 方案设计
  • 稳定可靠
  • 工程运维
  • 基础认知
  • 线性结构
  • 树与哈希
  • 工业级实现
  • 算法思想
  • 实战与综合
  • 算法题考核
  • C语言入门
  • C综合案例
  • C专栏博客
  • C标准集库
  • C++入门教程
  • C++综合案例
  • C++专栏博客
  • C++编程技巧
  • Java入门教程
  • Java综合案例
  • Java专栏博客
  • Go入门教程
  • Go综合案例
  • Go专栏博客
  • Go开发技巧
  • JavaScript入门
  • JavaScript高级
  • Android库解读
  • Android专栏
  • iOS ObjC入门
  • iOS Swift入门
  • iOS入门精通
  • Web之Html手册
  • Web之TypeScript
  • Web之Vue高级进阶
  • Linux之QML入门
  • Linux之QT核心库
  • Python教程
  • Shell&Bash教程
  • 工具脚本
  • 自动化脚本
  • 质量保障
  • 产品思考
  • 软实力
  • 开发流程
  • Git应用
  • 技术模版
  • 技术规范
  • Markdown
  • Mermaid
  • 开源协议
  • 关于我
  • 自我精进
  • 职场管理
  • 职场面试
  • 心情杂货
  • 友情链接

杨充

专注编程 · 终身学习者
首页
  • 在线工具
  • JSON工具
  • 文本工具
  • 图片处理
  • 文档转化
  • 代码压缩
  • 加解密
  • 时间日期
  • 网络工具
  • 颜色设计
  • 二维码
  • 开发实用
  • 计算机原理
  • 操作系统
  • 网络协议
  • 数据库原理
  • 面向对象
  • 设计原则
  • 设计模式
  • 系统架构
  • 性能优化
  • 编程原理
  • 方案设计
  • 稳定可靠
  • 工程运维
  • 基础认知
  • 线性结构
  • 树与哈希
  • 工业级实现
  • 算法思想
  • 实战与综合
  • 算法题考核
  • C语言入门
  • C综合案例
  • C专栏博客
  • C标准集库
  • C++入门教程
  • C++综合案例
  • C++专栏博客
  • C++编程技巧
  • Java入门教程
  • Java综合案例
  • Java专栏博客
  • Go入门教程
  • Go综合案例
  • Go专栏博客
  • Go开发技巧
  • JavaScript入门
  • JavaScript高级
  • Android库解读
  • Android专栏
  • iOS ObjC入门
  • iOS Swift入门
  • iOS入门精通
  • Web之Html手册
  • Web之TypeScript
  • Web之Vue高级进阶
  • Linux之QML入门
  • Linux之QT核心库
  • Python教程
  • Shell&Bash教程
  • 工具脚本
  • 自动化脚本
  • 质量保障
  • 产品思考
  • 软实力
  • 开发流程
  • Git应用
  • 技术模版
  • 技术规范
  • Markdown
  • Mermaid
  • 开源协议
  • 关于我
  • 自我精进
  • 职场管理
  • 职场面试
  • 心情杂货
  • 友情链接
  • README
  • Android提升进阶

  • iOS开发和进阶

  • Web开发和进阶

    • README
    • HTML工具手册

    • CSS样式与布局

      • CSS选择器入门
      • CSS盒模型详解
      • Flex弹性布局
        • 1. Flexbox 核心概念
        • 2. 容器属性(父元素设置)
          • 2.1 flex-direction — 主轴方向
          • 2.2 flex-wrap — 是否换行
          • 2.3 justify-content — 主轴对齐
          • 2.4 align-items — 交叉轴对齐(单行)
          • 2.5 align-content — 多行交叉轴对齐
          • 2.6 gap — 行/列间距
        • 3. 项目属性(子元素设置)
          • 3.1 flex-grow — 放大比例
          • 3.2 flex-shrink — 缩小比例
          • 3.3 flex-basis — 基础尺寸
          • 3.4 flex 三值缩写(最常用)
          • 3.5 align-self — 单独覆盖交叉轴对齐
          • 3.6 order — 排序
        • 4. Grid 布局快速上手
          • 4.1 行列定义
          • 4.2 Flexbox vs Grid 选型
        • 5. 实战:常见 Flex 布局模式
      • CSS定位与层级
      • CSS动画与过渡
      • 响应式布局实战
      • CSS渲染与优化
    • JavaScript核心

    • TypeScript入门

    • Vue高级进阶

    • Web工程化实践

  • Linux应用开发

  • IoT智能硬件开发

  • Apps
  • Web开发和进阶
  • CSS样式与布局
杨充
2026-06-23
目录

Flex弹性布局

# 03.Flex弹性布局

Flexbox + Grid 全覆盖:容器六大属性、项目六大属性、flex 三值缩写原理、Grid 行列定义与命名区域、两者选型决策树及混合布局实战。

# 1. Flexbox 核心概念

Flex 容器的两条轴线:

  主轴 (main axis) — 由 flex-direction 决定(默认水平→)
  ┌─────┬─────┬─────┐
  │item1│item2│item3│  → main axis
  └─────┴─────┴─────┘

  交叉轴 (cross axis) — 垂直于主轴
        ↓ cross axis
.container { display: flex; }  /* 块级 flex 容器 */
.container { display: inline-flex; }  /* 行内 flex 容器 */

# 2. 容器属性(父元素设置)

# 2.1 flex-direction — 主轴方向

.container { flex-direction: row; }            /* 默认:→ */
.container { flex-direction: row-reverse; }    /* ← */
.container { flex-direction: column; }         /* ↓ */
.container { flex-direction: column-reverse; } /* ↑ */

# 2.2 flex-wrap — 是否换行

.container { flex-wrap: nowrap; }        /* 默认:不换行,子项被压缩 */
.container { flex-wrap: wrap; }          /* 换行 */
.container { flex-wrap: wrap-reverse; }  /* 反向换行 */

# 2.3 justify-content — 主轴对齐

.container { justify-content: flex-start; }    /* 靠左(默认) */
.container { justify-content: flex-end; }      /* 靠右 */
.container { justify-content: center; }        /* 居中 */
.container { justify-content: space-between; } /* 两端对齐,间距均分 */
.container { justify-content: space-around; }  /* 每个子项两侧间距相等 */
.container { justify-content: space-evenly; }  /* 所有间隙相等 */
justify-content 视觉对比(4 个子项):

flex-start:     [A][B][C][D]..........
center:         .....[A][B][C][D].....
space-between:  [A]....[B]....[C]....[D]
space-around:   .[A]...[B]...[C]...[D].
space-evenly:   ..[A]..[B]..[C]..[D]..

# 2.4 align-items — 交叉轴对齐(单行)

.container { align-items: stretch; }    /* 默认:拉伸填满交叉轴高度 */
.container { align-items: flex-start; } /* 顶部对齐 */
.container { align-items: center; }     /* 居中(最常用于垂直居中) */
.container { align-items: flex-end; }   /* 底部对齐 */
.container { align-items: baseline; }   /* 文本基线对齐 */

# 2.5 align-content — 多行交叉轴对齐

仅在 flex-wrap: wrap 且有多行时生效:

.container {
  flex-wrap: wrap;
  align-content: space-between;  /* 行间距均分布 */
  align-content: center;         /* 多行整体居中 */
}

# 2.6 gap — 行/列间距

.container {
  gap: 16px;             /* 行间距 = 列间距 = 16px */
  gap: 20px 12px;        /* 行间距 20px, 列间距 12px */
  row-gap: 20px;         /* 仅行间距 */
  column-gap: 12px;      /* 仅列间距 */
}

# 3. 项目属性(子元素设置)

# 3.1 flex-grow — 放大比例

/* 默认 0:不放大 */
.item { flex-grow: 0; }

/* 所有子项 flex-grow: 1 → 平分剩余空间 */
.item { flex-grow: 1; }

/* item2 占 2 份,其他各占 1 份 → item2 是其他子项的 2 倍宽 */
.item1 { flex-grow: 1; }
.item2 { flex-grow: 2; }
.item3 { flex-grow: 1; }

# 3.2 flex-shrink — 缩小比例

/* 默认 1:空间不足时等比例缩小 */
.item { flex-shrink: 1; }

/* 设为 0:不缩小(可能溢出容器) */
.item { flex-shrink: 0; }

# 3.3 flex-basis — 基础尺寸

.item { flex-basis: 200px; }  /* 主轴方向的初始尺寸 */
.item { flex-basis: auto; }   /* 默认:使用子项自身 width/height */
.item { flex-basis: 0; }      /* 完全由 flex-grow 分配 */

# 3.4 flex 三值缩写(最常用)

/* flex: flex-grow flex-shrink flex-basis */
.item { flex: 1; }       /* = flex: 1 1 0% */
.item { flex: auto; }    /* = flex: 1 1 auto */
.item { flex: none; }    /* = flex: 0 0 auto(不伸缩) */

/* flex: 1 的实战含义:
   所有空间由子项按 flex-grow 比例分配
   等价于:
*/
.item { flex-grow: 1; flex-shrink: 1; flex-basis: 0%; }

# 3.5 align-self — 单独覆盖交叉轴对齐

.item { align-self: center; }  /* 仅当前子项居中 */

# 3.6 order — 排序

.item1 { order: 2; }   /* 默认 0,数值越小越靠前 */
.item2 { order: 1; }
/* 显示顺序:item2 → item1 */

# 4. Grid 布局快速上手

Grid 是二维布局系统,适合复杂的行列布局:

.grid {
  display: grid;
  grid-template-columns: 200px 1fr 1fr;  /* 三列:200px + 两等分 */
  grid-template-rows: auto 1fr;          /* 两行:自适应 + 剩余 */
  gap: 16px;
}

# 4.1 行列定义

/* 关键字 */
grid-template-columns: 200px 1fr 2fr;     /* fr = 比例单位 */
grid-template-columns: repeat(3, 1fr);    /* 三列等分 */
grid-template-columns: repeat(auto-fill, minmax(200px, 1fr));
/* → 自动列数,每列最小 200px,剩余空间均分 */

/* 命名区域 */
grid-template-areas:
  "header header header"
  "sidebar main   main"
  "footer footer footer";

# 4.2 Flexbox vs Grid 选型

场景 推荐 原因
一维排列(导航栏、按钮组) Flexbox 单轴控制更简洁
二维布局(页面骨架、卡片网格) Grid 行列同时控制
内容数量不确定的自适应 Flexbox 自然换行
固定行列数的布局 Grid 精确控制每一格
主轴上的对齐/间距 Flexbox justify-content/gap
交叉轴上的等高等宽 Grid 隐式行列对齐

# 5. 实战:常见 Flex 布局模式

/* ① 水平垂直居中 */
.center {
  display: flex;
  justify-content: center;
  align-items: center;
}

/* ② 左固定 + 右自适应 */
.layout {
  display: flex;
}
.sidebar { width: 250px; flex-shrink: 0; }
.main    { flex: 1; }

/* ③ 等宽卡片网格 */
.card-grid {
  display: flex;
  flex-wrap: wrap;
  gap: 16px;
}
.card {
  flex: 1 1 280px;  /* 最小 280px,空间足够时均分 */
}

/* ④ 底部 footer 粘底 */
body {
  display: flex;
  flex-direction: column;
  min-height: 100vh;
}
main { flex: 1; }   /* main 撑开剩余空间 */

/* ⑤ 导航栏两端对齐 */
nav {
  display: flex;
  justify-content: space-between;
  align-items: center;
}

下一篇:04.CSS定位与层级 — 五种 position 全解、z-index 层叠上下文、containing block。

上次更新: 2026/06/24, 10:13:05
CSS盒模型详解
CSS定位与层级

← CSS盒模型详解 CSS定位与层级→

最近更新
01
CSS选择器入门
06-23
02
CSS定位与层级
06-23
03
CSS盒模型详解
06-23
更多文章>
Theme by Vdoing | Copyright © 2019-2026 杨充 | MIT License | 鄂ICP备2024073355号-1 | 鄂ICP备2024073355号
  • 跟随系统
  • 浅色模式
  • 深色模式
  • 阅读模式