CSS 自定义属性(变量)

19 篇文章 2 订阅
订阅专栏

一、概念

自定义属性(有时候也被称作CSS 变量或者级联变量)是由 CSS 作者定义的,它包含的值可以在整个文档中重复使用。由自定义属性标记设定值(比如:--main-color: black;),由var()函数来获取值(比如: color: var(--main-color);)。
大量的CSS代码,通常也会有许多重复的值。例如,同样一个颜色值可能在成千上百个地方被使用到,如果这个值发生了变化,需要全局搜索并且一个一个替换。自定义属性在某个地方存储一个值,然后在其他许多地方引用它。另一个好处是语义化的标识。比如,--main-text-color会比 #00ff00 更易理解,尤其是这个颜色值在其他上下文中也被使用到。自定义属性受级联的约束,并从其父级继承其值。

二、基础用法

声明一个自定义属性,属性名需要以两个减号(--)开始,属性值则可以是任何有效的CSS值。和其他属性一样,自定义属性也是写在规则集之内的,如下:

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

如上若是,element表示该变量的规则集(作用域集),可以是某个具体的类名或者id等选择器。
使用一个局部变量时用var()函数包裹以表示一个合法的属性值,引用该变量值,如下:

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

三、规则集作用域

element规则集作用域范围仅用于匹配当前选择器及其子孙,这和通常的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"2em
  • 对于元素class="four"10px (继承自父属性)
  • 对于元素class="one" :非法值,会变成自定义属性的默认值
    所以,通常的最佳实践是定义在根伪类:root下,这样就可以在HTML文档的任何地方均可访问,如下:
:root {
  --main-bg-color: brown;
}

当然这条规则不是绝对的,如果有理由去限制你的自定义属性,那么就应该限制。此外,自定义属性名是大小写敏感的,--my-color--My-color会被认为是两个不同的自定义属性。

四、自定义属性备用值

var()函数可以定义多个备用值(fallback value),当给定值未定义时将会用备用值替换。
备用值并不是用于实现浏览器兼容性的。如果浏览器不支持CSS自定义属性,备用值也没什么用。它仅对支持CSS自定义属性的浏览器提供了一个备份机制,该机制仅当给定值未定义或是无效值的时候生效。
函数的第一个参数是自定义属性的名称。如果提供了第二个参数,则表示备用值,当自定义属性值无效时生效。第二个参数可以嵌套,但是不能继续平铺展开下去了,例如:

.two {
  color: var(--my-var, red); /* 如果--my-var未定义或者无效,则使用red */
}

.three {
  background-color: var(--my-var, var(--my-background, pink)); /* pink if --my-var and --my-background are not defined */
}

.three {
  background-color: var(--my-var, --my-background, pink); /* Invalid: "--my-background, pink" */
}

注意:第二个例子展示了如何处理一个以上的 fallback。该技术可能会导致性能问题,因为它花了更多的时间在处理这些变量上。

五、自定义属性的有效性和值

传统的 CSS 概念里,有效性和属性是绑定的,例如,如果对某个颜色属性赋予了长度值,则css会有错误提示,例如color:16px,是不允许的,也是无意义的。但这对自定义属性来说并不适用,当自定义属性值被解析,浏览器不知道它们什么时候会被使用,所以必须认为这些值都是有效的。
除此,即便这些值是有效的,但当通过 var() 函数调用时,它在特定上下文环境下也可能不会奏效。
当浏览器遇到无效的 var() 时,会使用继承值或初始值代替。如下。
无效自定义属性

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

  • 检查属性color是否为继承属性。是,但是<p>没有任何父元素定义了color属性。转到下一步。
  • 将该值设置为它的默认初始值,比如black
    段落颜色并不是蓝色,因为无效代换导致了它被替换成了默认初始值的黑色。如果你直接写color: 16px 的话,则会导致语法错误,而前面的定义则会生效(段落显示为蓝色)。
    备注:当 CSS 属性 - 值对中存在语法错误,该行则会被忽略。然而如果自定义属性的值无效,它并不会被忽略,从而会导致该值被覆盖为默认值。

