关于Doctype、严格模式与混杂模式
<!Doctype> 文档声明,位于文档中的最前面的位置,处于<html>标签之前。此标签告知浏览器文档使用哪种HTML或XHTML规范。
用于告知浏览器以何种模式来渲染文档。
严格模式:页面排版和js解析是以该浏览器支持的最高标准(W3C)来执行。
混杂模式:不严格按照标准模式执行,主要用以兼容旧的浏览器,向后兼容。模拟老式浏览器的行为以防止老站点无法工作。说的透明点就是可以实现IE5.5及以下版本的浏览器的渲染模式。
Doctype不存在或格式不正确会导致文档以混杂模式呈现。
那么问题来了,严格模式和混杂模式在样式上有什么不同之处?
区别:总体会有布局、样式解析和脚本解析三方面的区别。
1、盒模型:在W3C标准中,如果设置一个元素的宽度和高度,值得是元素内容的宽度和高度,而在Quirks模式下,IE的宽度和高度还包含了padding和border。
2、设置行内元素的宽高:在标准模式下,给<span>等行内元素设置width和height都不会生效,而在quirks模式下,则会生效。
3、设置百分比的高度:在标准模式下,一个元素的高度尤其包含的内容决定,如果父元素没有设置高度,子元素设置一个百分比的高度是无效的。
4、margin:0 auto设置水平居中:使用margin:0 auto在标准模式下可以使元素水平居中,但在quirks模式下却会失效。解决办法:用text-align属性:
body{text-align:center;}
#content{text-align:left;}
5、quirks模式下设置图片的padding会失效
6、quirks模式下Table中的字体属性不能继承上层的设置
7、quirks模式下white-space:pre(保留空白)会失效
那么问题来了,white-space可能的值:
normal 默认。空白会被浏览器忽略
pre 空白会被刘看齐保留。其行为方式类似HTML中的<pre>标签
nowrap 文本不会换行,文本会在在同一行上继续,直到遇到<br>标签为止
pre-wrap保留空白符序列,但是正常的进行换行
pre-line 合并空白符序列,但是保留换行符。
inherit 规定应该从父元素继承white-space属性的值。