跳到主要内容

获取系统颜色模式

长念
长念阅读约 3 分钟4 年前发布2 年前编辑

CSS

使用媒介查询 prefers-color-scheme,支持 dark lightno-preference 三种模式,会在系统切换颜色模式时自动应用样式表。

@media (prefers-color-scheme: dark) {
body {
background: #121212;
color: rgba(255, 255, 255, 0.86);
}
}

JavaScript

使用 matchMedia 方法判断是否符合媒介。
返回值为 MediaQueryList 对象,该对象具有属性 matchesmedia,方法 addListenerremoveListenermatches 布尔值,只读;mediaDOMString 类型。

注意

addListenerremoveListener 为旧版的 API,已经被废弃,不推荐使用。

判断是否支持颜色模式

// not all 表示不支持
if (window.matchMedia('(prefers-color-scheme)').media === 'not all') {
console.log("Browser doesn't support dark mode");
}

判断是否处于亮/暗色模式

if (window.matchMedia('(prefers-color-scheme: light)').matches) {
// 浅色
}

if (window.matchMedia('(prefers-color-scheme: dark)').matches) {
// 深色
}

事件监听

// 监听切换暗色模式
const handleChangeDarkMode = (event) => {
if (event.matches) {
console.log('切换到深色模式');
} else {
console.log('切换到浅色模式');
}
};

window.matchMedia('(prefers-color-scheme: dark)').addEventListener('change', handleChangeDarkMode);