zoukankan      html  css  js  c++  java
  • 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样式就看听君了。

  • 相关阅读:
    XJOI网上同步训练DAY2 T2
    XJOI网上同步训练DAY2 T1
    BZOJ 2661 连连看
    HDU 4411 Arrest
    BZOJ 2324 营救皮卡丘
    BZOJ 1927 星际竞速
    BZOJ 3550 Vacation
    XJOI网上同步训练DAY1 T3
    php 类的相互访问
    ThinkPhp5.0_文件上传
  • 原文地址:https://www.cnblogs.com/liao123/p/15061023.html
Copyright © 2011-2022 走看看