前端进阶之旅前端进阶之旅
基础篇
进阶篇
高频篇
精选篇
手写篇
面经篇
AI 篇
原理篇
每日一题
小程序题库
知识卡片
  • 场景篇按分类整理的大前端场景考点
  • 历年面经按年份追踪真实考点
  • 算法题库NEW在线编码即时判题
  • 专项自测100 题快速查漏
  • 前端基础
    • HTTP从报文一路讲到 HTTPS
    • 浏览器渲染、事件循环、进程
    • 计算机基础Linux、网络、操作系统
  • 进阶专项
    • 设计模式23 种模式怎么用
    • 前端系统进阶学习大型项目工程化
    • 前端综合文章长期沉淀的实践文
  • 工程与工具
    • Node学习指南从环境搭建到服务端
    • NPM工作流script、依赖与发布
    • Docker容器化部署上手
    • Canvas图形与动画实战
  • 路线与导图
    • 思维导图知识点全景图
    • 学习路线按图索骥不跑偏
  • 动态
    • 公众号动态公众号历史文章
    • 博客动态站长的技术博客
    • 开发者导航常用工具与文档站
  • AI 助手随时提问,即时解析
  • AI 模拟面试模拟真实面试 + 报告
  • AI 知识地图串起全站知识点
  • AI 定制路线按你的简历现排
AI 热点
旧版
基础篇
进阶篇
高频篇
精选篇
手写篇
面经篇
AI 篇
原理篇
每日一题
小程序题库
知识卡片
  • 场景篇按分类整理的大前端场景考点
  • 历年面经按年份追踪真实考点
  • 算法题库NEW在线编码即时判题
  • 专项自测100 题快速查漏
  • 前端基础
    • HTTP从报文一路讲到 HTTPS
    • 浏览器渲染、事件循环、进程
    • 计算机基础Linux、网络、操作系统
  • 进阶专项
    • 设计模式23 种模式怎么用
    • 前端系统进阶学习大型项目工程化
    • 前端综合文章长期沉淀的实践文
  • 工程与工具
    • Node学习指南从环境搭建到服务端
    • NPM工作流script、依赖与发布
    • Docker容器化部署上手
    • Canvas图形与动画实战
  • 路线与导图
    • 思维导图知识点全景图
    • 学习路线按图索骥不跑偏
  • 动态
    • 公众号动态公众号历史文章
    • 博客动态站长的技术博客
    • 开发者导航常用工具与文档站
  • AI 助手随时提问,即时解析
  • AI 模拟面试模拟真实面试 + 报告
  • AI 知识地图串起全站知识点
  • AI 定制路线按你的简历现排
AI 热点
旧版
首页程序员面试题库flex-direction row column 主轴
CSSFlex 布局

flex-direction 的 row 和 column 有什么区别?

flex-direction: row 让子项水平排列(从左到右),column 让子项垂直排列(从上到下)。切换方向后,justify-content 和 align-items 管的方向也跟着翻转。column 下子项的宽度默认会被 stretch 拉满容器,高度由内容决定。

前端进阶之旅 · 一题精讲更新于 2026.09.29
CSS#Flex 布局#CSS Grid#Flexbox
先看核心答案读代码示例
理解线索

`row` 和 `column` 的差异

  1. 主轴方向row 主轴水平,column 主轴垂直
  2. 对齐方向justify-content 跟着主轴走,align-items 跟着交叉轴走
  3. 默认尺寸row 下子项宽度由内容决定,column 下子项宽度被 stretch 拉满

column 下 flex-basis 控制的是高度而不是宽度,width 和 height 的角色也反了。

核心回答

先记住这个答案

flex-direction: row 是默认值,子项从左到右水平排列。改成 column 后子项从上到下垂直排列。最重要的影响不只是排列方向变了,而是所有和轴相关的属性都跟着翻转了:justify-content 从管水平变成管垂直,align-items 从管垂直变成管水平。flex-basis 从控制宽度变成控制高度。

  • row 水平排列,column 垂直排列
  • 切换方向后对齐属性方向也翻转
  • column 下子项宽度默认填满
  • column 下换行变成换列

