能否为CSS自定义属性设置无操作回退值以保留原有样式?
Firefox userChrome.css Shadow DOM 样式问题解决方案
Firefox的userChrome.css功能存在一项限制:无法定位单个Shadow DOM。当为Shadow DOM元素设置样式时,所有包含该元素的Shadow DOM都会被应用此样式。
一种常见解决方案是为特定Shadow宿主元素声明可被子元素继承的自定义属性,以此控制对应宿主的Shadow DOM样式:
#some-shadowhost { --host-value: value; }
但该方案存在缺陷:在未被目标选中的Shadow DOM中,由于自定义属性未定义,var()语句失效,被设置的属性会被视为unset,导致原有样式被清除。
问题
能否设置一个无操作的回退值,避免清除原有样式?
编辑补充:设置空回退值
var(--custom-property,)或initial作为回退值都无法实现“无操作”,仍会清除原有样式。
解决方案
可以将自定义属性本身作为回退值,写法如下:
selector { property: var(--custom-property, var(--custom-property)); }
当--custom-property未定义时,回退值会引用自身(同样未定义),此时浏览器会忽略这个var()声明,保持元素原有的样式,不会将属性重置为unset。
内容的提问来源于stack exchange,提问作者loxia_01
相关产品推荐
相关产品推荐

