日期:2014-05-17  浏览次数:20716 次

关于HTML文档类型对浏览器布局的影响

今天在移植一个HTML页面的时候发生了一个问题,在chrome下显示正常,而在IE9下始终显示不正常,页面七上八下的,似乎是CSS在IE9下不能正常解析,一开始心里又在骂万恶的IE,经过无数次的尝试后在HTML文档第一行加上了一句

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">

后,整个世界正常了,总结如下:

之前写HTML页面一般都是直接以<html>开头了,完全忽略了HTML头文档的作用,一直以为它是无用的,事实上,它确实是有用的,目前的HTML头有如下几种

HTML4.01 Strict DTD:
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd">
HTML4.01 Transitional DTD:
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional
//EN" "http://www.w3.org/TR/1999/REC-html401-19991224/loose.dtd">
HTML4.01 Frameset DTD:
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Frameset
//EN" "http://www.w3.org/TR/1999/REC-html401-19991224/frameset.dtd">
XHTML1.0 Strict DTD:
<!DOCTYPE HTML PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
XHTML1.0 Transitional DTD:
<!DOCTYPE HTML PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
XHTML1.0 Frameset DTD:
<!DOCTYPE HTML PUBLIC "-//W3C//DTD XHTML 1.0 Frameset//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-frameset.dtd">
XHTML1.1 DTD:
<!DOCTYPE HTML PUBLIC "-//W3C//DTD XHTML 1.1//EN" "http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd">

它们具体的区别就不详细讲了,网上一搜文档一大堆,具体体现在严格定义了HTML头文档类型的话,浏览器会按照所定义的规范去解析该HTML文档,如果没有定义的话,浏览器会按默认的文档类型会以意想不到的形式去解析页面,从而出现了上面的在chrome下解析正常,在IE9下解析不正常的现象

?

如此说来,IE9的做法是传统的也似乎是合乎情理的,没有定义文档类型按默认的解析方式显示给我一个“不正常”的页面,而chrome却智能的判断了解析方式显示正常,隐性的帮技术人员解决了一些问题,到底好不好呢?