CSS 块中的未封闭报价
Unclosed quote in a CSS block
此代码段在 Firefox 上为红色,在 Chrome 上为蓝色。谁是对的?
* { background: red; '}
* { background: blue; }
Single ('
) and double quotes ("
) must also occur in matching
pairs, and characters between them are parsed as a string.
但是如果'
或"
没有出现在匹配对中,语法错误应该如何处理?
根据我对 4.2 Parsing Errors 的阅读,以及所谓的“匹配对规则”的构造:
* { background: red; '}
* { background: blue; }
应读作:
* { background: red; ...<EOF> }
也就是说,'}
之后的文件中的所有内容 都将被丢弃,因为 {
没有匹配的 }
在那一行(因为在看到另一个 }
之前总会先有另一个 {
),所以它不会被关闭,直到文件末尾隐式关闭它。
当然,它真的很复杂,所以我可能是错的...
进一步阅读 CSS21 语法似乎证实了这一点。基本上,这里有两种效果:
- 不匹配的
'
将导致忽略当前行末尾的所有内容。而且,
- 不匹配的
{
将导致文件末尾的所有内容都被解析,就好像它仍然是同一声明块的一部分。
所以基本上,#1 导致结束 }
丢失。 #2 可能会导致它之后的所有内容都丢失,因为它不能被解析为块的有效声明(因为 {..}
嵌套计数总是错误的)。
虽然 Chrome 只是忽略了这一行而没有抱怨,Firefox 停止处理 CSS 并记录警告(这至少适用于 Chrome 41.0.2.. 和Mac OS X Yosemite 上的 FF 36.0.1:
Found unclosed string ''}'. Expected declaration but found ''}'. Skipped to next declaration.
虽然警告说 Skipped to next declaration.
,但 FF 在我的情况下实际上没有(在提供的代码前后添加了一点 css)。
在我看来,这两者都不是一个很好的解决方案,因为现在网络在很大程度上依赖于 CSS,所以浏览器既不应该忽略语法错误,也不应该停止处理 [=25= 】 总而言之。
我知道问题中没有提到 Safari,我也不是它的忠实粉丝,但它的作用如下:记录警告,跳过该行并处理文件的其余部分。这就是我所期望的。
只是我的 0.02..
此代码段在 Firefox 上为红色,在 Chrome 上为蓝色。谁是对的?
* { background: red; '}
* { background: blue; }
Single (
'
) and double quotes ("
) must also occur in matching pairs, and characters between them are parsed as a string.
但是如果'
或"
没有出现在匹配对中,语法错误应该如何处理?
根据我对 4.2 Parsing Errors 的阅读,以及所谓的“匹配对规则”的构造:
* { background: red; '}
* { background: blue; }
应读作:
* { background: red; ...<EOF> }
也就是说,'}
之后的文件中的所有内容 都将被丢弃,因为 {
没有匹配的 }
在那一行(因为在看到另一个 }
之前总会先有另一个 {
),所以它不会被关闭,直到文件末尾隐式关闭它。
当然,它真的很复杂,所以我可能是错的...
进一步阅读 CSS21 语法似乎证实了这一点。基本上,这里有两种效果:
- 不匹配的
'
将导致忽略当前行末尾的所有内容。而且, - 不匹配的
{
将导致文件末尾的所有内容都被解析,就好像它仍然是同一声明块的一部分。
所以基本上,#1 导致结束 }
丢失。 #2 可能会导致它之后的所有内容都丢失,因为它不能被解析为块的有效声明(因为 {..}
嵌套计数总是错误的)。
虽然 Chrome 只是忽略了这一行而没有抱怨,Firefox 停止处理 CSS 并记录警告(这至少适用于 Chrome 41.0.2.. 和Mac OS X Yosemite 上的 FF 36.0.1:
Found unclosed string ''}'. Expected declaration but found ''}'. Skipped to next declaration.
虽然警告说 Skipped to next declaration.
,但 FF 在我的情况下实际上没有(在提供的代码前后添加了一点 css)。
在我看来,这两者都不是一个很好的解决方案,因为现在网络在很大程度上依赖于 CSS,所以浏览器既不应该忽略语法错误,也不应该停止处理 [=25= 】 总而言之。
我知道问题中没有提到 Safari,我也不是它的忠实粉丝,但它的作用如下:记录警告,跳过该行并处理文件的其余部分。这就是我所期望的。
只是我的 0.02..