关于使用css变量实现主题的切换效果
现在要实现网页主题的切换成本较小的一种方案就是使用css的变量来实现
HTML
在HTML的body标签上先定义一个id元素属性
<body id="sm-theme">
<sj-root></sj-root>
</body>
CSS
css定义css变量,变量的定义必须要以 -- 开头
#sm-theme {
--smTheme: #2A2A2A;
--smSettingRight: #484848;
--smSettingRightBox: #2A2A2A;
}
js
在任何地方使用js/ts来获取body上定义的sm-theme属性名从而操作定义在里面的css样式变量
changeTheme(colorName) {
const theamEle = document.getElementById('sm-theme'); // 获取id为sm-theme的元素
theamEle.style.setProperty('--smTheme', colorName); // 设置--smTheme变量为我们想要的颜色
const theamColor = getComputedStyle(theamEle).getPropertyValue('--smTheme'); // 获取--smTheme变量的颜色
if (theamColor === '#2A2A2A') {
theamEle.style.setProperty('--smSettingRight', '#484848');
theamEle.style.setProperty('--smSettingRightBox', '#2A2A2A');
} else {
theamEle.style.setProperty('--smSettingRight', 'rgba(180,180,180,0.4)');
theamEle.style.setProperty('--smSettingRightBox', '#5C5C5C');
}
关于使用css变量实现主题的切换效果的更多相关文章
- Vue项目使用CSS变量实现主题化
主题化管理经常能在网站上看到,一般的思路都是将主题相关的CSS样式独立出来,在用户选择主题的时候加载相应的CSS样式文件.现在大部分浏览器都能很好的兼容CSS变量,主题化样式更容易管理了.最近,使用C ...
- 教你用原生CSS写炫酷页面切换效果,跟第三方组件说拜拜
因为项目需要,别人想让我给他写一个个人博客,并且给了我一个其他人的网页,可以点此查看.有的同学可能说了,第三方博客框架这么多,为什么还要去手写的,你说这个有可能是没有看到打开这个博客. 样式介绍 给大 ...
- 初次接触CSS变量
本文的目的主要是展示CSS变量是如何工作的.随着Web应用程序变得越来越大,CSS变得越来越大,越来越多,而且很多时候都很乱,在良好的上下文中使用CSS变量,为您提供重用和轻松更改重复出现的CSS属性 ...
- CSS动画实例:图文切换
先准备好一张图片,在页面中放置一个类名为container的层作为图文容器,在该层中再定义两个层:一个类名为image-box的层放置图片,一个类名为text-desc的层放置文本描述,HTML代码描 ...
- 用CSS实现Tab页切换效果
用CSS实现Tab切换效果 最近切一个页面的时候涉及到了一个tab切换的部分,因为不想用js想着能不能用纯CSS的选择器来实现切换效果.搜了一下大致有下面三种写法. 利用:hover选择器 缺点:只有 ...
- 原生CSS设置网站主题色—CSS变量赋值
定义CSS变量 在css文件顶部定义css变量,注意必须以--开头,使用:root包括这几个变量 :root { --main-bg-color: #ff7675; --color1: #fbfee9 ...
- 自定义视图引擎,实现MVC主题快速切换
一个网站的主题包括布局,色调,内容展示等,每种主题在某些方面应该或多或少不一样的,否则就不能称之为不同的主题了.每一个网站至少都有一个主题,我这里称之为默认主题,也就是我们平常开发设计网站时的一个固定 ...
- CSS实现页面背景自动切换功能
From here:http://xiaomiya.iteye.com/blog/2047728 请看效果图: 完整代码如下: <!DOCTYPE HTML> <html> & ...
- CSS变量(CSS variable)
使用 CSS 变量编写你的样式代码 基本使用: 1. --variable: <declaration-value> 2. <css-attribute>: var(--var ...
随机推荐
- Kali桥接模式下配置动态ip
以管理员身份运行虚拟机 打开 控制面板-->网络和Internet-->更改适配器 在虚拟机处桥接到这个WLAN2 点击 编辑-->编辑虚拟网卡 没有网卡就点上图的添加网络作为桥接网 ...
- zip4j 2.0压缩 加密压缩
https://github.com/srikanth-lingala/zip4j ZipParameters zipParameters = new ZipParameters(); zipPara ...
- 代码杂谈-split函数
java split 函数默认会清除空白行尾的空白. 为了避免这个问题, 需要加参数, 改为 String[] tmpValues = line.split(",", -1);
- ccf-csp 任务调度,回溯算法我觉得ok神**wa了
#include<iostream> #include<string.h> #include<cmath> #define M 41 #define min(a,b ...
- Codeforces 1294B - Collecting Packages
题目大意: 机器人从(0,0)开始,他只能往上'U'或者往右'R'走 坐标系中有着很多包裹,分别在一些点上 机器人需要走过去把这些包裹全部收集起来 问能不能做到 如果能,再输出移动方式,相同移动方式输 ...
- HDU - 1754 线段树
#include <algorithm> #include <iostream> #include<sstream> #include<cstring> ...
- log 处理
保存文件, 并打印到屏幕 import logging def set_log(log_file='log.log'): logging.basicConfig( level = logging.IN ...
- sphinx转pdf显示中文
在conf.py中 修改, 加入 ctex包 latex_elements = { # The paper size ('letterpaper' or 'a4paper'). #'papersize ...
- dubbo通信协议对比
对dubbo的协议的学习,可以知道目前主流RPC通信大概是什么情况,本文参考dubbo官方文档 http://dubbo.io/User+Guide-zh.htm dubbo共支持如下几种通信协议: ...
- [徐州网络赛]Longest subsequence
[徐州网络赛]Longest subsequence 可以分成两个部分,前面相同,然后下一个字符比对应位置上的大. 枚举这个位置 用序列自动机进行s字符串的下标转移 注意最后一个字符 #include ...