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="https://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');

三、总结

如果需要动态替换颜色主题,使用第二种比较合适也方便.如果每套主题有很大差异性不仅仅只是颜色的替换,第一种的方式就好了很多,使用第二种就不太合适了.如果都需要满足也可以两种相结合使用

(0)

相关推荐

  • vue 开发常用工具及配置六:认识各种 loader

    本文大约 2400 字. 目录 Webpack 的工作原理 loader 和 plugin 的区别 webpack 如何处理 css 文件 三种样式 sass/scss 和 less 的区别 另一种定 ...

  • “我只是换了一种方式爱你”

    天气预报说,明天会下雪. 也就是说,今年很有可能度过一个满城飘雪的圣诞夜. 想想都很浪漫. 过马路的时候不再将你护在里边,而是忙着回客户消息把你落在身后浑然不知:夜里打雷的时候不再伸手捂住你的耳朵,而 ...

  • 《大河唱》民俗永不消亡,它只是换了一种方式继续奔腾

    最近看了几部非常优秀的纪录片,其中有两部和音乐有关,<尺八·一声一世>让时光倒流,奏响了来自唐朝大雁塔下的萧瑟与繁华,<大河唱>则是沿着黄河上游追溯,去探访两岸土地上的民间艺人 ...

  • 行笔的过程中,换面的三种方式

    行笔,需要丰富变化,要用对毛笔锥面,不断的能实现换面,在行笔的过程中,换面一般有三种方式,即绞转.翻笔和折笔: 绞转:在笔锋运动的过程中,逐渐换面: 翻笔:在行笔中,笔锋铺开的状态下,由一个面直接翻到 ...

  • 他们还在《照常营业》,只是换了一种方式……

    2016年的时候,草蜢发行了国语专辑<Music Walker>,距离上一张国语专辑的发行时间,已经过了19年.那是草蜢最后一个"高产"的年份,在滚石发了一张国语.一张 ...

  • 青年阿里巴巴,换了一种方式与商家对话

    从最新天猫双11沟通会,感受到阿里正在强化让"听得见炮火"的客服,帮商家读懂消费者. 鲸商(ID:bizwhale)原创 作者 | 达尔闻 近日,阿里的一场官方直播,透露出他们在策 ...

  • 街机不死,只是换了一种方式

    快过年了,各行各业应该都非常忙,有很多行业为了冲业务也是相当拼的,这个月小编也是忙到飞起,答应帮忙找的单机游戏也一直搁浅,先说声抱歉,等过了这两个月,答应的事会尽力去办到! 昨天对于一个消息还是非常意 ...

  • 自动变速箱为什么要换油?重力换油与循环机换油哪种方式好?

    现在越来越多的车型搭载自动变速箱,一般在汽车的使用说明书都规定,自动变速箱需要在4~6万公里时更换变速箱油.更换变速箱油通常有两种方法,一种是重力换油法,一种是循环机换油法.很多车主朋友在此时都非常纠 ...

  • 印度人列出了这五大理由,这次我们换了一种方式回应

    一直以来,印度人总能给中国人娱乐至上的感觉,每次印象深刻的让人笑岔气,除了扒火车.玩杂耍.摔各种战机,印度人的精神让其他人望尘莫及,每次刚说到印度人的笑点时,印度总能以另一种方式让自己火起来. 据印度 ...

  • 学生投稿丨我没有离开,只是换了一种方式陪伴

    我还是那个小仙女,只是我已经大三了,过去的三年中我或许做了很多事,但似乎也没有任何一个惊天动地的事情. 说起经历,很多人都会有不同的话语.我和很多人一样现在在这篇文章的你人一样,四年的大学三年给了学生 ...