CSS Flexbox 暗坑:align-items 在 column 下变成水平居中
本文最后更新于 2026年8月23日 晚上
现象
移动端视口下,卡片标题”分类分布”和”上游来源分布”始终显示为水平居中。但 CSS 里明明写了 text-align: left 和 justify-content: flex-start,桌面端也是左对齐。只有移动端居中。
根因
这是一个典型的 Flexbox 暗坑——align-items 的作用方向取决于 flex-direction。
1 | |
1 | |
关键理解:flex-direction 切换时,两个属性控制的方向也跟着互换。
flex-direction |
justify-content 控制 |
align-items 控制 |
|---|---|---|
row (默认) |
水平方向 | 垂直方向 |
column |
垂直方向 | 水平方向 |
当 flex-direction: column 时,align-items: center 不再垂直居中,而是水平居中。这就是标题始终居中的根本原因。
修复
1 | |
教训
- Flexbox 的
align-items和justify-content方向相关,不能只看名字理解。 - 切换
flex-direction时,必须重新检查所有 flex 对齐属性。 flex-direction改变时,align-items和justify-content都显式重写,不依赖继承。- 调试时不要只看
text-align——元素在 flex 容器内时,text-align可能被align-items覆盖。
检测方法
用 Playwright 获取精确的 bounding box 可以快速定位这类问题:
1 | |
centerOffset ≈ 0→ 居中centerOffset < 0→ 偏左(左对齐正常)centerOffset > 0→ 偏右(右对齐正常)
参考文献
CSS Flexbox 暗坑:align-items 在 column 下变成水平居中
https://normdist.com/2026/07/25/ND-20260725-002-css-flexbox-align-items-pitfall/