作用域 CSS 回来了,你知道吗?( 二 )


作用域 CSS 回来了,你知道吗?

文章插图

作用域 CSS 回来了,你知道吗?

文章插图
这里的问题是,选择器的特异性仍然是优先的,所以如果外部范围以比内部更高的特异性针对一个元素 , 外部范围的样式将会应用 。
这样,当两个范围针对同一个元素时,你可以控制哪一个优先 。而不是总是让内部范围赢 , 你可以调整选择器的特异性,使得更高特异性的选择器优先 , 不管它属于哪个范围 。
当你不希望这种行为时,你有几种方法可以防止它 。你可以使用级联层来使一个组件——或者一个组件的某些部分——优先于另一个 。或者,你可以应用一个内部范围约束到外部范围,以防止它发生 。在尝试了一段时间的范围后,我觉得这是一个正确的平衡 。它给了你最大的控制权 , 而不是让你受制于级联的一套严格的规则 。
这是一个游戏的转折点如果你开发过大型应用,并且不得不依赖 CSS-in-JS 库来防止类名冲突,作用域 CSS是个很好的选择 。如果你使用了复杂的BEM类名系统,并努力使所有的选择器特异性保持一致,想想这可以带来的自由 。如果你曾经使用过shadow DOM来隔离样式,但觉得它过于重手,这是一个更好的方法(当然,shadow DOM仍然有它的用途) 。
以下只是我会尝试的一些想法:
  • 定义一个组件的部分,有一个内部边界 , 部分没有,所以它的“chrome”样式(即包装器、切换按钮等)不影响其子内容,但它可以影响文本内的外观 。
  • 在不同的级联层上定义一个组件的部分,这样它可以影响其包含的范围,但仍然容易在更高的层次上覆盖 。
  • 嵌套的颜色主题 。
  • 在博客文章中更容易地防止样式冲突 。
  • 容器查询—我们能通过混合和匹配来提出什么?
我们需要更多的浏览器支持到目前为止,Chrome 似乎已经支持了—他们已经有了第一个工作原型几个月了 。它可能稍微落后于规范的最新变化,所以如果你玩一下,要留意一些即将到来的小变化 。




推荐阅读