flex-direction 可通过媒体查询响应式切换(小屏column、大屏row)或JS动态增删class实现横竖布局转换,需同步调整justify-content、align-items及flex-wrap等配套属性。
用 flex-direction 切换横排(row)和竖排(column)非常直接,关键在于控制条件触发时机——比如响应式断点、用户交互或 JS 状态变化。
最常用场景是小屏竖排、大屏横排。只需在不同断点下修改 flex-direction:
.container {
display: flex;
flex-direction: column; /* 默认竖排 */
}
@media (min-width: 768px) {
.container {
flex-direction: row; / 宽屏变横排 /
}
}
配合 JS 切换一个
class,CSS 里定义两套方向规则:
.layout {
display: flex;
}
.layout--vertical {
flex-direction: column;
}
.layout--horizontal {
flex-direction: row;
}
JS 示例:
const container = document.querySelector('.layout');
container.classList.toggle('layout--vertical');
container.classList.toggle('layout--horizontal');方向变了,相关属性也要同步考虑:
justify-content 在 row 时控制左右,在 column 时控制上下,可保持语义一致(如都用 center)align-items 同理,方向切换后效果不变,通常无需改flex-wrap: wrap;竖排一般不换行,但若子项高过大,也可用 flex-wrap: wrap 配合 flex-direction: column 实现“列内折行”(较少见)display: flex —— flex-direction 不生效width 却没在竖排时重置,造成横排挤占、竖排过宽flex: 1 等弹性值时,方向切换后行为仍正确,但建议测试极端尺寸下的表现基本上就这些。核心就是把 flex-direction 当作一个可切换的样式属性,搭配合适的触发机制和配套样式,就能自然实现横竖布局自由转换。