用标签实现深色模式配图自动切换,需暗色图置于浅色图之前并写全media值,配合必需的`fallback;路径、srcset和src须合法有效;旧环境降级至浅色图,可加no-preference兜底;响应式增强时prefers-color-scheme`与尺寸条件正交使用。

用 `
基础结构:按顺序声明暗色优先的 source
深色图的 `
-
暗色图放前面:
<source media="(prefers-color-scheme: dark)" srcset="figure-dark.webp"></source> -
浅色图放后面:
<source media="(prefers-color-scheme: light)" srcset="figure-light.webp"></source> -
必需的 fallback:
<img src="figure-light.webp" alt="示意图描述">—— 不参与媒体查询,但决定可访问性和降级表现
路径与格式必须严格正确
静默失效最常见于细节出错,不是功能本身有问题:
- 检查所有 `srcset` 中的图片路径是否真实存在,尤其注意相对路径在子页面中是否仍有效
- 每个 `
` 都要有合法 `srcset`(不能为空或只写空格),否则该 ` ` 会被整个跳过 - 不要省略 `
` 的 `src`;它不能是占位符或空字符串,应指向一个可用的默认图(通常为浅色版)
兼容旧环境的稳妥写法
部分旧版 Safari 或 WebView 不支持 `prefers-color-scheme`,此时会直接忽略所有 ``。因此:
- 把最通用、最安全的图像(通常是浅色版)设为 `
` 的值
- 可选添加未指定主题的兜底:
<source media="(prefers-color-scheme: no-preference)" srcset="figure-light.webp"></source>,行为通常与 `light` 一致 - 无需引入 polyfill 或 JS 补救——这是设计上的优雅降级
配合响应式增强(可选)
如果配图还需适配不同屏幕尺寸或像素密度,可在每个 `
- 例如:
<source media="(prefers-color-scheme: dark) and (min-width: 768px)" srcset="fig-dark-800w.webp 800w, fig-dark-1200w.webp 1200w" sizes="90vw"></source> - 注意:`media` 里不能混用 `prefers-color-scheme` 和 `min-width` 以外的复杂条件,避免部分浏览器解析失败
- `
` 的 `srcset` 和 `sizes` 依然有效,用于兜底场景下的 DPR 适配
前端入门到VUE实战笔记:立即使用
在学习笔记中,你将探索 前端 的入门与实战技巧!











