最近在练习html和css练习题时,会发现有很多细节性的东西,以前都没有注意到,虽然会敲代码,但是理论性的知识掌握得不牢固,所以重新学习了一下以前因为急于求成忽略的一些东西。
<!DOCTYPE>标签
这个虽然每次都会写到,写在html文档的第一行,但平时并没有深究过。在w3school上是这么解释的:<!DOCTYPE>声明不是HTML标签,指示web浏览器关于页面使用哪个HTML版本进行编写的指令;在 HTML 4.01 中,<!DOCTYPE> 声明引用 DTD,因为 HTML 4.01 基于 SGML。DTD 规定了标记语言的规则,这样浏览器才能正确地呈现内容。HTML5 不基于 SGML,所以不需要引用 DTD。
简而言之,<!DOCTYPE>规定了浏览器文档使用哪种html或者xhtml规范
平时我们常用的
<!DOCTYPE html>
这就是html5的声明,在html4.01里面有三种<!DOCTYPE>声明方式
HTML 4.01 Strict
该 DTD 包含所有 HTML 元素和属性,但不包括展示性的和弃用的元素(比如 font)。不允许框架集(Framesets)。
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd">
HTML 4.01 Transitional
该 DTD 包含所有 HTML 元素和属性,包括展示性的和弃用的元素(比如 font)。不允许框架集(Framesets)。
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
HTML 4.01 Frameset
该 DTD 等同于 HTML 4.01 Transitional,但允许框架集内容。
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Frameset//EN" "http://www.w3.org/TR/html4/frameset.dtd">
(以上来自w3school)
不同文档模式主要影响CSS内容的呈现,尤其是浏览器对盒模型的解析
说了这么多,那DTD到底是个啥东西呢??
DTD:Document Type Definition,中文翻译为:文档类型定义。DTD可定义合法的XML文档构建模块。它使用一系列合法的元素来定义文档的结构。因为早期的版本基于SGML,所以需要套用SGML的解析规则。DTD的作用在于定义SGML文档的文档类型以便于浏览器解析。
随着技术的进步,现在HTML5 不基于 SGML,所以也就不需要引用 DTD了
如果没有<!DOCTYPE>声明,那么不同的浏览器将会以自己不同的怪异的模式去解析渲染页面,这样页面在不同的浏览器上呈现出来的效果也就不一样,人们把这称之为“怪异模式”。
但是如果声明了,将会开启“严格模式”,又有人称之为“标准模式”,浏览器将已w3c标准来解析渲染页面。