未设置CSS自定义属性时返回到良好的默认值
我正在考虑使用CSS自定义属性作为web组件的主题化解决方案,但我不确定应用自定义属性的最佳方式,同时在自定义属性未指定的情况下保留良好的默认行为 示例:我创建了一个组件,其阴影树中包含一个未设置CSS自定义属性时返回到良好的默认值,css,Css,我正在考虑使用CSS自定义属性作为web组件的主题化解决方案,但我不确定应用自定义属性的最佳方式,同时在自定义属性未指定的情况下保留良好的默认行为 示例:我创建了一个组件,其阴影树中包含一个元素,并希望该组件的用户能够根据其应用程序品牌的需要对包含的按钮的前景和背景色进行主题化。此操作的DOM如下所示: <my-element> #shadow-root <style> button { background-color: var(--my
元素,并希望该组件的用户能够根据其应用程序品牌的需要对包含的按钮的前景和背景色进行主题化。此操作的DOM如下所示:
<my-element>
#shadow-root
<style>
button {
background-color: var(--my-element-background-color);
color: var(--my-element-color);
}
</style>
<button>
...
</button>
</my-element>
这是不幸的。查找每个要通过自定义属性公开的属性的默认值是一件痛苦的事情
但更大的问题是,这迫使人们将用户代理样式编码到组件中。从几个层面看,这似乎很糟糕
填充
这样的属性,其中值没有名称,默认值因浏览器而异(我认为关键字还没有得到广泛的支持,但这正是我们为这个问题设计的解决方案。)为什么不使用类?主题的使用者可以根据需要使用它。在页面外部定义的CSS类定义不会影响阴影DOM子树中的元素。感谢您指出
revert
。虽然看到大多数浏览器还没有实现这一功能令人难过,但很高兴知道至少标准在这里给出了答案。希望其他浏览器也能效仿WebKit的做法。
button {
background-color: var(--my-element-background-color, buttonface);
color: var(--my-element-color, buttontext);
}