CSS变量和计算中的错误:如何获得错误输出?

我开始使用CSS变量来尝试制作模块化的大小调整比例。但是我很快遇到了一些问题,这些问题忽略了CSS值,但是我看不出有什么错误的迹象。

让我们看一下该问题的最简单再现:

:root {
  --ratio: 1.25;
  --font-size-medium-heading: calc(var(--ratio) * 1rem);
  --font-size-large-heading: calc(var(--font-medium-heading) * var(--ratio)); /* note the typo in the var */
}

h1 {
  font-size: var(--font-size-large-heading);
}

我故意打错了打字,以查看会发生什么(我从变量名中省略了-size)。由于标题变小了,我尝试查询新CSS变量的值:

getcomputedStyle(document.documentElement).getPropertyValue('--font-size-large-heading') === ''

它返回了一个空字符串。

让我们前往Chrome的样式检查器,看看我是否收到警告标志⚠️:

CSS变量和计算中的错误:如何获得错误输出?

MDN建议使用CSS验证器。因此,让我们尝试一下:https://jigsaw.w3.org/css-validator/validator

CSS变量和计算中的错误:如何获得错误输出?

我的猜测是,该验证器并不是真正的最新版本(如果有人仍在使用它)。

更新 我了解到,根据规范,这是有效声明,但其计算时间值无效。我想知道这些,因为它只是将真正的问题隐藏在一个非常频繁的错误中(如果您花了一天的时间发现Angular期望模板中使用"'thing'"而不是"thing",您将了解没有关于无效值的输出是多么糟糕。

是否可以获取有关计算时间无效的CSS varcalc值的错误输出?

joey_w_momo 回答:CSS变量和计算中的错误:如何获得错误输出?

首先是spec

如果一个属性包含一个或多个var()函数,并且这些函数在语法上有效,则必须假定整个属性的语法在解析时都是有效的。仅在替换var()函数之后,才在计算值时对语法进行检查。

这就是为什么您不会在chrome devtool中看到黄色三角形的原因,因为从语法角度来看它是有效的。


spec着眼于第四条规则

  1. 否则,包含var()函数的属性在计算值时间无效

如果声明包含 var(),该声明引用具有保证无效值的自定义属性,则声明在计算值时可能无效 strong>

代码的第三行包含 var(),该变量引用具有保证无效值

的css变量

为什么?

自定义属性的初始值为guaranteed-invalid value。根据{{​​3}}的定义,使用var()将自定义属性替换为其值作为自定义属性,会使引用该属性的属性在计算值时间无效。

基本上不存在的css变量会创建它,并且它的初始值是保证无效的值。


该初始值计算得出的是什么?

此值序列化为空字符串,但实际上将空值写入自定义属性(例如--foo: ;)是有效(空)值,而不是保证无效的值。如果出于某种原因想要将变量手动重置为保证无效的值,则可以使用关键字initial来实现。

这就是getComputedStyle(document.documentElement).getPropertyValue('--font-size-large-heading')返回“空字符串”的原因。(保证无效的值)

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

大家都在问