github是如何根据系统主题自动切换css
前言
最近发现 github
能够根据系统的主题来自动调整整个站点的样式,很神奇
决定查查看到底是如何实现的
正文
使用的电脑环境为 windows11
以及最新的 chrome
, 版本如下
首先我们先要看看 github
实现的效果是怎么样的
在windows11 中的个性化 - 颜色中,我们先切换到浅色模式,如下图
然后我们打开 github
,发现和平常基本没区别
然后我们切换到深色模式
此时可以发现,背景已经变成深灰色了,任务栏,右键菜单也统统成为了深灰色
右键菜单如下
任务栏如下
这时我们返回到刚才浏览器打开的那个 github
页面,发现已经变成深色模式了
一个字形容,神奇!
那究竟是怎么实现的呢
没错,使用到的就是 css
的媒体查询
在媒体查询中,有一个查询属性为 prefers-color-scheme
,它的值为 light
或者 dark
,表明用户倾向于选择亮色还是暗色的配色方案
通过编写相关的代码,我们可以在相关场景下使用不同的样式
这里我们写个小 demo (使用 Vue3)
1 | <template> |
可以发现,这个时候使用的是 light
的样式
然后我们把系统切换到深色模式
这个时候就是应用 dark
的样式了
在 github
中,使用 css
变量定义了两套 css
规则,来适配 light
和 dark
模式
dark
模式对应 css
样式(部分)
light
模式对应 css
样式(部分)
由于我这里系统开的是深色模式,所以浅色模式的样式就被覆盖了
而且从上面可以看出, github
使用了浅色模式的样式作为其默认的样式,通过 :root
这个选择器就可以看出来
从上面两个还可以看出,这里使用了 css
的属性选择器
[data-color-mode=auto]
, [data-dark-theme*=dark]
, [data-dark-theme*=light]
就设置在 html
标签上面
后记
媒体属性说实话用的确实少,能用到的地方大多是适配响应式布局
对其他属性了解很少
在 MDN 中,很好地为我们列出来所有的媒体查询属性
不过看起来似乎都不是很常用…