采用CSS3的VAR实现动态主题切换

更新日期: 2022-01-17阅读: 1.3k标签: 主题

背景

因为是一个二期项目,需要在一期的基础上做一些风格的改变,但是苦于没有产品和UI,所以这个事情就落到了前端的头上,一开始只是想的统一一下按钮和标题的颜色(这里就用到了var),顺便做些颜色改动比较方便,后面直接要求做一个动态主题切换(当然只是颜色的切换),所以就顺便研究了一下利用var来实现主题颜色切换。

准备

css自定义属性(也叫做css变量)

官方称呼其为自定义属性,坊间通常叫做css变量,因为它类似于其他js语言中的变量,可用于存储颜色、字体、大小宽度等css属性值;定义方式为两个连字符也就是中划线(--)开头,引用方式为var(custom-property-name, value),其中custom-property-name为定义的变量名称(必须),value为回退值(非必须),也叫默认值(如果前面引用的变量名称未定义时就会使用该值)。具体使用如下:

:root{
--theme-color: blue;
--theme-border: 1px solid var(--theme-color, #ccc);
}
.demo-txt{
color: var(--theme-color);
}
.demo-btn{
border: var(--theme-border);
}

:root伪类

它匹配文档的根<html>元素,但具有更高的优先级,所以在:root中定义定义的变量可用于全局访问,如需覆盖其中的变量值,只需要在引用的元素同级或父级定义变量名称相同的变量覆盖即可。

使用

1.在theme.css文件中定义好变量

:root{
--theme-color: #ff6a00;
--font-color: #333;
--bg-color: #fff;
--panel-bg-color: #eee;
--border: 1px solid #ddd;
/** more attribute **/
}
:root[theme='blue']{
--theme-color: #2563eb;
}
:root[theme='dark']{
filter: invert(1) brightness(1);
}

2.在页面中动态切换主题

添加页面文件index.html,内容如下:

<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Dynamic Theme Demo</title>
<link rel="stylesheet" href="theme.css">
<link rel="stylesheet" href="index.css">
</head>
<body>
<section class="container">
<header class="header">头部标题</header>
<main class="main">
<div class="con">
<p>主题说明:链接文字采用主题色,按钮背景采用主题色</p>
<a href="#">链接</a><br>
<button>按钮</button>
</div>
<div class="radio-group">
<input id="default" type="radio" name="theme" value="defalut" checked/><label for="default">默认</label> 
<input id="blue" type="radio" name="theme" value="blue" /><label for="blue">蓝色</label> 
<input id="dark" type="radio" name="theme" value="dark" /><label for="dark">暗黑</label>
</div>
</main>
<footer class="footer">页面底部</footer>
</section>
<script>
var themes = document.getElementsByName("theme");
Array.from(themes).forEach(themeRadio => {
themeRadio.addEventListener("click", function(){
document.documentElement.setAttribute("theme", this.value);
})
})
</script>
</body>
</html>

添加样式文件index.html, 内容如下:

*{
padding: 0;
margin: 0;
border: 0;
font-size: var(--font-size);
color: var(--font-color);
}
html, body{
width: 100%;
height: 100%;
background-color: var(--body-bg-color);
}
a{
color: var(--theme-color);
}
button{
background-color: var(--theme-color);
color: var(--body-bg-color);
line-height: 20px;
padding: 10px;
}
.container{
display: flex;
flex-direction: column;
width: 70%;
height: 100%;
margin: 0 auto;
background-color: var(--body-bg-color);
}
.container .header{
--line-height: 40px;
height: var(--line-height);
line-height: var(--line-height);
padding: var(--content-padding);
font-size: var(--font-size-lg);
box-shadow: var(--boxshadow);
background-color: var(--bg-color);
}
.container .main{
flex: 1;
line-height: 30px;
padding: var(--content-padding);
}
.container .footer{
--line-height: 30px;
height: var(--line-height);
line-height: var(--line-height);
padding: var(--content-padding);
font-size: var(--font-size-sm);
background-color: var(--bg-color-lg);
}

主要就是通过切换html的属性来达到切换的效果。

总结

使用var切换主题的方式比较简单,而且对统一页面样式以及后期维护有很大帮助,适用于对兼容性要求不高的(IE15以上支持)需求。

来源:https://www.cnblogs.com/jieli/p/15806735.html


链接: https://fly63.com/article/detial/11026

wordpress大前端DUX主题

DUX主题是基于WordPress程序的主题,由themebetter团队原创开发,是目前比较火的wordpress主题;支持百度熊掌号,适用于垂直站点、科技博客、个人站,扁平化设计、简洁白色、超多功能配置

Vue实现换主题/皮肤功能

网站换肤,主题切换。网站的主题色可以在几种常用颜色之间进行切换,还有相关图片、图标也要跟随主题进行切换。文章由两部分组成:css切换,图片图标切换

Web前端主题切换的几种方案

本文将介绍 Web 前端主题切换的几种常用方案,示例代码基于 React 框架。废话少说,show you the code!这种方案利用了css多层样式精确匹配的特点,通过样式覆盖的方式实现主题的切换。

前端 “一键换肤“ 的几种方案

现在越来越多的网站都提供了拥有换肤(切换主题)功能,如 ElementUI,既是为了迎合用户需求,或是为了凸显自己特点,因此提供了个性化定制的功能.

Sass应用之实现主题切换

实现主题切换有几种不同的方案,比如使用CSS变量,使用JavaScript动态加载对应的主题样式文件等。本文主要讲的是如何使用Sass实现主题切换。

前端实现切换主题方案

前端开发人员面临着制作增强用户体验和适应用户偏好的用户界面的任务。带有 css 的 react 主要可用于创建多色可切换主题。为用户提供了在给定时间点在主题颜色之间切换以适合他们的偏好的特权。

使用CSS变量实现主题定制真的很简单

Varlet是通过css变量来组织样式的,什么是css变量呢,其实很简单,首先声明自定义的css属性,随便声明在哪个元素上都可以,不过只有该元素的后代才能使用,所以如果要声明全局所有元素都能使用的话,可以设置到根伪类:root下

常用Vue UI框架的主题切换

在如今,很多网页已经可以手动切换明亮模式和黑暗模式,网页的主题切换已经成为了一个常用的需求,因此,本文将从常见框架的处理方式总结一些相关的操作,并探究其本质。

兼容ie浏览器 网站变灰色

在遇到特殊情况的时候,我们作为站长需要紧急将网站变灰的需求,大家都知道通过简单的CSS样式即可实现,上述代码配合指定网页在IE内核下的渲染模式,就可以达到效果,这个语句意思便是告诉IE浏览器

内容以共享、参考、研究为目的,不存在任何商业目的。其版权属原作者所有,如有侵权或违规,请与小编联系!情况属实本人将予以删除!