也许 CSS 自定义属性最基本和最明显的用途是设计令牌。颜色、字体、间距、时间以及您在设计网站时可以从中提取的其他设计原子位。如果您几乎只从设计令牌中提取值,那么您将走向干净的设计以及通常是网页设计目标的一致专业外观。事实上,我认为我写过正是这一点导致了实用程序类框架的流行。
我认为部分流行度是由于,如果您从这些预配置的类中进行选择,设计最终会相当不错。您无法偏离轨道。您从经过精心设计以使其看起来良好的有限值集中进行选择。
我正在说这个(使用定义这些类作为单一样式作业令牌的样式表)
<h1 class="color-primary size-large">Header<h1>
…与这个具有相似的价值主张
html {
--color-primary: green;
--size-large: 3rem;
/* ... and a whole set of tokens */
}
h1 {
color: var(--color-primary);
font-size: var(--size-large);
}
两者都有零构建版本。例如,Tachyons 是一个现成的样式表,其中包含大量您只需使用的实用程序类,而 Windi 则是一个带有及时编译器等功能的完整高级工具。Pollen 是一个您只需使用的自定义属性库,而全新的 Open Props 则具有 及时编译器,仅提供使用的自定义属性。
好的,所以,Open Props!

整个内容实际上只是一堆您可以用来设计内容的 CSS 自定义属性。它就像您样式的庞大起点。它表示“将所有内容都设为自定义属性”,但以我们已经习惯的设计令牌的方式,其中它们是有限的预定数量的选择。
类比对人们来说很清晰
我猜吸引人们使用它的原因是其美丽的默认值。
它不做的是阻止您必须命名事物,我知道实用程序类爱好者非常喜欢这一点。在这里,您需要继续使用普通的 CSS 选择器(如命名类)来选择事物并像“正常”一样对其进行样式设置。但是,您不是手工制作自己的值,而是从这些自定义属性中提取值。
整个基础内容(您可以在此处查看源代码)在网络上占用 4.4kb(无论如何,这是我的 DevTools 显示的内容)。这并不包括您编写的用于使用自定义属性的 CSS,但它是一个非常小的开销。有一些额外的 PropPack 会增加大小(但它们也非常小),如果您担心大小,这就是整个及时编译器的用途。您可以在StackBlitz 上试用它。
对我来说似乎非常棒!我会使用它。我喜欢它最终只是普通的 CSS,因此没有任何您无法做的事情。随着 CSS 的发展,您将保持良好的状态。
自从推出以来,我一直积极思考 openprops。我还发现了 Pollen,它与之类似,但从第一次浏览来看,它涵盖的内容更少。
我的挑战在于理解一个为我规定值的属性库。我意识到这些值通常具有很好的缩放比例并且通常很棒,但这也是我在使用 Material Design 时遇到的问题。即使我没有,我与之合作过的每个公司设计师都有他们自己的值(颜色、字体、大小比例等),他们希望我实现(如果我是前端开发人员)。
但我认为这只是我需要更多思考的事情,因为 OP 绝对包含了一些非常方便的功能,并且还有整个 postcss 未使用变量姊妹包。
我认为使这种工具成为杀手级工具的是一个超级方便的主题滚轮,您可以使用它来播种这些值。Chris,您怎么看?
看起来它是可定制的
您几乎肯定会在“大型”项目中执行此操作。我承认我的大脑通常不会选择“从预选值堆中挑选”这种方法,但这是我自己的怪癖,我认为行业正在表明他们实际上喜欢这种方法。
也许可以缓解越墙问题的是类似于 Figma 插件的东西,这意味着设计师可以从与开发人员相同的可能值列表中进行选择。
是的,我看到了那句话。老实说,我认为这句话有点令人困惑。我感觉不舒服代表 Adam 说话,所以我必须先说一句“我认为”,但这是我对这句话的看法
“从 JS 中映射 props”
我认为断言的是,您实际上可以在 javascript 配置文件中将值更新为您喜欢的任何值,并基本上重新编译。完全有效。我实际上会考虑这样的事情,但我非常确定 97% 以上的人不会 :smile
“自定义构建”——我实际上认为要执行此操作,您需要分叉存储库并指向除
lib:all
之外的其他内容https://github.com/argyleink/open-props/blob/main/package.json#L74
您可以看到他有很多较小的包脚本用于构建单独的最小化内容。
此外,我在这里询问了此事 https://github.com/argyleink/open-props/discussions/119
另一件事是,通过与 Adam 来回聊天,他似乎仍在继续添加此库并不断对其进行调整以使其变得更好(显然是一件好事!)。因此,如果他听到足够的反馈,我会惊讶地发现他在某个时候会添加更方便的东西来允许自定义。
但这回到了您的观点,Chris,我相信您的观点是正确的,许多人更喜欢规定的值(可能更多是因为未使用的值可以通过 postcss jit 删除)。
我也同意双向 Figma 设计令牌的梦想必须很快到来。我的意思是,这就是整个 W3C 小组正在准备的,所以我想我们会看到的。Figma/Sketch 等的原生内容当然将是理想的选择。