• 使用css3原生变量实现主题换肤


    变量的声明

    声明变量的时候,变量名前面要加两根连词线(--)。

    body {
      --color:red;
      --background-color:#545454;
    }
    :root {
      /* :root伪类选择器表示文档根元素<html> */
      --backgroundColor: #f0f0f0;
      --color: #232323;
    }
    

    CSS 变量(CSS variable)又叫做“CSS 自定义属性"(CSS custom properties),变量名大小写敏感,--header-color--Header-Color是两个不同变量。

    变量的使用

    var()函数用于读取变量。

    color: var(--color,#545454); // 第二个只为默认值
    

    注意,变量值只能用作属性值,不能用作属性名。

    变量值的类型

    如果变量值是一个字符串,可以与其他字符串拼接。

    --bar: 'hello';
    --foo: var(--bar)' world';
    

    如果变量值是数值,不能与数值单位直接连用。

    .foo {
      --gap: 20;
      /* 无效 */
      margin-top: var(--gap)px;
    }
    

    上面代码中,数值与单位直接写在一起,这是无效的。必须使用calc()函数,将它们连接。

    .foo {
      --gap: 20;
      margin-top: calc(var(--gap) * 1px);
    }
    

    如果变量值带有单位,就不能写成字符串。

    /* 无效 */
    .foo {
      --foo: '20px';
      font-size: var(--foo);
    }
    /* 有效 */
    .foo {
      --foo: 20px;
      font-size: var(--foo);
    }
    

    代码实现主题换肤

    页面

    <div class="header">header</div>
    <button onclick="handleChange()">change theme</button>
    

    样式

    <style>
        :root {
          /* :root伪类选择器表示文档根元素<html> */
          --backgroundColor: #f0f0f0;
          --color: #232323;
        }
        .header {
          background-color: var(--backgroundColor);
          color: var(--color);
          padding: 30px;
          margin: 30px;
        }
    </style>
    

    事件

    通过js来动态设置css变量

    <script>
      document.body.style.setProperty('--backgroundColor', '#f0f0f0');
      document.body.style.setProperty('--color', '#232323');
      function handleChange() {
        const color = document.body.style.getPropertyValue('--color').trim();
        if (color === '#232323') {
          document.body.style.setProperty('--backgroundColor', '#000');
          document.body.style.setProperty('--color', '#fff');
        } else {
          document.body.style.setProperty('--backgroundColor', '#f0f0f0');
          document.body.style.setProperty('--color', '#232323');
        }
      }
    </script>
    
  • 相关阅读:
    iOS SQLite函数总结
    转-NSUserDefaults 简介,使用 NSUserDefaults 存储自定义对象
    NSUserDefaults保存用户名和密码
    iOS 集成银联支付(绕过文档的坑,快速集成)-转
    iOS微信支付
    iOS生成PDF的关键代码-备忘
    python中的urlencode和urldecode
    python中%r和%s的区别
    ubuntu16.04安装wps
    二进制、八进制、十进制、十六进制之间的转换
  • 原文地址:https://www.cnblogs.com/Lewiskycc/p/14363249.html
Copyright © 2020-2023  润新知