CSS块中未公开的引用

Ori*_*iol 9 css syntax language-lawyer

此代码段在Firefox上为红色,在Chrome上为蓝色.谁是对的?

* { background: red; '}
* { background: blue; }
Run Code Online (Sandbox Code Playgroud)

§4.1.6区块说:

Single(')和双引号(")也必须出现在匹配对中,并且它们之间的字符被解析为字符串.

但是,如果匹配对中出现'"不出现,应该如何处理语法错误?

RBa*_*ung 4

根据我对4.2 Parsing Errors的阅读,以及所谓的“匹配对规则”的构造:

* { background: red; '}
* { background: blue; }
Run Code Online (Sandbox Code Playgroud)

应该读作:

* { background: red; ...<EOF> }
Run Code Online (Sandbox Code Playgroud)

也就是说,文件中 后面的所有内容都'}将被丢弃,因为该行中没有匹配}的内容(因为在看到另一个之前{总是有另一个第一个),因此直到文件末尾隐式关闭它之前它不会被关闭。{}

当然,这真的很复杂,所以我可能是错的......


进一步阅读 CSS21 语法似乎证实了这一点。基本上,这里有两种效果:

  1. 不匹配'将导致当前行末尾的所有内容都被忽略。和,
  2. 不匹配{将导致文件末尾的所有内容都被解析,就好像它仍然是同一声明块的一部分一样。

所以基本上,#1 导致结束}丢失。而 #2 可能会导致它后面的所有内容丢失,因为它无法被解析为块的有效声明(因为{..}嵌套计数总是错误的)。