为什么min()(或max())不能与无单位0一起使用?

我一直在寻找答案,但是找不到任何有用的信息。我正在尝试将CS​​S中元素的top属性设置为max(0,120vh - 271px)。我已经尝试了几种变体:

  • top: max(0,120vh - 271px);
  • top: max(0,(120vh - 271px));
  • top: max(0,calc(120vh - 271px));

我的语法有问题吗? Chrome不断告诉我这是无效的属性错误。

为什么min()(或max())不能与无单位0一起使用?

实际上,我实际上是使用CSS变量作为数字。因此120vh实际上是var(--height)或类似的东西。当我使用CSS变量时,该行什么都不做。它不适用样式,我也没有收到任何警告。我在这里做什么错了?

我使用的是最新版本的Chrome(我相信是83),因此应该支持。

iCMS 回答:为什么min()(或max())不能与无单位0一起使用?

您需要向0添加一个单位,否则浏览器难以处理无单位值和带有单位的值之间的比较:

top: max(0px,120vh - 271px)

要了解这一点,您需要遵循the specification

min()max()函数包含一个或多个逗号分隔的计算,分别代表其中的最小(最大负数)或最大(最大正数)

然后进行计算:

calc()函数包含一个 calculation ,该值是一系列由运算符散布的值,并可能按括号分组(与<calc-sum>语法匹配)

因此,calc()的所有规则基本上都适用于min() / max(),而0无效

注意:由于<number-token>始终被解释为<number><integer>,因此<length>不支持“无单位0” calc() s 。也就是说,宽度calc(0 + 5px);无效,即使两个宽度都为0;宽度:5px;是有效的。 ref

相关:Why doesn't css-calc() work when using 0 inside the equation?

您可能会感到惊讶,但是使用top:0是有效的,而top:calc(0)却无效。为了使后者有效,它必须为top:calc(0px)min() / max()

的逻辑相同

需要注意的是,clamp()也同样适用于max(MIN,min(VAL,MAX))

本文链接:https://www.f2er.com/2079595.html

大家都在问