这个问题与StackOverflow上的一些其他问题类似,但我找不到任何适用于我的情况和非弃用方法的答案(我开始想也许没有任何好的解决方案)。
假设我们有一个包含按钮、列表、链接等通用样式的main.css文件。因此,它只是一个包含我们希望在整个应用程序中重用的通用样式的标准.css文件。而我们希望将相同的样式应用于具有Shadow DOM的Web组件。
据我所知,有几种方法可以实现这一点:
- 使用已弃用的方法之一:::shadow,>>>, / deep /选择器。但这些选择器现在已经被弃用了,所以我认为这不是一个往前推进的好方法。
- 使用css变量。如果需要设置几个属性,则此方法适用于定制目的。但是,如果我们想要从main.css文件迁移10-20个常用样式,这种方法过于复杂。
- 在Shadow DOM内部使用@import语句或“link”标记。它会起作用,但它会为每个组件复制所有样式。如果我们有10个Web组件,最终将得到完全相同的10个副本。这听起来也不像足够好的解决方案。特别是如果我们有很多共同的样式,从性能角度来看可能是不好的解决方案。
- 完全不使用Shadow DOM并使用全局样式:) 但这不是当前问题的解决方案。
我还查看了Angular框架中(我查看的是Angular 5版本)如何解决相同的问题。当我将封装行为设置为Native时,它实际上只是复制样式(就像上面第3种描述的那样),我认为这不是最好的方式(但也许是目前存在的最佳方式)。
那么,有没有人知道是否有其他方法可以解决这个问题,而不会出现上述缺点?听起来当前Shadow DOM的缺点带来的问题比它试图解决的问题还要多。