H5网页适配系统夜间主题
文章导读
现在无论是在PC端、还是手机端系统都加入了夜间主题,大多数App为了提高用户体验性,也加上了夜间主题。甚至是可以根据系统切换主题来变换自身主题,这样的反馈给用户还是挺舒适的。
那么App应用上可以跟随系统主题做自由切换,那么在网页上是不是也可以实现呢?那是肯定的,先看看在实现的效果图:看看夜间主题:好了,进入正题,要实现上述效果,我们只需要通过CSS的媒体查询prefers-color-scheme属性,用于检测用户是否有将系统的主题色设置为亮色或者暗色。
01检测系统当前主题
@media (prefers-color-scheme: dark) {
body {
background: #121212;
color: #ffffff;
}
article{
color:rgba(255,255,255,.86);
}
}
@media (prefers-color-scheme: light) {
body {
background: #fffff;
color: #000;
}
article{
color:rgba(0,0,0,.86);
}
}
dark和light指的分别是暗黑和亮模式,那么当一加载网页的时候,通过媒体查询能知道该渲染哪套主题了。
但是当手机系统切换主题后,怎么让网页也自动切换主题颜色呢?
02监听系统主题切换
可以通过注册监听器,监听prefers-color-scheme的变化。/*判断是否支持主题色*/
if (window.matchMedia('(prefers-color-scheme)').media === 'not all') {
alert('浏览器不支持主题模式')
console.log('Browser doesn\'t support dark mode');
}
/*判断是否处于深色模式*/
if(window.matchMedia('(prefers-color-scheme: dark)').matches){
console.log('深色模式', document.getElementsByTagName('html'));
document.getElementsByTagName('html')[0].style.background = '#000';
document.getElementsByTagName('html')[0].style.color = '#fff';
}
/*判断是否处于浅色模式*/
if(window.matchMedia('(prefers-color-scheme: light)').matches){
//Do some thing
console.log('浅色模式');
document.getElementsByTagName('html')[0].style.background = '#fff';
document.getElementsByTagName('html')[0].style.color = '#000';
}
/*模式切换听器*/
var listeners={
dark: function(mediaQueryList ){
if(mediaQueryList.matches){
// alert('您切换到深色模式了!')
}
},
light: function(mediaQueryList){
if(mediaQueryList.matches){
// alert('您切换到浅色模式了!')
}
}
}
window.matchMedia('(prefers-color-scheme: dark)').addListener(listeners.dark)
window.matchMedia('(prefers-color-scheme: light)').addListener(listeners.light)
网页中注册了两个监听器,当监听到手机系统是否有切换的时候,会响应对应的事件,到时候,可以让网页自动刷新,或者自动更新CSS样式就看听君处理了。
落魄时,一定要把自己当回事,发迹时,一定要把别人当回事。
--《剑来》
评论