• CSS变量(CSS variable)— CSS自定义属性


    CSS 变量(CSS variable)又叫做“CSS 自定义属性”,通过声明CSS变量来设置通用的颜色、字号等,实现统一页面风格,方便后期维护,减轻开发量。

    声明全局变量

    在变量名称前加两个中横线 --(使用--是因为$被Sass占用,@被Less占用)

    1. body {
    2. --FontColor: #2C51CD;
    3. --BackGround: #B4D4FD;
    4. }

    说明:body中声明了FontColor,BackGround的全局变量

    我们也可以使用:root{}来存放所有变量,各种值都可以放入css变量中

    1. /* 全局变量 */
    2. :root{
    3.   --Colors:#2C51CD;
    4.   --fZ16px:16px;
    5.   --main-color: #4d4e53;
    6.   --header-height: 68px;
    7.   --transition-duration: .5s;
    8.   --margin-top: calc(2vh + 10px);
    9.   --theme-bg: #f1f1f1;
    10. }

    说明:在:root中声明相当于全局属性,:root选择器是一个伪类,匹配文档的根元素,所有主流浏览器均支持 :root (除 IE8及以下)。

    在HTML中,根元素永远是HTML

    注意:声明变量对大小写敏感(colors和Colors表示两个不同的变量)

    读取变量

    使用var()函数来读取变量,var函数有两个参数,插入自定义的属性值

    var(custom-property-name, value)
    • custom-property-name 必需,变量名
    • value 可选,当属性不存在的时候使用
    1. .box-wraper{
    2. background-color: var(--theme-bg);
    3. }

    说明:–theme-bg即使用的变量,将变量设置到根元素:root上,下面的元素.box-wraper即可在css中使用这个变量

    1. p {
    2. font-family: var(--fontFamily, "Roboto", "Helvetica");
    3. margin: var(--Margins, 15px 20px 25px);
    4. }

    说明:第二个参数不处理内部的逗号或空格,都视作参数的一部分

    另外,var()函数还可以用在变量声明中

    1. :root {
    2. --color1: pink;
    3. --color2: aquamarine;
    4. --bg: linear-gradient(to right, var(--color1), var(--color2));
    5. }

    变量值的类型

    变量值是一个字符串,可以和其他字符串拼接

    1. :root {
    2. --Hi: 'hello';
    3. --Name: var(--Hi)',world';
    4. }

    变量值是一个数值,不可以和其他字符串拼接,但可以通过calc()函数,将他们拼接起来

    1. :root {
    2. --pSizeVal: 20;
    3. --pSize: var(--pSizeVal)'px'; // 无效
    4. --pSize: calc(var(--pSizeVal)*1px); // 有效
    5. }

    变量值带单位,不能写成字符串形式

    1. :root {
    2. --pSize: '20px'; //无效
    3. --pSize: 20px; // 有效
    4. margin-top: var(--pSize);
    5. }

    变量的作用域

    变量的作用域分为全局作用域和局部作用域

    在:root中申明的CSS变量即全局作用域的变量,即能够在CSS中任意地方应用;

    局部作用域总是可以访问外层作用域或者全局作用域的变量,反之则不可;

    1. <div class="parent">
    2. parent
    3. <div class="child">childdiv>
    4. div>
    5. <style>
    6. .parent {
    7. --bgColor: pink; /* 局部变量 */
    8. color: var(--color); /* 使用子级变量无效 */
    9. }
    10. .child {
    11. background: var(--bgColor); /* 使用父级变量有效 */
    12. --color: red;
    13. color: var(--color);
    14. }
    15. style>

    实际项目开发过程中,都会设置字体颜色,背景色,字体大小等等,页面多次使用,或者项目主题化时,往往要大量修改,增加后期维护成本,我们可以设置一个全局的css文件,声明一些可复用的全局变量,不仅可以统一页面风格,更方便后期维护,大大提高了开发效率。

    1. /* 创建一个 base.css文件 */
    2. :root{
    3. --theme-bg: #f1f1f1;
    4. --color-text: 333; /* 普通字体颜色 */
    5. --color-high-text: blue; /* 高亮文字颜色 */
    6. }
    7. /* vue项目可以在main.js引入 */
    8. @import "assets/css/base.css";
    9. /* 使用 */
    10. body {
    11. background: var(--theme-bg);
    12. color:var(--color-text)
    13. }
    14. .active{
    15. color: var(--color-high-text)
    16. }

    变量的作用域的强大之处,有助于系统开发代码整洁规范、模块化,当我们想要主题化某一个模块时,可以在当前模块的根元素中设置CSS变量,以便于变量向下传递,而且不会影响其他模块的元素。

    注意:合理运用作用域层级和CSS变量赋值,在定义CSS变量时不能出现循环依赖关系,这会导致页面无法加载,尽量避免代码结构过于复杂以及影响页面渲染性能。

  • 相关阅读:
    前端Vue拖拽功能
    EtherCAT转Modbus网关做为 MODBUS 从站配置案例
    软考高级系统架构师_计算机组成与结构---备考笔记004
    SLAM ORB-SLAM2(3)例程试用
    【Koa】【MongoDB】koa框架连接MongoDB
    rials中,打印日志
    有趣的byte与0xff
    思科的joy提取加密流量特征教程以及基本使用
    【云原生Kubernetes系列第七篇】一文掌握k8s之YAML文件(少攀谈,多沉潜,清醒而独立)
    python-矩阵加法(赛氪OJ)
  • 原文地址:https://blog.csdn.net/lq099526/article/details/126867683