美文网首页
网站换肤的实现

网站换肤的实现

作者: 菜蚴菜 | 来源:发表于2021-02-26 20:51 被阅读0次

针对整个网站需要改变主题的情况

一、方案1:通过设置属性选择器来实现

1、新建不同主题的scss

default.scss
//:root 选择器匹配文档根元素,在 HTML 中,根元素始终是 html 元素。
:root{
  --color-title: #333;
}
green.scss
[theme='green']{
  --color-title: green;
}
red.scss
[theme='red']{
  --color-title: red;
}

在一个公共的scss中引入

theme.scss
@import './default.scss';
@import './green.scss';
@import './red.scss';

2、在main.js中全局引入

import '@/styles/theme.scss' 

3、在入口的vue文件中拿到拼接在url上的主题字段theme,把theme值作为body体的一个属性

<template>
  <div id="app">
    <router-view />
  </div>
</template>

<script>
export default {
  name: "App",
  computed: {
    theme() {
      return this.$route.query.theme;
    },
  },
  mounted() {
    this.updateTheme();
  },
  watch: {
    theme() {
      this.updateTheme();
    },
  },
  methods: {
    updateTheme() {
      let { theme } = this;
      const root = document.body;
      if (theme) {
        root.setAttribute("theme", theme);
      } else {
        if (root.getAttribute("theme")) {
          root.removeAttribute("theme");
        }
      }
    },
  },
};
</script>
<style lang="scss">
#app {
   
}
</style>

访问页面/?theme=green,在页面元素中看到的实际运行结果如下:

<body theme="green">
</body>

此时,通过css的属性选择器匹配到theme主题下变量的值

[theme=green] {
   --color-title: green;
}

4、在具体的页面中,通过var来获取到对应的值

 color:var(--color-title);
二、方案2:通过往root下动态塞入变量的形式

1、在html文件的头部预设一个元素

  <style id="theme"></style>
const themeWhite={
 --color-title: #ffffff;
}
const themeDark={
 --color-title: black;
}
let themeCss=theme==='dark'?themeDark:themeWhite;
 const innerText = Object.keys(themeCss)
    .map((cssVar) => {
      // console.log(cssVar);
      return `${cssVar}:${themeCss[cssVar]}`;
    })
    .join(';');
  el.innerText = `:root {${innerText}}`;

相关文章

  • 网站换肤的实现

    针对整个网站需要改变主题的情况 一、方案1:通过设置属性选择器来实现 1、新建不同主题的scss 在一个公共的sc...

  • web前端入门到实战:网站换肤方案汇总

    1、实现网站换肤功能,一般最先想到的是用全局class控制样式切换缺点:全局控制CSS,在项目不大,换肤样式不多的...

  • 【靶点突破】网易云换肤方案探讨

    【靶点突破】网易云换肤方案探讨 老方案 网易云音乐换肤方案原理 动手实现一个网易云换肤方案的demo 动手打造换肤...

  • Android 动态换肤原理与实现

    概述 本文主要分享类似于酷狗音乐动态换肤效果的实现。 动态换肤的思路: 收集换肤控件以及对应的换肤属性 加载插件皮...

  • 安卓换肤实现

    最近实习的时候发现公司的换肤框架挺好的,所以本周打算学习一下安卓换肤的实现(2020.7.7 06:29) 换肤基...

  • umi项目换肤功能的实现

    一个基于umi搭建的项目的换肤的实现 源码和demo 因为webpack和umi的层层封装,在线换肤功能实现变得复...

  • 再谈APP换肤实现

    导语:此前发表的关于APP换肤实现原理的文章——《APP动态换肤方案详解[https://www.jianshu....

  • Android换肤方案

    没有任何侵入型的一行代码实现动态换肤的android换肤组件 欢迎star https://github.com/...

  • 换肤

    换肤 1. 换肤的应用场景? 2. 换肤的实现方案 方案1 1. 将图片以及颜色按照主题命名,使用虚拟文件夹, 直...

  • 换肤框架Android-Skin-Support解析

    知识点汇总: 一:换肤框架Android-Skin-Support项目概述 二:实现换肤功能背景知识点学习 三:对...

网友评论

      本文标题:网站换肤的实现

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