CSS变量和@property

CSS变量 var()

CSS 变量是由CSS作者定义的实体,其中包含要在整个文档中重复使用的特定值。使用自定义属性来设置变量名,并使用特定的 var() 来访问。(比如 color: var(--main-color);)。

基本用法

CSS变量定义的作用域只在定义该变量的元素及其后代元素中有效。如果需要在整个页面中使用该变量,可以将其定义在:root中

声明一个局部变量:

element {--main-bg-color: brown;
}

使用一个局部变量:

element {background-color: var(--main-bg-color);
}

Mdn Web Docs

声明一个 全局 CSS 变量:

:root {--global-color: #666;--pane-padding: 5px 42px;
}

使用一个 全局 CSS 变量:

.demo{color: var(--global-color);}

开始使用CSS变量

让我们从这个简单的例子开始,拥有不同类名的元素有相同的颜色:

.one {color: white;background-color: brown;margin: 10px;width: 50px;height: 50px;display: inline-block;
}.two {color: white;background-color: black;margin: 10px;width: 150px;height: 70px;display: inline-block;
}
.three {color: white;background-color: brown;margin: 10px;width: 75px;
}
.four {color: white;background-color: brown;margin: 10px;width: 100px;
}.five {background-color: brown;
}

把它应用到下面这段HTML:

<div><div class="one"></div><div class="two">Text <span class="five">- more text</span></div><input class="three"><textarea class="four">Lorem Ipsum</textarea>
</div>

注意CSS中重复的地方,brown的背景色作用在不同的元素上面。我们可以将背景色定义在更高的层级,然后通过CSS继承解决这个问题。在某些情况下,这种方法不一定可行。定义一个变量在:root伪类上,使用变量来减少重复的代码

:root {--main-bg-color: brown;
}.one {color: white;background-color: var(--main-bg-color);margin: 10px;width: 50px;height: 50px;display: inline-block;
}.two {color: white;background-color: black;margin: 10px;width: 150px;height: 70px;display: inline-block;
}
.three {color: white;background-color: var(--main-bg-color);margin: 10px;width: 75px;
}
.four {color: white;background-color: var(--main-bg-color);margin: 10px;width: 100px;
}.five {background-color: var(--main-bg-color);
}

只需要规范地声明所需的属性,就能得到和上面例子相同的结果

CSS变量的继承

自定义属性同样支持继承。一个元素上没有定义自定义属性,该自定义属性的值会继承其父元素:

<div class="one"><div class="two"><div class="three"></div><div class="four"></div><div>
</div>

定义下面的CSS:

.two { --test: 10px; }
.three { --test: 2em; }

在这个例子中,var(--test)的结果是:

  • class="two" 对应的节点: 10px
  • class="three" 对应的节点: element: 2em
  • class="four" 对应的节点: 10px (inherited from its parent)
  • class="one" 对应的节点: 无效值, 即此属性值为未被自定义css变量覆盖的默认值

在JS中修改变量

// 获取根元素
var r = document.querySelector(':root');// 创建获取变量值的函数
function myFunction_get() {// Get the styles (properties and values) for the rootvar rs = getComputedStyle(r);// Alert the value of the --blue variablealert("The value of --blue is: " + rs.getPropertyValue('--blue'));
}// 创建设置变量值的函数
function myFunction_set() {// Set the value of variable --blue to another value (in this case "lightblue")r.style.setProperty('--blue', 'lightblue');
}

在Vue中配合数据动态修改css变量

<template><div><span v-for="item in list" :style="{'--text': item.text, '--color': item.color}"></span></div>
</template><script>
export default {name: '',components: {},props: {},data() {return {list: [{ text: '"中"', color: 'red' },{ text: '"华"', color: 'orange' },{ text: '"人"', color: 'yellow' },{ text: '"民"', color: 'orange' },{ text: '"共"', color: 'green' },{ text: '"和"', color: 'cyan' },{ text: '"国"', color: 'blue' }]};}
};
</script><style lang="scss" scoped>
span::after {content: var(--text);background-color: var(--color);
}
</style>

@property

使用模板:

  • @property --property-name 中的 --property-name 就是自定义属性的名称,定义后可在 CSS 中通过 var(--property-name) 进行引用

  • syntax:该自定义属性的语法规则,也可以理解为表示定义的自定义属性的类型

    • 支持的 syntax 语法类型:

      • length
      • number
      • percentage
      • length-percentage
      • color
      • image
      • url
      • integer
      • angle
      • time
      • resolution
      • transform-list
      • transform-function
      • custom-ident (a custom identifier string)
    • syntax 中的 +#| 符号

      • syntax: '<color>#' :接受逗号分隔的颜色值列表 --img-url:url(img01.png),url(img02.png);
      • syntax: '<length>+' :接受以空格分隔的长度值列表 --padding:0 10px;
      • syntax: '<length> | <length>+':接受单个长度或者以空格分隔的长度值列表
      • syntax: '<percentage> | <angle>'; 使用百分比也可以使用角度
  • inherits:是否允许继承

  • initial-value:初始值

