最近关于此主题的几条推文在网上疯传,其中一条来自 Adam Argyle,另一条来自 Mathias Bynes。这是一个很好的变化,让 CSS 更清晰。以前,每个颜色函数实际上都需要两个函数,一个用于透明度,另一个没有,这消除了这种需求,并将语法 更符合 CSS 语法。
让我在这里重制 Mathias 推文中的代码块
/* Old Syntax */
rgb(0, 128, 255)
rgba(0, 128, 255, 0.5)
hsl(198, 38% 50%)
hsla(198, 28%, 50%, 0.5)
/* New Syntax */
rgb(0 128 255)
rgb(0 128 255 / 50%)
hsl(198deg 28% 50%)
hsl(198deg 28% 50% / 50%)
lab(56.29% -10.93 16.58 / 50%)
lch(56.29% 19.86 236.62 / 50%)
color(sRGB 0 0.50 1 / 50%)
想法
- 浏览器的 支持 非常不错:除了 IE 11 之外。
- 如果您需要支持 IE 11,您可以预处理它(或者不使用它)。PostCSS 的 preset-env 可以实现,此外还有一个非常具体的插件 postcss-color-rgb(奇怪的是它不支持 HSL)。
- 如果您不喜欢它,您根本不需要使用它。任何浏览器都不会撤销对如此重要功能的支持。
- 切换的原因是肌肉记忆和一致的代码库,因为新的颜色函数(例如,
lab
、lch
和color
)将 *仅* 支持这种新的语法。 - 存在一种新的和旧的混合形式。您可以将不透明度值传递给
rgb()
,它仍然像rgb(255, 0, 0, 0.5);
一样工作。 - 如果您在 Sass 中需要它(据称 很痛苦 需要支持),有一个 奇怪的解决方法。我猜 Sass 最终会支持它。如果他们做不到,这是一种会导致人们放弃项目的刺。
- Prettier 负责从间距和语法的角度清理您的代码,它 *可以* 在这里进行干预并转换语法,但它 不会(Prettier 的立场是不改变 AST)。
- 我想 DevTools 会开始使用这种格式显示颜色,这将推动采用。
- 请记住,即使是十六进制颜色代码也有 新的花哨格式。
我真的很喜欢新的语法。
一直在用 post-css-env。
很遗憾 Sass 在使用新的 CSS 语法时变得越来越难用。
与 CSS 变量一样,我使用的是转义方法。
而不是那种奇怪的 case 解决方案。
CSS 选择器嵌套即将到来,它将让 SASS 变得过时。感觉现在投资 SASS 就像掉进了陷阱。
Internet Explorer 11 不支持无逗号语法,也不支持新的颜色空间。我还没有测试过旧的 Android 设备。
重点是,如果您的受众(或您客户的受众)根本支持 IE11,那么请在 RGB 语法中保留逗号。不要为了支持 IE11 支持的颜色空间(仅 RGB?)而费心重写您的 CSS 或预处理器。
相反,依靠渐进增强来设置带有逗号的 RGB 值,然后您可以用无逗号的 Lab 或 HSL 或其他任何值覆盖它们。
我对这种新的格式感到厌烦。
它一点也不清晰。
又是另一个不必要的更改,带来了混乱、弃用、困惑以及在复制时不必要的添加/删除逗号。
没有理由说明新的格式更好。仅仅是另一代人想要在错误的地方进行更改。
等等,朋友。一切都会好的。没有人强迫你使用新的语法,旧的语法将继续受到支持。保持冷静,继续着色!
这简化了不少东西。无需再为颜色函数添加多余的“a”。我要指出的是,在 hsl 中,第一个参数是度数,因此第一个示例应为“hsl(198deg 38% 50%)”。为什么这很重要?它显示了这里期望的有效值(0-360),就像“%”表示 0-100 的值一样。