第一种形式: -
<!DOCTYPE html>
<head>
<title>Untitled</title>
<meta charset="UTF-8"/>
<link rel="stylesheet" href="" type="text/css"/>
</head>
<body>
</body>
</html>
第二种形式: -
<!DOCTYPE html>
<html>
<head>
<title>Untitled</title>
<meta charset="UTF-8"/>
<link rel="stylesheet" href="" type="text/css"/>
</head>
<body>
</body>
</html>
据我所知,在<!DOCTYPE html>
标记之前必须包含<html>
(如果使用HTML5),否则我的网站可能会遇到行为问题。 (我被告知here)
在第一个中,没有</html>
标记的开头,但我已将其包含在第二个标记中。
我注意到有些网站使用其中一种肤色。可能是<html>
或非<html>
!即使是HTML编辑器Android应用程序(WebMaster)也使用第一个(没有<html>
)!
我无法理解,<!DOCTYPE html>
与<html>
完全相同,只是附加!DOCTYPE
,或两者都不同!
那么,哪一个是正确的?为什么那个是正确的?
答案 0 :(得分:2)
Doctype是强制性的,与HTML开始标记完全不同。
(Doctype中包含extension SCNNode {
func boundingBoxContains(point: SCNVector3, in node: SCNNode) -> Bool {
let localPoint = self.convertPosition(point, from: node)
return boundingBoxContains(point: localPoint)
}
func boundingBoxContains(point: SCNVector3) -> Bool {
return BoundingBox(self.boundingBox).contains(point)
}
}
struct BoundingBox {
let min: SCNVector3
let max: SCNVector3
init(_ boundTuple: (min: SCNVector3, max: SCNVector3)) {
min = boundTuple.min
max = boundTuple.max
}
func contains(_ point: SCNVector3) -> Bool {
let contains =
min.x <= point.x &&
min.y <= point.y &&
min.z <= point.z &&
max.x > point.x &&
max.y > point.y &&
max.z > point.z
return contains
}
}
,因为XML和SGML文档类型必须指定根元素的标记名称,HTML 5 Doctype旨在向后兼容预期的文件夹。
HTML,HEAD和BODY元素的开始和结束标记是可选的。
对于每个HTML版本都是如此(但不适用于不允许省略任何标记的XHTML)。
答案 1 :(得分:1)
从技术上讲,在HTML5中,只有!DOCTYPE
和title
标记是必需的。所有其他标签都是可选的,仅用于开发人员的便利性和可读性。
更多信息,请参阅Google的HTML样式指南。 CSS:https://google.github.io/styleguide/htmlcssguide.html#Optional_Tags
答案 2 :(得分:0)
要详细说明Quentin和Maciek的答案,<!DOCTYPE html>
将HTML文件或流声明为具有html
文档类型和SGML解析器的顶级元素。 SGML(标准通用标记语言)是HTML,XML和其他标记语言的概括和起源。 HTML5及更高版本不再引用SGML标准(ISO 8879)来描述HTML的有效性和解析规则。然而,HTML文档实际上是SGML文档,可以使用SGML完全解析,包括W3C HTML5,W3C HTML5.1,WHATWG HTML和所有其他版本的HTML。
SGML标准还定义了标记遗漏的规则,或者更确切地描述了推断HTML文档中实际不存在的标记的规则,并将文档视为它们。 SGML仅仅是用于描述HTML等具体标记语言的语言框架,标记遗漏的规则必须告诉SGML,因为SGML没有关于HTML的内置硬编码知识。这是一种告诉SGML文档中可以省略html
开始和结束元素的方法(注意,Web浏览器直接支持其他SGML声明语法不):
<!DOCTYPE html [
<!ELEMENT html O O (head,body?)>
<!-- other declarations for
the head and body element
following here ... -->
]>
html
元素的此声明具有O O
( O 任务的双字母O),其间有空格)标记省略指示符告诉SGML启动和可以分别省略端元素标签。如果使用-
连字符代替O
作为开始或结束标记省略指示符,或两者都使用,则需要相应的标记。
还有其他HTML元素允许在各种HTML5规范中声明标记推断。我已经在我的项目页面(2)创建了这些和其他语法规则的转录到现代HTML的SGML中。
例如,在html
元素的上述声明中,(head,body?)
部分声明html
的子内容必须是head
元素,后跟可选的body
元素。由于这些也被声明为可选的(虽然由于空间原因不在上面的代码段中),结合title
的进一步声明,一个完整有效的HTML文档可能看起来像这样
<!DOCTYPE html>
<title>Hello</title>
<p>Body Text
答案 3 :(得分:-2)
您只需要第一行TAG和TITLE标记。从技术上讲,页面标记和页面上的其他所有内容都是可选的
答案 4 :(得分:-4)
<!DOCTYPE>
声明必须是HTML文档中标记之前的第一件事。
<!DOCTYPE>
声明不是HTML标记;它是Web浏览器关于页面编写的HTML版本的指令。
e.g。
HTML 5 <!DOCTYPE html>
告诉浏览器这是一个html文档,因此将其渲染出来。
但是在HTML 4中,它是这样完成的:<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd">
通常......呈现。这绝对不是必需的,而是一种很好的做法,因为我们并不总是使用普通的HTML。有了其他Web编程语言的知识,您将看到在一个文件中使用多种语言。所以它对此很有用。
还有很多其他原因,但我不会在这里解释。