【发布时间】:2012-11-26 02:01:29
【问题描述】:
让我们看看这个 CSS 规则:
#foo { color: red; }
如您所见,上述规则的声明块包含一个声明,即color: red。但是,根据我对 CSS 标准的解释,上述声明块还包含第二个空声明,它位于字符 ; 和 } 之间。
#foo { color: red; }
^ --- an empty declaration is located here
我在 Stack Overflow 上提出这个问题,以确定我的解释是否正确,即上述 CSS 规则中是否确实存在第二个空声明。
顺便说一句,我使用的是 CSS 2.1 标准,特别是 "Chapter 4: Syntax",因为 "CSS Syntax" 模块已经过时,使用起来不安全。
好的,让我解释一下。我的解释基于以下定义:
-
标准规定,在声明块中,分号是分隔符,出现在各个声明之间:
声明块以左大括号 ({) 开始,并以匹配的右大括号 (}) 结束。在两者之间必须有零个或多个分号分隔 (;) 声明的列表。
所以,根据上述定义,分号只能出现在在两个声明之间,即分号必须在声明之前和声明之后。
-
标准将声明定义为:
声明要么为空,要么由属性名称、冒号 (:) 和属性值组成。
上面的定义声明一个声明可以是空的。不幸的是,该标准没有定义术语“空声明”,该术语也没有在标准的其他任何地方提及。
让我们回到例子:
#foo { color: red; }
上述规则是有效的 CSS。通过应用分号的定义(从上面),此规则中的分号必须在前面和后面都有一个声明。但是,分号后面是右花括号(结束声明)。为了解释这个矛盾,我在;和}之间插入一个空声明,并提供这个定义:
空声明是在声明块中需要声明但未找到的位置中没有声明。
这种对标准的解释是否正确,声明块是否确实包含两个声明?
【问题讨论】:
-
抱歉不敏感,但为什么要关心呢?也许有人可以向我解释一下。
-
@njk 它叫做pedantry。我没有选择迂腐,我的大脑就是这样工作的。
-
我认为你应该进一步评估如果有......两个,是的,分号后有两个空格会发生什么。那么会有两个空声明吗?我们可能永远不会知道。
-
您没有在这里回答您自己的问题吗:stackoverflow.com/a/5732519/116614?
-
@mellamokb 否。该答案仅使用我的解释,但我显然无法验证我自己的解释。为此我需要第二意见(我猜这叫做同行评审),这就是我问这个问题的原因。
标签: css