CSS 中的柯里化

Avatar of Chris Coyier
Chris Coyier

DigitalOcean 为您旅程的每个阶段提供云产品。立即开始使用 200 美元的免费额度!

有趣的是,我正好在查看 Utopia 的网站(这是一个响应式类型项目,我不得不承认我不完全理解),我偶然发现了一些他们展示的 CSS,看起来像这样

:root {
  --fluid-max-negative: (1 / var(--fluid-max-ratio) / var(--fluid-max-ratio));
  --fluid-min-negative: (1 / var(--fluid-min-ratio) / var(--fluid-min-ratio));
 
  ...
}

看到什么奇怪的地方了吗?这段代码使用了数学运算符,但没有用 calc() 函数将其包裹起来。

就在我的好奇心涌现之际,Utopia 的创建者 Trys Mudford 写了一篇博文

CSS 自定义属性中 : 后面的值不必是有效的 CSS。它不会导致任何错误,也不会使自定义属性失效。它不会在浏览器中被评估,直到被使用,或者更具体地说,被放置在 calc() 函数中。

这是一个人为的例子

:root {
  --padding: 1rem;
  
  /* These are meaningless alone */
  --padding-S: var(--padding) / 2;
  --padding-L: var(--padding) * 2;
}

.module--large {
  /* But they evaluate once they are in a calc() */
  padding: calc(var(--padding-L));
}

在我有限的理解中,柯里化就像返回函数的函数。我想这有点像上面提到的备用填充属性,有点像是主填充函数的派生函数(如果你能这样称呼它),并且你只在需要时调用和执行它们。