六、JavaScript获取或设置自定义变量

<!DOCTYPE html>
<html lang="en">
<head>
  <meta charset="UTF-8">
  <meta http-equiv="X-UA-Compatible" content="IE=edge">
  <meta name="viewport" content="width=device-width, initial-scale=1.0">
  <title>Document</title>
  <style>
    :root {
      --text-color: 16px;
    }
    .clr {
      color: blue;
      color: var(--text-color);
      --my-var: yellow;
    }
  </style>
</head>
<body>
  <p id="pg" class="clr">This paragraph is initial black.</p>

  <script>
    let bodyObj = document.body;
    let pObj = document.getElementById('pg');
    // 获取自定义属性值
    let rootVar = getComputedStyle(bodyObj).getPropertyValue("--text-color");
    let myVar = getComputedStyle(pObj).getPropertyValue("--my-var");
    console.log(rootVar, myVar);

    // 修改自定义属性值
    bodyObj.style.setProperty("--text-color","red");
    console.log(getComputedStyle(bodyObj).getPropertyValue("--text-color"));
  </script>
</body>
</html>

运行结果:
运行结果

自定义css样式
我本无名
01-06 1743
所谓cssCSS是Cascading Style Sheets(层叠样式表)的缩写。是一种对web文档添加样式的简单机制,属于表现层的布局语言。            CSS2.0中的盒模型是关系到设计中排版定位的关键,任何一个选择符都遵循盒模型规范,例如、、……盒模型包含(外补丁)margin,(背景颜色)background-color,(背景图片)background-image,(内
Sassmixin准备切换到使用CSS自定义属性又名CSS变量
08-10
在现代Web开发中,CSS已经发展出许多强大的新特性,其中CSS自定义属性(也称为CSS变量)是其中之一。这个特性允许开发者在CSS中定义变量,以提高代码的可维护性和复用性。Sass mixin虽然在过去是实现类似功能的一个...
CSS自定义属性变量
weixin_45092437的博客
05-28 2236
CSS自定义属性,又称为CSS变量或级联变量,用于定义一个带有值的、可重复使用的CSS属性变量)。其包含的值可以在其作用域内的任意属性上重复使用,在使用时需要借助var()函数获取自定义属性的值。当自定义属性的值发生变化时,所有使用该自定义属性CSS属性都会随之变化。
CSS 【详解】自定义属性(又名 CSS 变量
最新发布
朝阳39的博客
07-10 1044
可以是任意值或表达式 变量作用域 后代元素可以原封不动地继承祖先元素设置的CSS自定义属性值。 全局变量 变量值可以相互传递 css变量不能给自己赋值 css变量不能用于@media媒体特征的值 CSS变量作为content属性值没有任何效果 deepskyblue为缺省值,当–any-what无效时使用 deepskyblue 最终 body 的背景色为 transparent,因为background-color的初始值是transparentvar()函数只要第一个参数值可能有效,哪怕这个参数
css自定义属性
没得简介
07-20 333
要注意,定义这个自定义变量的所属,是限制该变量的作用范围,还是很方便的,虽然我一般不用css,只用less。
CSS自定义属性
12-22 264
CSS中,一个CSS自定义属性是以两个破折号(--)开始的任何名称     .block {  color: #8cacea;  --color: blue  }
学习CSS自定义属性
anxianxie0508的博客
07-23 99
css变量 今天看了阮一峰老师的博客,看到一篇关于css变量的文章。。。自己在这边整理一下。 1.声明css变量:   body{              --foo: #7F583F;   --bar: #F7EFD2;   }   用--来声明变量,原因很简单因为$foo被sass用掉了,@foo被less用掉了,所以css变量声明选择--foo。 ...
ember-cli-custom-properties:添加对组件CSS自定义属性变量)的支持
02-05
向组件添加对CSS自定义属性变量)的支持 安装 ember install ember-cli-custom-properties 产品特点 使用修饰符应用自定义属性 将组件属性映射到CSS自定义属性 快速,轻便的实施 仅在其绑定组件值更改时更新CSS...
ie11CustomProperties:IE11CSS变量自定义属性)polyfill
04-06
Internet Explorer 11的最完整的“自定义属性” polyfill。 在大约70'000个 已停产 IE11的市场份额正在稳步下降。 我个人不再需要支持IE11。 这就是为什么我决定停止从事该项目的原因。 特征 链接--bar:var(--foo) ...
postcss-import-json:导入JSON文件并生成CSS自定义属性变量
05-20
导入JSON文件并生成CSS自定义属性变量)。 用法 安装插件。 npm i -D @daltontan/postcss-import-json 添加到您的PostCSS配置: module.exports = { plugins: [ require('@daltontan/postcss-import-json'...
颜色:D2L调色板CSS自定义属性和Sass变量
02-06
D2L调色板CSS自定义属性和Sass变量是两种常见的颜色管理方法,它们为开发者提供了灵活且可维护的颜色解决方案。本文将深入探讨这两种技术及其在Web开发中的应用。 首先,CSS自定义属性(也称为CSS变量)允许开发者...
CSS 自定义属性css变量使用方法
北极星的博客
02-03 1676
在 JavaScript 中,变量有作用域一说。它们可能是全局作用域,也有可能是局部作用域。那么在CSS中,CSS自定义属性也有这样的说法。:root (等同于html)选择器可以选择到 DOM 元素中或 document 树中最高顶级的元素。因此,在 :root 选择器中声明的CSS 自定义属性,其作用域的范围是全局范围,也就是全局作用域。局部作用域就是它所在的选择器的有效范围。同一个 CSS 变量,可以在多个选择器内声明。读取的时候,优先级最高的声明生效。
CSS自定义属性
小秀的博客
06-23 1214
CSS自定义属性
CSS--自定义属性--使用/教程/实例
IT利刃出鞘的博客
12-19 1366
​ 本文用示例介绍CSS自定义属性的方法。 带--前缀的属性名表示带有值的自定义属性,比如--example--name,可通过var函数在全文档范围内复用。
css自定义属性
weixin_43612234的博客
04-29 506
css自定义属性(基础篇) 今天早上坐车的时候看的微信公众号看到的文章 有需要的可以关注一下 前端早读课 设定一个值,任何值都可以使用。 ** css自定义属性:简单来说是开发者可以自主命名和使用css样式。** 1.自定义属性以 --为空头 .foo{ --theme-color:gray; } 2.使用 var() .button{ background-color:var...
css 自定义属性
352328759的博客
04-19 213
css 中使用 自定义属性必须通过 --x 的格式申明 用 var(x) 调用 :root{} 下是全局 声明块下是局域 /* -- 是不能少的 */ :root { --swq: red; } h1 { color: var(--swq); } js 中使用 css自定义属性可以通过 js 的 setProperty 控制 要注意自定义属性名仍然要以 “–” 开头 // 无效 document.documentElement.style.setProperty("defg", "3px"
CSS自定义属性:超越预处理器的新境界
与预处理器(如Sass、Less)中的变量不同,CSS自定义属性提供了一个更灵活、更动态的解决方案,可以直接在CSS中设置和更新,而无需重新编译。 首先,我们要理解CSS预处理器的变量功能。预处理器如Sass和Less引入了...
写文章

热门文章

  • element UI表格show-overflow-tooltip样式修改 4556
  • CSS 自定义属性(变量) 2705
  • 关于axios并发请求的用例 2271
  • ElementUI框架el-table组件中嵌入el-input输入框无法获取焦点、无法编辑问题 1922
  • CSS属性继承 661

分类专栏

  • 笔记 19篇
  • 版管理 2篇

最新评论

  • CSS 自定义属性(变量)

    写void_main的都是哈批: 控制台输出的第一行应该是 16px yellow

大家在看

  • 基于SpringBoot+Vue+uniapp微信小程序的小说阅读器的详细设计和实现
  • 【配送路径规划】基于matlab遗传算法求解带时间窗的电动汽车配送路径规划(目标函数:最小成本;约束条件:续驶里程、额定载重量、数量、起始点)【含Matlab源码 4138期】
  • NOI2003 逃学的小孩 50
  • 一元云购源码商城源码/英文版云购源码/全开源 可二开
  • 2024云购源码.全开源/带控制/多语言/运营版

最新文章

  • ElementUI框架el-table组件中嵌入el-input输入框无法获取焦点、无法编辑问题
  • 高级篇:webpack应用指南二
  • 高级篇:webpack应用指南一
2024年1篇
2023年4篇
2022年3篇
2021年11篇
2020年4篇

目录

目录

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值

玻璃钢生产厂家福安玻璃钢花盆花器梧州商场美陈广州透明玻璃钢雕塑定做玻璃钢雕塑工艺品打磨修补招聘网黄山frp玻璃钢雕塑商场美陈景观吊饰辽源玻璃钢雕塑推荐商场外墙美陈装饰工艺昌吉玻璃钢雕塑定制南京玻璃钢雕塑设计有限公司玻璃钢雕塑怎么翻吉安环保玻璃钢雕塑联系方式永州商场美陈棒棒糖玻璃钢雕塑美陈商场爱心气球滁州玻璃钢人物雕塑设计二手玻璃钢卡通动漫雕塑黄骅玻璃钢关公雕塑组合式玻璃钢花盆开发厦门玻璃钢 雕塑通化商场春节美陈玻璃钢红军雕塑出售宜宾玻璃钢海豚雕塑价格淮安玻璃钢雕塑设计方案玻璃钢雕塑厂哪个靠谱欧式玻璃钢雕塑手工制作山东玻璃钢人物雕塑价格美陈商场怎么打开济南玻璃钢雕塑摆件研发公司新款玻璃钢花盆哪家好香港通过《维护国家安全条例》两大学生合买彩票中奖一人不认账让美丽中国“从细节出发”19岁小伙救下5人后溺亡 多方发声单亲妈妈陷入热恋 14岁儿子报警汪小菲曝离婚始末遭遇山火的松茸之乡雅江山火三名扑火人员牺牲系谣言何赛飞追着代拍打萧美琴窜访捷克 外交部回应卫健委通报少年有偿捐血浆16次猝死手机成瘾是影响睡眠质量重要因素高校汽车撞人致3死16伤 司机系学生315晚会后胖东来又人满为患了小米汽车超级工厂正式揭幕中国拥有亿元资产的家庭达13.3万户周杰伦一审败诉网易男孩8年未见母亲被告知被遗忘许家印被限制高消费饲养员用铁锨驱打大熊猫被辞退男子被猫抓伤后确诊“猫抓病”特朗普无法缴纳4.54亿美元罚金倪萍分享减重40斤方法联合利华开始重组张家界的山上“长”满了韩国人?张立群任西安交通大学校长杨倩无缘巴黎奥运“重生之我在北大当嫡校长”黑马情侣提车了专访95后高颜值猪保姆考生莫言也上北大硕士复试名单了网友洛杉矶偶遇贾玲专家建议不必谈骨泥色变沉迷短剧的人就像掉进了杀猪盘奥巴马现身唐宁街 黑色着装引猜测七年后宇文玥被薅头发捞上岸事业单位女子向同事水杯投不明物质凯特王妃现身!外出购物视频曝光河南驻马店通报西平中学跳楼事件王树国卸任西安交大校长 师生送别恒大被罚41.75亿到底怎么缴男子被流浪猫绊倒 投喂者赔24万房客欠租失踪 房东直发愁西双版纳热带植物园回应蜉蝣大爆发钱人豪晒法院裁定实锤抄袭外国人感慨凌晨的中国很安全胖东来员工每周单休无小长假白宫:哈马斯三号人物被杀测试车高速逃费 小米:已补缴老人退休金被冒领16年 金额超20万

玻璃钢生产厂家 XML地图 TXT地图 虚拟主机 SEO 网站制作 网站优化