Sass 与浏览器兼容性
发布于 2017 年 2 月 11 日,作者 Natalie Weizenbaum
Sass 的核心设计原则之一始终是**尽可能少地了解 CSS**。作为 CSS 预处理器,我们当然需要了解 CSS 的语法,但我们尽可能地避免关注语义——样式背后的含义。这意味着 Sass 并不了解哪些属性是有效的,哪些 HTML 元素实际存在,甚至在很大程度上,大多数 @规则的语法是什么。
我们从这一点中获得了很大的好处。Sass 对 CSS 的内置知识越少,它就越不可能与新的 CSS 功能配合得不好。想象一下,每次你想使用新的 CSS 属性时都要提交功能请求——那会很糟糕!相反,旧版本的 Sass 会愉快地继续工作,除非实际语法发生改变,而这种情况要少得多。
由于这种解耦,我们从未需要过多地担心浏览器兼容性。Sass 只会将它收到的 CSS 传递下去。由用户来决定哪些功能在哪里有效,这给了他们很大的灵活性,并让我们设计师少了一个艰难的决定。
但是,尽管有这种总体策略,但总有一些情况需要 CSS 知识。一个重要的例子是 @extend
,它需要了解选择器的含义才能正确地将它们统一起来并消除重复项。属性值有时也需要语义知识——例如,我们必须知道如何解释颜色。
其中一个案例突然跳出来咬了我们。很久以前,我们决定始终将透明颜色作为关键字 transparent
输出,因为从 IE6 到 IE8 都支持它,而替代的 rgba()
语法不支持。但事实证明,情况对更新的版本来说恰恰相反:在 IE10 中,带有 background-color: transparent
的元素不会触发 :hover
样式,而带有 background-color: rgba(0, 0, 0, 0)
的元素则会触发。谢谢,IE!
因此,我们面临着两难的抉择。保留现有的行为,它与没有人使用的旧版浏览器兼容,还是选择一种在现代浏览器中效果更好的新行为?答案非常明确:我们决定始终输出 rgba(0, 0, 0, 0)
。
此外,我们希望制定一个通用的规则来指导我们确定哪些浏览器是过时的,哪些浏览器我们将继续支持(无论这对于该行为的意义如何)。我们决定,如果更改会对根据 StatCounter GlobalStats 的全球浏览器市场份额不足 2% 的用户造成负面影响,我们愿意进行更改。
此限制并非一成不变。我们保留将来更改此限制的权利,以及做出可能影响更多浏览器的个人决定的权利。但这是我们正在关注的总体指南,我们希望大家知道。