positional 关键字的参照系
positional 关键字看着像近义词,关键差别在起点以谁为参照。start 与 end 参照对齐容器的书写方向;self-start 与 self-end 参照对齐对象自身的书写方向;flex-start 与 flex-end 参照 flex-direction 定义的主轴方向,仅在 Flex
中有意义;left 与 right 是物理方向,不随任何书写模式变化。在 LTR 且不翻转时它们恰好重合,因而易被当成同义词。本页把书写方向与 flex-direction 掰开,让它们分道扬镳。
1 · flex-direction 翻转下的分歧
把一个 justify-content 的 Flex 容器切到 row-reverse,主轴起点跑到右边,于是 flex-start 把项推到右、flex-end 推到左;而 start 始终跟容器书写方向,LTR 下永远靠左,left 永远靠物理左。再把容器 direction 切到
rtl,start 翻到右而 left 仍在左。
flex-direction 与 direction 组合下的实际落点。可逐一切换关键字,观察每个值把项推到了哪个物理侧。
警示 · flex-start 锚定的是 flex-direction 推导出的 main-start 边,翻转方向即翻转它;start 锚定的是容器 writing-mode 与 direction 推导出的行内起点,与 flex-direction 无关。想跟着 flex 流向走用
flex-start,想跟着文字阅读方向走用 start。在非 Flex 布局里 flex-start 按 start 处理。
2 · 对象自身书写方向下的分歧
一个 LTR 的 justify-items Grid 容器里放两个对象,其自身 direction 一为 ltr、一为 rtl。取 start 时两者都靠容器起点即左侧;切到 self-start 时 LTR 对象仍靠左而 RTL 对象靠到右边,因为它参照的是自己的行内起点。left 与
right 则把两者都钉在同一物理侧。
direction 不同的两个对象在 start 与 self-start 下的落点差异。3 · 四组关键字对照
| 关键字 | 参照系 | 属于 | 翻转时跟谁走 |
|---|---|---|---|
start / end |
对齐容器的 writing-mode 加 direction |
*-content / *-items / *-self |
容器 direction |
self-start / self-end |
对齐对象自身的 writing-mode 加 direction |
*-items / *-self(单项才有「自己」) |
对象自己的 direction |
flex-start / flex-end |
flex-direction 推导的 main-start 与 cross-start |
Flex 语境,其余模式按 start / end 处理 |
flex-direction |
left / right |
物理方向 | 仅行内轴 justify-*,块轴上按 start |
谁都不跟,恒定 |
建议 · 绝大多数场景应当用流向相对的 start 与 end,它能让布局自动适配 LTR、RTL 与竖排,这正是 Box Alignment 全程用逻辑方向而非物理方向的初衷。只有必须钉死物理侧时才用 left 与 right,例如某个图标永远要在屏幕右下。flex-start
多数时候与 start 等效,只在刻意翻转 flex-direction 又想跟随翻转时才有区别。