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;形参指定默…

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

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

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

第一章 是什么 机器学习&#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;可…

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

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

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

站在讲台上的老师&#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;一般把纵轴当作因变量、把横轴…

JavaScript实现的计时器效果

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

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

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

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

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

Spring中Bean的作用域、实例化方式、生命周期、循环依赖问题

Spring中Bean的作用域、实例化方式、生命周期、循环依赖问题 一、Bean的作用域1.singleton2.prototype3.其他scope值 二、Bean的实例化方式1.通过构造方法实例化2.通过简单工厂模式实例化3.通过factory-bean实例化4.通过FactoryBean接口实例化5.BeanFactory和FactoryBean的区别…

【大厂AI课学习笔记NO.60】(13)模型泛化性的评价

我们学习了过拟合和欠拟合&#xff0c;具体见我的文章&#xff1a;https://giszz.blog.csdn.net/article/details/136440338 那么今天&#xff0c;我们来学习模型泛化性的评价。 泛化性的问题&#xff0c;我们也讨论过了&#xff0c;那么如何评价模型的泛化性呢&#xff1f; …

激光SLAM技术助力富唯智能复合机器人的应用场景无限拓展

随着科技的不断进步&#xff0c;智能机器人已成为现代工业、服务、医疗等多个领域的重要角色。而在这一变革中&#xff0c;激光SLAM技术发挥着至关重要的作用。特别是对于富唯智能复合机器人来说&#xff0c;激光SLAM技术不仅提升了其智能化水平&#xff0c;更使其应用场景变得…

【促销定价】背后的算法技术3-数据挖掘分析

【促销定价】背后的算法技术3-数据挖掘分析 01 整体分析1&#xff09;整体概览2&#xff09;类别型特征概览3&#xff09;数值型特征概览 02 聚合分析1&#xff09;天维度2&#xff09;品维度3&#xff09;价格维度4&#xff09;数量维度 03 相关分析1&#xff09;1级品类2&…

无公网ip环境使用DS file软件远程访问内网群晖NAS中储存的文件

文章目录 1. 群晖安装Cpolar2. 创建TCP公网地址3. 远程访问群晖文件4. 固定TCP公网地址5. 固定TCP地址连接 DS file 是一个由群晖公司开发的文件管理应用程序&#xff0c;主要用于浏览、访问和管理存储在群晖NAS&#xff08;网络附加存储&#xff09;中的文件。这个应用程序具有…

echarts如何实现3D饼图(环形图)?

一、实现的效果 二、具体步骤 1.安装依赖 npm install echarts 2.引入echarts import * as echarts from echarts; 注意&#xff1a;这里需要用到echarts-gl&#xff0c;必须单独引入才可以 import echarts-gl; 3.echarts部分代码 我知道这部分内容很多&#xff0c;但只要cv…

羊大师揭秘羊奶与健康,美味的保健佳品

羊大师揭秘羊奶与健康&#xff0c;美味的保健佳品 羊奶确实是一种美味且健康的保健佳品&#xff0c;其独特的营养成分和风味使其成为许多人的健康选择。以下是一些羊奶与健康的关系&#xff1a; 营养丰富&#xff1a;羊奶含有丰富的蛋白质、脂肪、矿物质和维生素&#xff0c;…

ruoyi-nbcio-plus的Vue3前端升级组件后出现的问题(一)

更多ruoyi-nbcio功能请看演示系统 gitee源代码地址 前后端代码&#xff1a; https://gitee.com/nbacheng/ruoyi-nbcio 演示地址&#xff1a; http://122.227.135.243:9666 更多nbcio-boot功能请看演示系统 gitee源代码地址 后端代码&#xff1a; https://gitee.com/nbach…