css 實現換膚幾種方式


說起換膚功能,前端肯定不陌生,其實就是顏色值的更換,實現方式有很多,也各有優缺點

一、可供選擇的換膚

對於只提供幾種主題方案,讓用戶來選擇的,一般就簡單粗暴的寫多套主題

  • 一個全局class控制樣式切換,直接更改全局class
<body class='dark'></body>
  • 使用js去修改 link 的 href
<link id='link_theme'  href="skin.css" rel="stylesheet" type="text/css"/>
<script>
    document.getElementById('link_theme').href='skin-dark.css'
</script>

二、動態色值換膚的實現

  • 全局替換顏色值

可以參看 Element-UI 的換膚實現,就是先把樣式中顏色全部替換后在塞到<style>標簽里面

  • 使用 less 的 modifyVars 動態修改

modifyVars方法是是基於 less 在瀏覽器中的編譯來實現。所以在引入less文件的時候需要通過link方式引入,然后基於less.js中的方法來進行修改變量

// styles.less
@color: red;
.card {
    color: @color;
}
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">

    <link rel="stylesheet/less" type="text/css" href="styles.less" />
    <script src="//cdn.jsdelivr.net/npm/less"></script>
</head>

<body>
    <div class="card">
        card
    </div>
    <button id="themeBtn">更改顏色</button>
</body>
<script>
    document.getElementById("themeBtn").addEventListener('click', function () {
        let color = '#' + Math.floor(Math.random() * 256 * 1000000000).toString(16).slice(0, 6)
        less.modifyVars({
            '@color': color
        }).then(() => {
            console.log(`color: ${color}F`);
        });
    })
</script>
  • css 變量(var)

css 原生變量 兼容性,大部分主流瀏覽器還是支持的,而且主要是操作起來夠簡便。

定義變量

// 加上前綴 -- 就可以了 
:root{
    --color:red;
}
//使用 當--color 不生效的時候會使用后面參數替代
body:{
    color:var(--color,#000)
}

使用 js 去修改

// 獲取根
let root = document.documentElement;
root.style.setProperty('--color', '#f00');

三、總結

如果需要動態替換顏色主題,使用第二種比較合適也方便.如果每套主題有很大差異性不僅僅只是顏色的替換,第一種的方式就好了很多,使用第二種就不太合適了.如果都需要滿足也可以兩種相結合使用


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM