让我们看一下这个 CSS 规则:
#foo { color: red; }
如您所见,上述规则的声明块包含一个声明,即color: red
. 但是,根据我对 CSS 标准的解释,上面的声明块还包含第二个空声明,它位于 chars;
和}
.
#foo { color: red; }
^ --- an empty declaration is located here
我在 Stack Overflow 上提出这个问题,以确定我的解释是否正确,即上述 CSS 规则中是否确实存在第二个空声明。
顺便说一句,我使用的是 CSS 2.1 标准,特别是“Chapter 4: Syntax”,因为“CSS Syntax”模块已经过时,使用起来不安全。
好的,让我解释一下。我的解释基于以下定义:
该标准规定,在声明块中,分号是出现在各个声明之间的分隔符:
声明块以左花括号 ({) 开始,并以匹配的右花括号 (}) 结束。在两者之间必须有零个或多个分号分隔 (;) 声明的列表。
所以,根据上面的定义,分号只能出现在两个声明之间,即分号必须在声明之前和声明之后。
该标准将声明定义为:
声明要么为空,要么由属性名称、后跟冒号 (:) 和属性值组成。
上面的定义表明声明可以为空。不幸的是,该标准没有定义术语“空声明”,该术语也没有在标准的其他任何地方提及。
让我们回到这个例子:
#foo { color: red; }
上述规则是有效的 CSS。通过应用分号的定义(从上面),此规则中的分号必须在前面和后面都有一个声明。但是,分号后面是右花括号(结束声明)。为了解释这个矛盾,我在 and 之间插入了一个空声明;
,}
并提供了这个定义:
空声明是在声明块中需要声明但未找到的位置中没有声明。
这种对标准的解释是否正确,声明块是否确实包含两个声明?