CSS媒体查询可直接控制颜色,推荐优先使用prefers-color-scheme,结合自定义属性统一管理,避免硬编码和冗余选择器,同时兼顾辅助功能查询。
color 或 background-color 就行不需要额外工具或 JS,CSS 媒体查询本身就能控制颜色值。只要在对应断点内重写目标选择器的颜色属性,浏览器会自动按视口匹配生效。
!important 要谨慎(容易后续难维护)min-width 而非 max-width,避免“移动优先”时漏掉大屏样式#fff、rgb(255, 255, 255)、hsl(0, 0%, 100%)、甚至 var(--primary)(如果变量已定义)
@media (min-width: 768px) {
.header-title {
color: #2c3e50;
}
.btn-primary {
background-color: #3498db;
}
}
@media (prefers-color-scheme: dark) {
.text-body {
color: #e0e0e0;
}
}
prefers-color-scheme 比屏幕尺寸更值得优先考虑用户系统级深色/浅色偏好,比单纯看屏幕宽高更能反映真实阅读意图。现代项目应把它当作第一层颜色适配逻辑。
m
in-width 可以叠加使用,比如:深色模式下,桌面端用更深的背景,移动端用稍亮的灰-webkit- 前缀,但 iOS 13.4+ 和 macOS 10.15.4+ 已原生支持var())统一管理响应式颜色硬编码多处颜色值会导致改一个色要搜全项目,容易漏。把颜色抽成变量,在媒体查询里只改变量值,更安全可控。
--text-primary,别用 --color-1 这类无意义命名
:root {
--text-primary: #333;
--bg-surface: #fff;
}
@media (prefers-color-scheme: dark) {
:root {
--text-primary: #e0e0e0;
--bg-surface: #121212;
}
}
.card {
color: var(--text-primary);
background-color: var(--bg-surface);
}
一个组件在多个断点下颜色不同,不意味着每个断点都要完整重写整个选择器块。结构混乱会让维护成本陡增。
prefers-reduced-motion 和 prefers-contrast 这类辅助功能媒体查询——它们虽不直接控制颜色,但会影响颜色对比度要求,尤其在医疗、教育类网站中,跳过这步可能让部分用户根本看不清文字。