经验首页 前端设计 程序设计 Java相关 移动开发 数据库/运维 软件/图像 大数据/云计算 其他经验
当前位置:技术经验 » HTML/CSS » CSS » 查看文章
CSS变量实现主题切换的方法_CSS教程_CSS
来源:jb51  时间:2021/6/28 9:10:07  对本文有异议

CSS 变量

基本用法

声明一个变量,属性名需要以两个减号(--)开始,属性值则可以是任何有效的CSS值。

  1. element {
  2. --main-bg-color: brown;
  3. }

选择器是指定变量的可见作用域,该变量仅用于匹配当前选择器及其子孙,通常的最佳实践是定义在根伪类 :root 下,这样就可以在HTML文档的任何地方访问到它了。

  1. :root {
  2. --main-bg-color: brown;
  3. }

使用一个局部变量时用 var() 函数包裹以表示一个合法的属性值:

  1. element {
  2. background-color: var(--main-bg-color);
  3. }

备用值

用 var() 函数可以定义多个备用值(fallback value),当给定值未定义时将会用备用值替换

备用值并不是用于实现浏览器兼容性的。如果浏览器不支持CSS自定义属性,备用值也没什么用

  1. color: var(--my-var, red);
  2. background-color: var(--my-var, var(--my-background, pink));
  3.  

有效性

传统的CSS概念里,有效性和属性是绑定的,这对变量来说并不适用。当变量被解析,浏览器不知道它们什么时候会被使用,所以必须认为这些值都是有效的。
即便这些值是有效的,但当通过 var() 函数调用时,它在特定上下文环境下也可能不会奏效。属性和自定义变量会导致无效的CSS语句,这引入了一个新的概念:计算时有效性。

  1. <p>This paragraph is initial black.</p>
  1. :root { --text-color: 16px; }
  2. p { color: blue; }
  3. p { color: var(--text-color); }
  4.  

浏览器将 --text-color 的值替换给了 var(--text-color),但是 16px 并不是 color 的合法属性值。代换之后,该属性不会产生任何作用。浏览器会执行如下两个步骤:

  • 检查属性 color 是否为继承属性。是,但是 <p> 没有任何父元素定义了 color 属性。转到下一步。
  • 将该值设置为它的默认初始值,black。

当CSS属性-值对中存在语法错误,该行则会被忽略。然而如果自定义属性(变量)的值无效,它并不会被忽略,从而会导致该值被覆盖为默认值。

JavaScript 中的值

  1. // 获取一个 Dom 节点上的 CSS 变量
  2. element.style.getPropertyValue("--my-var"); // MDN上给的,但获取一直是空的,其他两个倒是没问题
  3.  
  4. // 获取任意 Dom 节点上的 CSS 变量
  5. getComputedStyle(element).getPropertyValue("--my-var");
  6.  
  7. // 修改一个 Dom 节点上的 CSS 变量
  8. element.style.setProperty("--my-var", jsVar + 4);
  9.  

主题切换

  1. <!DOCTYPE html>
  2. <html lang="en">
  3. <head>
  4. <meta charset="UTF-8" />
  5. <meta http-equiv="X-UA-Compatible" content="IE=edge" />
  6. <meta name="viewport" content="width=device-width, initial-scale=1.0" />
  7. <title>Document</title>
  8. <style>
  9. * {
  10. margin: 0;
  11. padding: 0;
  12. }
  13. :root {
  14. --bg: #000;
  15. --fontSize: 25px;
  16. }
  17. .pink-theme {
  18. --bg: hotpink;
  19. }
  20. body {
  21. transition: background 1s;
  22. background: var(--bg);
  23. }
  24. button {
  25. position: fixed;
  26. top: 50%;
  27. left: 50%;
  28. transition: color 1s;
  29. transform: translate(-50%, -50%);
  30. padding: 20px;
  31. border: none;
  32. background: #fff;
  33. font-size: var(--fontSize);
  34. color: var(--bg);
  35. }
  36. </style>
  37. </head>
  38. <body>
  39. <button>点击切换</button>
  40. <script>
  41. document.querySelector("button").addEventListener("click", () => {
  42. if (document.body.classList.contains("pink-theme")) {
  43. document.body.classList.remove("pink-theme");
  44. } else {
  45. document.body.classList.add("pink-theme");
  46. }
  47. });
  48. </script>
  49. </body>
  50. </html>

到此这篇关于CSS变量实现主题切换的方法的文章就介绍到这了,更多相关CSS主题切换内容请搜索w3xue以前的文章或继续浏览下面的相关文章,希望大家以后多多支持w3xue!

 友情链接:直通硅谷  点职佳  北美留学生论坛

本站QQ群:前端 618073944 | Java 606181507 | Python 626812652 | C/C++ 612253063 | 微信 634508462 | 苹果 692586424 | C#/.net 182808419 | PHP 305140648 | 运维 608723728

W3xue 的所有内容仅供测试,对任何法律问题及风险不承担任何责任。通过使用本站内容随之而来的风险与本站无关。
关于我们  |  意见建议  |  捐助我们  |  报错有奖  |  广告合作、友情链接(目前9元/月)请联系QQ:27243702 沸活量
皖ICP备17017327号-2 皖公网安备34020702000426号