关于CSS变量
CSS 自定义属性(即变量属性),目前90%的浏览器都已经兼容这个属性了,具体看查询can i use的截图:
前端开发的一大利器,强大的变量属性引入到 CSS 当中,减少了代码的重复性、提高了代码的可读性和灵活性,总而言之,是个好东西!
快速上手CSS变量
第一步:声明一个CSS变量
:root { --main-bg-color: pink; }
:root
这个 CSS 伪类匹配文档树的根元素。对于 HTML 来说,:root
表示 <html>
元素,除了优先级更高之外,与 html
选择器相同。
第二步:使用CSS变量
body { background-color: var(--main-bg-color); }
第三步:没有第三步了
好了[aru_1],上手就这么简单,使用'--'即可声明css变量,使用过less和sass的同学就很快能明白这个和在css预处理器里用@和$声明一个变量是一样的,
使用的时候var(声明的变量名)就可以 了~!
详细参考mdn:CSS(层叠样式表)var()
进入正题
快速实现网站一键换肤功能,上述讲述了css变量的使用方法,那重点来了,它既然是个变量,怎么变呢?[aru_12]
要更新 CSS 变量,只需在已声明变量的元素上调用setProperty 方法,并将变量名称作为第一个参数,将新值作为第二个参数传入。
例如:
(拿上述第一步第二步数据做例子)
// 读取数据 let root = document.querySelector(':root'); let rootStyles = getComputedStyle(root); let bgColor = rootStyles.getPropertyValue('--main-bg-color').trim(); // bgColor 即是我们设置的--main-bg-color的值'pink' // 改写数据 root.style.setProperty('--main-bg-color', '#88d8b0') // --main-bg-color已经被set为'#88d8b0' ; }
一键换肤的思路
到这里已经很清晰了,你只需要在你网站css文件里声明一堆用得着的css变量,然后在统一设置网站各处需要统一的颜色样式 ,最后和你切换颜色的事件绑定即可.
具体可以体验小站右下角的一键换色功能,需要了解什么实用技术,欢迎给我留言~
完整实例
小站的一键换色是由取色器触发的,我单独写了一个小例子[aru_22],希望你看懂了~
<!DOCTYPE html> <html lang="zh"> <head> <meta charset="UTF-8"> <meta name="viewport" content="width=device-width, initial-scale=1.0"> <meta http-equiv="X-UA-Compatible" content="ie=edge"> <title>css变量-子成君</title> <style> :root{ --color: purple; } div.div{ --color: green; } #alert{ --color: red; } *{ color: var(--color); } </style> </head> <body> <div style="width: 100%;height: 150px;background-color: var(--color)"></div> <p>请问我是什么颜色 --purple</p> <div class="div">请问我是什么颜色--green</div> <div id="alert"> 请问我是什么颜色--red <p>请问我是什么颜色--red</p> <p style="--color: grey;">请问我是什么颜色--grey</p> </div> <div id="box"><input onchange="change(this.value)" type="color" id="myColor"></div> <script> // 读取数据 const rootStyles = getComputedStyle(document.documentElement); const varValue = rootStyles.getPropertyValue('--color').trim(); console.log(rootStyles) console.log(varValue) // 改写数据 function change(e){ // const mycolor = document.getElementById("myColor").value; document.documentElement.style.setProperty('--color', e); console.log(e) } </script> </body> </html>
🎨 原创不易,支持请点赞、转载请注明本文作者为子成君