对齐属性的方向跟着翻转

row 下 justify-content: center 让子项水平居中,align-items: center 让子项垂直居中。改成 column 后完全反过来:justify-content: center 变成垂直居中,align-items: center 变成水平居中。

同样的属性在两个方向下的效果CSS
/* row:水平排列 */
.row {
  display: flex;
  flex-direction: row;
  justify-content: space-between; /* 水平等间距 */
  align-items: center;            /* 垂直居中 */
}

/* column:垂直排列 */
.col {
  display: flex;
  flex-direction: column;
  justify-content: space-between; /* 垂直等间距 */
  align-items: center;            /* 水平居中 */
}

如果你把 align-items 理解成「管垂直」就会搞混。要记住它管的是交叉轴,方向随 flex-direction 变化。

column 下子项的默认尺寸

row 下子项的宽度由内容或 flex-basis 决定,高度默认被 align-items: stretch 拉伸到行高。

column 下反过来:子项的高度由内容决定,宽度默认被 stretch 拉满容器宽度。这就是为什么 column 下的子项通常是全宽的——如果不想全宽,要给子项设 width 或者用 align-items: flex-start。

flex-basis 在 column 下控制的是高度

flex-basis 始终控制主轴方向上的初始尺寸。row 下控制宽度,column 下控制高度。同理,flex-grow 和 flex-shrink 在 column 下也是在垂直方向上伸缩。

这意味着 flex: 1 在 column 下让子项的高度按比例填满容器,不是宽度。容器要有固定高度,flex-grow 才有空间可分。

回答前,多想一步

容易答错的地方

以为只是排列方向变了
方向变了只是表象,真正的变化是整个轴系统翻转了。所有和轴相关的属性(justify-content、align-items、flex-basis、flex-wrap 的换行方向)都要重新理解。
column 下忘了给容器设高度
column 下 flex-grow 需要容器有固定高度才能分配空间。flex-wrap: wrap 也需要容器有固定高度才能触发换列。如果容器高度是 auto,它会自动撑高容纳所有子项。
试着用自己的话回答

面试官还会怎么问?

row-reverse 和 column-reverse 会影响 Tab 键的顺序吗?

不会。reverse 只改变视觉顺序,不改变 DOM 顺序和键盘导航顺序。用户按 Tab 键还是按 DOM 里的顺序走。这对无障碍访问很重要,视觉顺序和焦点顺序不一致会让用户困惑。

什么时候用 column,什么时候用普通的块级布局?

如果子项需要 flex-grow、align-items 等弹性能力(比如等高卡片、垂直居中、按比例分配高度),用 column。如果只是简单的上下排列,普通块级布局就够了,不需要 flex。

column 下怎么实现等高分栏?

给容器设固定高度和 flex-wrap: wrap,子项排不下就换列。但这不是真正的等高分栏——列高是固定的(等于容器高度),不是由内容最多的列决定的。如果要内容驱动的等高分栏,用 Grid 的 grid-template-columns 更合适。

从一道题,走向一组知识

把知识连起来

Flex 布局

flex-grow 是怎么按比例分配剩余空间的?

剩余空间总沿主轴分配,row 与 column 会改变它对应宽度还是高度。

Flex 布局

flex-grow 为 0 时子项还会增长吗?

flex-grow: 0 不参与正余量增长,无论主轴横向还是纵向。

参考资料

  • CSS:Flex 布局参考资料

示例用于理解所注明的运行环境与边界;延伸学习可结合原文中的更多案例。

本题目录
  1. 先记住这个答案
  2. 对齐属性的方向跟着翻转
  3. column 下子项的默认尺寸
  4. flex-basis 在 column 下控制的是高度
  5. 容易答错的地方
  6. 面试官还会怎么问
  7. 把知识连起来
读懂,再试着讲出来

先看核心答案,再读代码。最后展开追问,检查自己有没有遗漏边界。

试着回答追问
浏览全部面试题理解原理,也关注真实的使用场景。回到顶部 ↑