CSS变量的基本使用是怎样,如何做主题切换
Admin 2022-11-12 群英技术资讯 387 次浏览
声明一个变量,属性名需要以两个减号(--)开始,属性值则可以是任何有效的CSS值。
element { --main-bg-color: brown; }
选择器是指定变量的可见作用域,该变量仅用于匹配当前选择器及其子孙,通常的最佳实践是定义在根伪类 :root 下,这样就可以在HTML文档的任何地方访问到它了。
:root { --main-bg-color: brown; }
使用一个局部变量时用 var() 函数包裹以表示一个合法的属性值:
element { background-color: var(--main-bg-color); }
用 var() 函数可以定义多个备用值(fallback value),当给定值未定义时将会用备用值替换
备用值并不是用于实现浏览器兼容性的。如果浏览器不支持CSS自定义属性,备用值也没什么用
color: var(--my-var, red); background-color: var(--my-var, var(--my-background, pink));
传统的CSS概念里,有效性和属性是绑定的,这对变量来说并不适用。当变量被解析,浏览器不知道它们什么时候会被使用,所以必须认为这些值都是有效的。
即便这些值是有效的,但当通过 var() 函数调用时,它在特定上下文环境下也可能不会奏效。属性和自定义变量会导致无效的CSS语句,这引入了一个新的概念:计算时有效性。
<p>This paragraph is initial black.</p>
:root { --text-color: 16px; } p { color: blue; } p { color: var(--text-color); }
浏览器将 --text-color 的值替换给了 var(--text-color),但是 16px 并不是 color 的合法属性值。代换之后,该属性不会产生任何作用。浏览器会执行如下两个步骤:
检查属性 color 是否为继承属性。是,但是 <p> 没有任何父元素定义了 color 属性。转到下一步。 将该值设置为它的默认初始值,black。当CSS属性-值对中存在语法错误,该行则会被忽略。然而如果自定义属性(变量)的值无效,它并不会被忽略,从而会导致该值被覆盖为默认值。
// 获取一个 Dom 节点上的 CSS 变量 element.style.getPropertyValue("--my-var"); // MDN上给的,但获取一直是空的,其他两个倒是没问题 // 获取任意 Dom 节点上的 CSS 变量 getComputedStyle(element).getPropertyValue("--my-var"); // 修改一个 Dom 节点上的 CSS 变量 element.style.setProperty("--my-var", jsVar + 4);
<!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>Document</title> <style> * { margin: 0; padding: 0; } :root { --bg: #000; --fontSize: 25px; } .pink-theme { --bg: hotpink; } body { transition: background 1s; background: var(--bg); } button { position: fixed; top: 50%; left: 50%; transition: color 1s; transform: translate(-50%, -50%); padding: 20px; border: none; background: #fff; font-size: var(--fontSize); color: var(--bg); } </style> </head> <body> <button>点击切换</button> <script> document.querySelector("button").addEventListener("click", () => { if (document.body.classList.contains("pink-theme")) { document.body.classList.remove("pink-theme"); } else { document.body.classList.add("pink-theme"); } }); </script> </body> </html>
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:mmqy2019@163.com进行举报,并提供相关证据,查实之后,将立刻删除涉嫌侵权内容。
猜你喜欢
这篇文章主要介绍了canvas 基础之图像处理的使用,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
需求介绍在页面上,有时会需要展示一些透明背景的图片,为了展示其透明的背景,通常会像PS一样,使用黑白相间的格子组成背景,从而告诉用户,这是一张透明的图片。效果预览实现原理1.利
这篇文章主要介绍了uni-app项目瀑布流布局的实现,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
本篇文章给大家带来了关于css的相关知识,其中主要介绍了关于css的相对定位、绝对定位和固定定位的相关问题,css中的position属性,position有四个值:relative(相对定位)、absolute(绝对定位)、static(静态定位)和fixed(固定定位),通过top、left、bottom、right来调整元素位置,下面一起来看一下,希望对大家有帮助。
CSS3中新增的transform属性,可以实现元素在变换过程中的过渡效果,实现了基本的动画。下面通过本文给大家介绍CSS3使用transition属性实现过渡效果,需要的朋友参考下本文
成为群英会员,开启智能安全云计算之旅
立即注册Copyright © QY Network Company Ltd. All Rights Reserved. 2003-2020 群英 版权所有
增值电信经营许可证 : B1.B2-20140078 粤ICP备09006778号 域名注册商资质 粤 D3.1-20240008