CSS 3仍然允许省略最后的分号吗?

hea*_*run 10 css

CSS语法模块级别3规范即将到来的草案中似乎存在破坏(即向后不兼容)的更改:现在可能需要在块中的最后一个声明之后使用尾随分号.

比较旧的措辞(W3C 2003年8月13日工作草案):

4.8.规则集,声明块和选择器
声明块(在下文中也称为{} -block)以左大括号({)开头,以匹配的右大括号(})结束.在它们之间必须有一个零或多个以分号分隔(;)声明的列表.

与新的(编辑草案2012年6月14日):

2. CSS语法的描述
规则以选择器(由Selectors规范定义)开始,然后有一个包含一系列声明的{}包装块.选择器指定声明将应用于哪些元素.每个声明都有一个属性名称,后跟冒号和属性值,并以分号结束.

(强调我的).

所以那些漂亮的短形式,例如:

em { color: lime }
Run Code Online (Sandbox Code Playgroud)

(目前在CSS Color Module Level 3建议中作为有效示例提供)将不再验证?

如果有人对整个3级草稿收藏有更多了解,请验证吗?对于面向未来的样式表,我们真的必须在规范最终确定之前彻底检查现有的CSS文件(如果缺少则插入分号)或者我是否误解了某些内容?

Nic*_*hen 6

看起来规范中目前存在歧义.

您正确地指出2.语法描述部分规定以分号结束每个规则:

每个声明都有一个属性名称,后跟冒号和属性值,并以分号结束.

同时,在3.6.8节中描述了解析自动机.声明值模式读取没有分号的右括号正确地同时结束声明和当前规则:

令牌

将当前声明附加到当前规则的值.从打开规则堆栈中弹出当前规则,并将其附加到新当前规则的值.切换到当前规则的内容模式.

所以根据3.6.8尾随分号是可选的.

我不能说规范作者的实际意图.但目前的情况应该得到报道和修复.大多数情况下,他们无意破坏与CSS 2.1的兼容性,并将在最终版本中重新编写其语法描述部分.


Guf*_*ffa 5

我认为编写规范时只是一个错误,而真正的目的是将它作为分隔符,就像以前的版本一样.我希望在以后的草稿中对此进行调整.

W3C验证服务说没有结尾分号的例子是有效的CSS 3级.

但是,我将一如既往地用分号结束每个声明.这是一个很好的做法,因此在添加更多声明时不要忘记分隔符.

  • +1用于始终以分号结束的声明。 (2认同)