我在Angular的网格中遇到了一个似乎是个错误的东西。我的index.html页面位于顶部:
<!DOCTYPE HTML[]>
当我运行应用程序时,页面的网格滚动列标题:
现在,如果我删除括号,就像这样:
<!DOCTYPE HTML>
网格显示正确:
有没有人解决过这个问题?有修复吗?
注意:我可以删除括号并保留它,但我们的部署工具会在部署时修改index.html文件并添加括号,因为它显然是格式良好的HTML。
答案 0 :(得分:2)
“格式良好”是一个仅在XML中有意义的概念。粗略地说,这意味着每个元素都有一个显式的开始标记和一个显式的结束标记,并且它们位于正确的位置。它与Doctype声明的内容无关。
最新版本的HTML规范说:
DOCTYPE 必须按以下顺序组成:
- 字符串,它是字符串的ASCII不区分大小写的匹配项“
- 一个或多个空格字符。
- 字符串,它是字符串“html”的ASCII不区分大小写匹配。
- (可选)DOCTYPE旧版字符串或过时的DOCTYPE字符串(定义如下)。
- 零个或多个空格字符。
- A“&gt;” (U + 003E)角色。
醇>
...因此,您的部署工具所做的更改既不是“格式良好”,也不是正确的。
以这种方式打破Doctype会触发Quirks Mode。这使得浏览器通过模拟它们所具有的许多错误而向后兼容20世纪90年代后期的浏览器。
CSS正在崩溃,因为它取决于那些不存在的错误。
你可能重写所有CSS,因此它被设计为在Quirks模式下工作,但修复部署工具使其不会破坏Doctype会更好。