美文网首页
使用CSS3自定义属性实现换肤功能

使用CSS3自定义属性实现换肤功能

作者: 待花谢花开 | 来源:发表于2018-07-19 15:54 被阅读0次

    开始之前先说说css3的自定义属性,之前我们在写css的时候全部都是使用自身属性,比如margin,padding等。但是你曾是否见过这样的css

    :root{
        --primary-color:#989898;
        --light:#fff;
        --dark:#000;
    }
    

    其中的--primary-color、--light、--dark就是自定义的属性。

    1. 自定义属性的命名规则
    --variables-name:variables-value
    --属性名:属性值
    例如定义一个主题颜色:
    --theme-color:red;
    
    1. 作用域
    //:root作用于全局
    :root{
        --theme-color:red;
    }
    //#app作用于id为app的节点内
    #app{
        --theme-color:red;
    }
    
    
    1. 使用方法 var(自定义属性名)
    //现在全局定义
    :root{
       --theme-color:red;
    }
    
    //使用的时候
    #app{
        background-color:var(--theme-color);
    }
    
    //假如我们没有指定--theme-color这个属性,则可以在使用的时候加上替代值
    #app{
        background-color:var(--theme-color,black);//没有指定--theme-color则会由black代替
    }
    
    1. 通过JS获取和设置自定义的属性
    //js中获取--theme-color的值
    var styles = getComputedStyle(document.documentElement);
    var value = styles.getPropertyValue("--theme-color");
    console.log(value);//red
    
    //js中更改--theme-color的值
    document.documentElement.style.setProperty("--theme-color","black");
    

    明白了这几个概念我们开始实现我们的换肤功能:

    <!DOCTYPE html>
    <html lang="en">
    <head>
        <meta charset="UTF-8">
        <title>CSS3自定义属性实现换肤功能</title>
        <style type="text/css">
            :root{
                --theme-color:#989898;
            }
    
            #header{
                width: 100%;
                height: 50px;
                line-height: 50px;
                background-color: var(--theme-color);
                margin-bottom: 30px;
            }
            #header h1{
                color: #fff;
            }
            button{
                width: 100px;
                height: 30px;
                color: #fff;
                border:none;
            }
            #btn-red{
                --btn-red:red;
                background-color: var(--btn-red)
            }
            #btn-black{
                --btn-black:black;
                background-color: var(--btn-black)
            }
            #btn-blue{
                --btn-blue:blue;
                background-color: var(--btn-blue)
            }
        </style>
    </head>
    <body>
        <header id="header">
            <h1>CSS3自定义属性实现换肤功能Demo</h1>  
        </header>
    
        <div>
            <button id="btn-red">red</button>
            <button id="btn-black">black</button>
            <button id="btn-blue">blue</button>
        </div>
    
        <script type="text/javascript">
            var btns = document.getElementsByTagName("button");
            for(var i=0;i<btns.length;i++){
                btns[i].addEventListener("click",function(e){
                    var ele = e.target||e.srcElement;
                    var styles = getComputedStyle(ele);
                    var value = styles.getPropertyValue("--"+ele.id);
                    document.documentElement.style.setProperty("--theme-color",value);
                })
            }
    
        </script>
    </body>
    </html>
    

    相关文章

      网友评论

          本文标题:使用CSS3自定义属性实现换肤功能

          本文链接:https://www.haomeiwen.com/subject/ebptmftx.html