先记住这个答案
把容器改为 writing-mode: vertical-rl,原先横排的 Flex 项可能竖着走,这不是 row 失效。row 一直沿书写模式的行内轴,column 沿块轴;在这种竖排模式中,行内轴通常从上往下,块轴从右往左。判断对齐和换行时,应先画出这两条逻辑轴,再看 flex-direction 有没有反转。
row沿行内方向- 竖排的
row通常是纵向 column沿块方向- 对齐属性仍按主轴交叉轴生效
竖排古诗中的行内方向
古诗展示想从上到下排字,每列从右向左换列。设置 writing-mode: vertical-rl 后,再用 display: flex; flex-direction: row 排卡片,卡片会沿竖直行内方向放置。若你本来想让几列卡片横向并排,反而可能要用 column。设计时先画出行内起点、块起点,再选 row 或 column,比反复试 row-reverse 更容易得到可预期结果。
.poem {
writing-mode: vertical-rl;
display: flex;
flex-direction: row; /* 主轴随行内方向变为纵向 */
gap: 1em;
}
.poem > p { margin: 0; }竖排后这组项目沿行内轴纵向排,gap 也落在该排列方向上。
书写模式改变 Flex 的轴
writing-mode 决定文字行的行内方向和行与行推进的块方向;direction 还影响行内起止方向。Flex 的 row / row-reverse 跟行内轴对应,column / column-reverse 跟块轴对应。justify-content 始终作用于主轴,align-items 作用于交叉轴,因此竖排后它们的视觉水平或垂直效果可能与普通横排页面对调。逻辑边距属性也更适合这种布局。
做竖排排版时,最容易看错的是 justify-content 与 align-items 的作用方向。row 的主轴现在沿竖直行内方向,前者会在竖直方向分配余量;交叉轴沿横向块方向,后者才在横向起作用。若把 row 改为 column,两种对齐的物理方向也会交换。再叠加 direction: rtl 或 row-reverse 时,主轴起点又可能翻转。不要靠属性名里的 row、column 猜屏幕坐标,在开发工具中画出逻辑轴更稳。
容易答错的地方
- 把
row翻译成物理水平行 - 它沿行内轴,竖排时可以是竖直方向。
- 只改
writing-mode,却继续用物理边距推断起点 margin-left仍是物理左侧;需要跟随文本方向时应考虑margin-inline-start等逻辑属性。
面试官还会怎么问?
vertical-rl 中 column 往哪边走?
它沿块轴,在常见 vertical-rl 中块方向从右向左;反向值再交换起止。
justify-content 会变成控制竖向位置吗?
当 flex-direction: row 的主轴在竖排模式中变成纵向时,是的;它始终控制主轴。
direction: rtl 会影响什么?
它会影响行内起止方向,进而影响 row 的主轴起止;应与具体书写模式一起看。
参考资料
示例用于理解所注明的运行环境与边界;延伸学习可结合原文中的更多案例。