<style>
@property --property-name {syntax: '<color>';inherits: false;initial-value: #fff;
}p {color: var(--property-name);
}
</style>

在 script 中使用 CSS.registerProperty

<script>
CSS.registerProperty({name: "--property-name",syntax: "<color>",inherits: false,initialValue: "#c0ffee"
});
</script>

示例

使用 linear-gradient 实现 transition 效果,但是 transition 并不会对 linear-gradient 生效

原代码

    <style>.line {margin: 0 auto;width: 300px;height: 24px;border: 1px solid rgba(128, 128, 128, 0.14);border-radius: 12px;box-sizing: border-box;background: linear-gradient(to right, #00ffc8 0, #ffffff 0);transition: all 0.3s;&:hover {background: linear-gradient(to right, #00ffc8 0, #ffffff 260px);}}</style><div class="line"></div>

使用 @property 修改后

    <style>@property --l {syntax: "<length>";inherits: false;initial-value: 0;}.line {--l: 0px;margin: 0 auto;width: 300px;height: 24px;border: 1px solid hsla(0, 0%, 50%, 0.137);border-radius: 12px;box-sizing: border-box;background: linear-gradient(to right, #00ffc8 0, #ffffff var(--l));transition: --l 0.3s;&:hover {--l: 260px;}}</style><div class="line"></div>


CSS变量和@property - 掘金

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/718990.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【Kotlin】函数

1 常规函数 1.1 无参函数 fun main() {myFun() }fun myFun() {println("myFun") // 打印: myFun } 1.2 有参函数 1&#xff09;常规调用 fun main() {myFun("myFun") // 打印: myFun }fun myFun(str: String) {println(str) } 2&#xff09;形参指定默…

根据条件查询下载Excel表单(Java+Vue 及 Vue 两种方式)

目录 前言1. 基本知识2. 纯前端导入导出&#xff08;Vue&#xff09;3. 前后端&#xff08;Vue Java&#xff09; 前言 如果想要下载好看的Excel推荐阅读&#xff1a; 详细讲解Java使用EasyExcel函数来操作Excel表&#xff08;附实战&#xff09;详细讲解Java使用HSSFWorkbo…

23.基于springboot + vue实现的前后端分离-在线旅游网站系统(项目 + 论文PPT)

项目介绍 本旅游网站系统采用的数据库是MYSQL &#xff0c;使用 JSP 技术开发&#xff0c;在设计过程中&#xff0c;充分保证了系统代码的良好可读性、实用性、易扩展性、通用性、便于后期维护、操作方便以及页面简洁等特点。 技术选型 后端: SpringBoot Mybatis 数据库 : MyS…

RK android11 user打开adb调试功能

目录build/make/core diff --git a/core/main.mk b/core/main.mk --- a/core/main.mk b/core/main.mk -280,7 280,7 ifneq (,$(user_variant)) ADDITIONAL_DEFAULT_PROPERTIES security.perf_harden1 ifeq ($(user_variant),user) - ADDITIONAL_DEFAULT_PROPER…

机器学习:原理、应用与未来展望

第一章 是什么 机器学习&#xff08;Machine Learning&#xff09;是一门跨学科的学科&#xff0c;它使用计算机模拟或实现人类学习行为&#xff0c;通过不断地获取新的知识和技能&#xff0c;重新组织已有的知识结构&#xff0c;从而提高自身的性能。机器学习涉及多个学科&am…

wordpress 开源主题

海外就医wordpress主题 出国看病、海外就医是越来越多中产家庭的选择&#xff0c;此wordpress主题适合做相关业务的公司官网。 https://www.jianzhanpress.com/?p5220 防护wordpress外贸主题 个人防护器具wordpress外贸主题&#xff0c;适合做劳动保护的外贸公司使用。 ht…

微信小程序中使用特使字体

1、首先下载字体文件 推荐几个常用下载字体的网站 https://font.chinaz.com/zhongwenziti.html https://www.hellofont.cn/ 2、转换字体 使用下面这个网站进行字体转换 https://transfonter.org/ 点击add fonts 按钮进行上传刚刚下载的字体文件选择formats格式&#xff1a;可…

关于CSS 优先级布局应用的教程

在前端开发中&#xff0c;CSS 的优先级布局是非常重要的一部分。通过合理地应用 CSS 优先级&#xff0c;我们可以更加灵活地控制页面的布局和样式。本教程将向您介绍如何利用 CSS 优先级进行布局&#xff0c;并通过实例展示其应用。 1. 了解 CSS 优先级 在 CSS 样式表中&…

【生活】程序人生之日常生活篇(附塑料分类标志 常用日常好物)

程序员生活指南之 【生活】程序人生之日常生活篇&#xff08;附塑料分类标志 & 常用日常好物&#xff09; 文章目录 1、关于本文2、居家相关2.1 蟑螂大战2.2 房间收纳&#xff08;寝室&#xff0c;租房&#xff0c;家里&#xff09;2.3 智能家居2.4 台灯选购2.5 塑料分类标…

深圳mes系统在智能制造中的重要意义

深圳mes系统在生产中具有重要意义&#xff0c;主要体现在以下几个方面&#xff1a; 生产计划可视化和优化&#xff1a;MES系统通过大量收集和分析工厂内部的实时数据&#xff0c;将数据可视化展示给运营和管理层&#xff0c;使企业决策者能够更加有效地进行生产计划的制定和…

高级优化理论与方法(二)

高级优化理论与方法&#xff08;二&#xff09; 上节回顾ConstrainedUnconstrainedFONCSONCexample 这节课的内容SOSC定理叙述证明例子 One-dimensional Search MethodsIterative MethodGolden Section SearchMethodIssues方法推理算法描述TimeExample Fibonacci MethodBisecti…

教师观包括哪些内容是什么

站在讲台上的老师&#xff0c;除了教你知识&#xff0c;还有哪些不为人知的角色和面孔&#xff1f;让我们一起揭开教师观的神秘面纱&#xff0c;看看老师们的“千面人生”。 现代教师已不再是单纯的知识传递者&#xff0c;他们更像是学习旅程中的导游和指南针。他们引导学生发现…

嵌入式Qt 对话框及其类型 QDialog

一.对话框的概念 对话框是与用户进行简短交互的顶层窗口。 QDialog是Qt中所有对话框窗口的基类。 QDialog继承与QWidfet是一种容器类型的组件。 QDialog的意义&#xff1a; QDialog作为一种专业的交互窗口而存在。 QDialog不能作为子部部件嵌入其他容器中。 QDialog是定制…

反函数的理解|反函数到底“反”的是什么?什么是反函数?

理解 将 yex 函数图像连同整个坐标系绕着 yx 旋转 180 度&#xff0c;会变成下面的图像 只是把图像转了一下&#xff0c;函数还是那个函数&#xff0c;还是 yex &#xff0c;此时横轴变成了 y 轴&#xff0c;纵轴变成了 x 轴 根据习惯&#xff0c;一般把纵轴当作因变量、把横轴…

如何在腾讯云轻量应用服务器上安装Docker的详细步骤是什么?

如何在腾讯云轻量应用服务器上安装Docker的详细步骤是什么&#xff1f; 登录腾讯云轻量应用服务器&#xff1a;首先&#xff0c;需要登录到腾讯云官方网站&#xff0c;并进入轻量应用服务器控制台。 软件源设置&#xff1a;在轻量应用服务器控制台中选择“更多”>“设置”&…

JavaScript实现的计时器效果

之前做过电商网站倒计时的效果&#xff0c;今天在倒计时的基础上&#xff0c;把代码修改了一下&#xff0c;改为计时器效果&#xff0c;实现了以下功能&#xff1a; 1.点击“开始”后&#xff0c;按秒计时且“开始”文字变为“停止”&#xff1b; 2.点击“停止”&#xff0c;计…

https【详解】与http的区别,对称加密,非对称加密,证书,解析流程图

http 和 https 的区别 http 是明文传输&#xff0c;敏感信息容易在传输过程中被劫持https http加密&#xff0c;劫持了也无法解密 https 用到的加密方式 https 同时使用了对称加密和非对称加密&#xff0c;之所以没有全部使用非对称加密&#xff0c;是因为非对称加密的运算更加…

JavaScript:export 和 export default

文章目录 exportexport defaultexport 和 export default都使用 在JavaScript ES6的模块系统中&#xff0c;export 和 export default 都是用来导出模块中对外可见的变量、函数、类或对象的语法&#xff0c;但是它们的作用和使用方式有所不同&#xff1a; export export 关键字…

四种垃圾回收算法

1.标记清除算法 该算法先标记&#xff0c;后清除&#xff0c;将所有需要回收的算法进行标记&#xff0c;然后清除&#xff1b;这种算法的缺点是&#xff1a;效率比较低&#xff1b;标记清除后会出现大量不连续的内存碎片&#xff0c;这些碎片太多可能会使存储大对象会触发GC回…

【设计模式】观察者模式及函数式编程的替代C++

本文介绍观察者模式以及使用函数式编程替代简单的策略模式。 观察者模式 观察者模式是一种行为型设计模式&#xff0c;它定义了一种一对多的依赖关系&#xff0c;当一个对象的状态发生改变时&#xff0c;其所有依赖者都会收到通知并自动更新。 当对象间存在一对多关系时&#…