最初发表在"异口同声"笔记上.
每经考取.
页面是零碎的。
我在重建一个小的内部仪表板——快活API,Jinja2模板,手写CSS,没有建设步骤——布局已经分出来.
时间线行未接入垂直列.
状态点浮出行外.
日志组标签重叠 。
它看起来像一个页面,其样式表没有加载。
样式表已经装入 。
套房的481个测试都是绿色的.
当我把CSS文件 用于显然没有应用的规则时, 他们就坐在磁盘上,写得没错。
其原因更接近评论.
在档案中间的某个地方,一个被关闭了——金贾的评论终结者——而不是.
肌肉记忆,从模板之间前后切换到.
CSS随后照规格行事:它不停地阅读.
评论跑起并吞并了接下来的15行规则——时间排行网格,饲料,桶布局,点对等——直到它击中了下个真实的,倒下17行.
无出错.
没有控制台警告。
没有失败的测试。
规则在文档中存在,同时不在页面中.
伤寒是最不有趣的部分 值得保存的是为什么CSS被设计为没有症状的失败,为什么源级审查看不到它,为什么修补是两行主张而不是更多的注意.
为什么没有抱怨:CSS没有致命错误 CSS语法规格这样定义了注释消耗:在看到.,消耗"最多并包括第一个,或者最多一个EOF代码点"的一切.
没有关于评论太长的观念,没有关于空白线条或牙套的热情,没有上行界限.
初胜为相.
一个评论比预期的晚关闭了17行,并不是一个错误的评论——它是一个很好的评论,恰好是17行长.
解剖师没有办法知道你有别的意思 即使评论已经运行到文件的末尾,你也不会得到例外.
在注释中到达 EOF 被标记为 spec 中的解析错误——但是 CSS 中的解析错误并不是失败.
CSS 2.1更进一步: 用户代理“必须关闭样式表末端所有打开的构造(例如:块、括号、括号、规则、字符串和注释)。
这是刻意的,而光谱中的理由解释了整个设计: 当 CSS 发生错误时, 解析器试图优雅地恢复, 在恢复正常解析前只丢弃最低数量的内容 。
这是因为出错并不总是出错——新语法在旧的解析器中看似出错,在语言中添加出新语法而不必担心包括它在更古老的UA中被完全打破的样式表是有用的.
这是一个很好的交易——这就是为什么使用新属性的样式表仍然在更老的浏览器中产生而不是空白页面的原因。
价格是CSS不能告诉你它失败了,因为从剖析器的角度来看,没有任何失败. "无知"(Ignore)在spec's own words中指用户代理"分出非法部分(为了找到它的开始和结束)",但否则就表现得好像它没有存在过"——这恰恰是没有留下痕迹的行为.
将语言放入光谱.
JSON,YAML,和JavaScript 抛出:错误的输入会产生响亮,位置错误.
CSS和HTML恢复:错误的输入产生一个默默不同的文档.
你必须去看看输出。
同一个失败班也有其他成员,他们都安静:在平原CSS中用作评论.
这不是评论。
解析器将它读作选取者的起步,不断消耗直到找到块,决定整个合格规则无效,并放弃它——所以下一条规则悄悄地消失.
流浪或失踪。
直到牙套再平衡之前的一切 要么被套入错误的规则 要么被丢弃 从相邻的languag 借来的评论终止者