javascript - 可以依靠 CSSStyleDeclaration.setProperty() 来验证 CSS 属性吗?
问题描述
以下似乎在主要浏览器上是一致的:
const stylesheet = document.createElement('style');
document.head.appendChild(stylesheet);
const sheet = document.styleSheets[0];
sheet.addRule('.temp', '{}', 0);
const style = sheet.cssRules[0].style;
console.log(style.color); // ""
style.setProperty("color", "*****");
console.log(style.color); // ""
style.setProperty("color", "red")
console.log(style.color); // "red"
但我想知道:可以style.setProperty("color", "*****")
依靠不设置属性,或者这只是目前主流浏览器上的一个巧合一致的功能。
解决方案
如果“依赖”你的意思是它在标准中指定,而不是它是。
相关标准是 CSSOM 和setProperty它说
- 令组件值列表为属性属性解析值的结果。
- 如果组件值列表为空,则终止这些步骤。
并解析它所说的值
- 令 list 为通过调用 parse a list of component values from value 返回的值。
- 匹配列表与 CSS 规范中属性属性的语法。
- 如果上述步骤失败,则返回 null。
- 返回列表。
因此提供“*****”不在允许的颜色值列表中,将返回 null
然后为了得到style.color
,它说
骆驼大小写属性属性在获取时必须返回调用 getPropertyValue() 的结果,参数是对骆驼大小写属性的 CSS 属性算法运行 IDL 属性的结果。
然后对于getPropertyValue()它说
- 如果 property 是声明中 CSS 声明的属性名称的区分大小写匹配,则返回调用 serialize a CSS value 的结果并终止这些步骤。
最后,空值被序列化为空字符串。
推荐阅读
- reactjs - 如何为松弛克隆创建新通道按钮
- go - 如何从 Go 模板调用外部程序
- sql - 插入时的 SSIS 错误 - 维度表中的新主键时出错
- java - 一种递归方法和一种迭代方法的空堆栈
- android - 拦截 NavigationUI.onNavDestinationSelected() 以使用“inclusive = true”使 backstack 弹出
- c - 蓝牙通信延迟大
- mysql - Mysql - 如何合并两个不重复的 json 字符串数组?
- php - PHP datediff 过日问题
- elasticsearch - 未根据 ES 查询中传递的大小参数进行聚合
- javascript - 没有窗口的窗口属性