用 order 属性配合媒体查询可灵活调整 flex 项目视觉顺序,无需改动 HTML;需注意仅影响显示顺序,不影响 DOM 结构与可访问性流,建议保持 HTML 语义化顺序并慎用 aria-order 或 tabindex。
用 order 属性配合媒体查询,就能在不同屏幕尺寸下灵活调整 flex 项目显示顺序,无需改动 HTML 结构。
每个 flex 项目默认 order: 0。你可以给元素显式设置 order 值(整数,越小越靠前),然后在媒体查询中重新分配。
@media (min-width: 768px) 等断点里,重设 order 实现桌面端布局切换比如移动端希望「内容」在「侧边栏」前面,桌面端希望侧边栏在左、内容在右:
.container { display: flex; }
.sidebar { order: 2; }
.content { order: 1; }
@media (min-width: 768px) {
.sidebar { order: 1; }
.content { order: 2; }
}
这样 HTML 里 .content 写在 .sidebar 前面也没关系,视觉顺序由 CSS 控制。
order 只对同一级 flex 子项生效,且仅影响视觉顺序,不影响 DOM 结构和可访问性流(如 tab 键顺序、屏幕阅读器读取顺序)。如果需要兼顾可访问性:
order 把关键操作按钮或表单控件“藏”到很后面aria-order 或 tabindex 辅助(但非标准属性,慎用)多个断点频繁改 order 时,可用自定义属性统一管理:
.card { order: var(--card-order, 0); }
.card--featured { --card-order: -1; }
@media (max-width: 600px) {
.card--featured { --card-order: 0; }
.card--secondary { --card-order: 1; }
}
这样只需改变量值,不用重复写选择器,也更易读。