H5的适配系统夜间主题

现在无论是在PC端、还是手机端系统都加入了夜间主题,有些应用为了提高用户体验性,也加上了夜间主题。甚至是可以根据系统切换主题来变换自身主题,这样的反馈给用户还是挺舒适的。

其实不只是在App应用上跟随系统主题,在网页上也是可以实现的。

先看看在IOS系统上的一个效果:

 

 

 

上面就是在系统上切换主题颜色之后,网页内容也是随之变化了。

下面就来说说如何让网页跟随系统进行切换。

一、prefers-color-scheme媒体特性

利用该prefers-color-scheme css功能,可以检测到深色模式是否开启。写法如下:

@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指的分别是暗黑和亮模式,那么当一加载网页的时候,通过媒体查询能知道该用哪套主题了。

但是当手机系统切换主题后,怎么让网页也自动切换主题颜色呢?

二、通过JS监听系统的主题切换

/*判断是否支持主题色*/

    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样式就看听君了。

 

posted @ 2021-11-27 12:55  padding2020  阅读(569)  评论(0编辑  收藏  举报
想了解更多的,大家也可以关注我的公众号:padding2020