关于通过浏览器和HTML表单解析HTML的概念混淆(语法)

时间:2012-07-02 17:33:47

标签: html

今天有人试图通过挑战我对HTML的知识来骚扰和贬低我,因为我从未开始学习它。她问我以下两个问题:

问题1.如果我创建一个只包含字符串的html页面而没有在其中编写任何html标记(没有正文,没有html,没有doctype),那么为什么浏览器仍然会渲染它并显示字符串,就好像这是段落吗?

对此,我最好的猜测是浏览器仍然设法将其显示为一个段落,因为这是它的最佳猜测,它通过假设那是作者想要的那样来弥补缺失的标签,从而“放”那些标签,即使我们从未手动编写它。

问题2.在上面的例子中,如果我在html源代码中的不同行中写了几个字符串,浏览器仍会将它们显示为单行文本。

同样,我使用了我最好的猜测并得出结论,HTML是一种自由格式语言,因此它不关心源代码中有多少空格或缩进。

然而,她似乎并不高兴。我的回答错了吗?如果是,那么他们是完全或部分错误的,这些问题的正确答案是什么?

感谢阅读并对描述保持耐心。

3 个答案:

答案 0 :(得分:4)

  

问题1.如果我创建一个只包含字符串的html页面而没有在其中编写任何html标记(没有正文,没有html,没有doctype),那么为什么浏览器仍然会渲染它并显示字符串,就好像这是段落吗?

     

对此,我最好的猜测是浏览器仍然设法将其显示为一个段落,因为这是它的最佳猜测,它通过假设那是作者想要的那样来弥补缺失的标签,从而“放”那些标签,即使我们从未手动编写它。

由于在这两种情况下都没有使用<!DOCTYPE ...>,因此在last step in Initial Insertion Mode中找不到它,因此整个文档都会在Quirks Mode中呈现。

虽然浏览器(至少是Firefox和Chrome)不会解析它作为段落,但他们 渲染一个简单的字符串相同默认情况下,作为Quirks Mode 中的段落。这是因为“当文档处于怪癖模式时,预期主体元素顶部或底部的HTML元素的垂直边距将折叠为零”(source,更多关于collapsing margins }),因此margin-top的{​​{1}}有效地消耗了body的{​​{1}}。由于简单字符串没有边距,因此没有任何反应。最终结果是文本段落和文本本身都显示相同。

This is how your browser handles a simple string。特别注意 DOM视图,它显示了文档的最终结构。有关比较,请参阅what a paragraph looks like。虽然它们在渲染中出现是相同的,但结构相同。

现在,为了说明我关于折叠边距的观点,请使用margin-top包含内容(文本或段落),其中包含p以查看未折叠的边距。 This is how your browser handles the plain textthis is how your browser handles the paragraph

但是,如果包含div(以阻止浏览器进入Quirks模式),则plain text document document with a paragraph相同( border元素的<!DOCTYPE ...>不会合并到margin-top元素的p中。

  

问题2.在上面的例子中,如果我在html源代码中的不同行中写了几个字符串,浏览器仍会将它们显示为单行文本。

     

同样,我使用了我最好的猜测并得出结论,HTML是一种自由格式语言,因此它不关心源代码中有多少空格或缩进。

HTML将所有空格(除非white-space设置为margin-top以外的其他内容)视为单个空格(折叠)。因此,test\n\ntest相当于test test

  

然而,她似乎并不高兴。我的回答错了吗?如果是,那么他们是完全或部分错误的,这些问题的正确答案是什么?

您的结论有些正确,但不能很好地处理边缘情况(例如,如果浏览器更改body元素的字体/颜色/等)。

答案 1 :(得分:1)

HTML和BODY标记是可选的,请参阅http://www.w3.org/TR/REC-html40/struct/global.html#h-7.3

将它们从文档中删除将被视为text / html类型,这会导致空白区域折叠为单个空白;这就是为什么源中不同行中的单词在一行后面呈现的原因。

答案 2 :(得分:0)

Q1:

我认为浏览器不会将单个字符串显示为段落。这样做的原因是,如您所说,单独行上的任何后续字符串都在同一个块中呈现。您可以使用chrome Web检查器(CTRL + SHIFT + I)进行检查。浏览器会显示任何非标签或脚本/样式表(或doctype)。

Q2:

HTML对换行符不敏感。

如果您仍不满意,请查看规范:http://developers.whatwg.org/