现在的位置: 网页制作教程网站制作经验 >正文
网页高级教程

浏览器浏览模式的区别

发表于2016/11/13 网站制作经验 0条评论 ⁄ 热度 1,355℃

做WEB前端开发经常需要考虑的就是兼容性问题。目前主流的浏览器都有两种浏览模式,比如IE,360浏览器,傲游等。IE的兼容性视图模式、360浏览器和傲游的极速模式和兼容模式。本站还有一篇傲游浏览器没有兼容模式和内核模式的解决办法,需要的童鞋可以点击查看。

那么浏览器浏览模式有什么区别?为什么要有两种模式?一直以来的理解是这样的:浏览器厂商出于那些老站点的向后兼容的目的,创建了两种模式。即标准模式(standards mode)和怪异模式(quirks mode)。在标准模式里,浏览器按照规范渲染页面,而在怪异模式里,浏览器以一种老式的或者是模拟老式浏览器的渲染方式表现页面。

浏览器

一直以来,确保DOCTYPE的正确是非常重要的事。浏览器根据DOCTYPE是否存在以及是何种DOCTYPE来确定渲染方式。下表示总结的DOCTYPE和渲染模式对应关系。

DOCTYPE MODE
XHML + 形式完整DOCTYPE 标准模式
HTML 4.01 + strict DTD 标准模式
DOCTYPE包含URL和transitional DTD 标准模式
DOCTYPE只包含transitional DTD 怪异模式
DOCTYPE不存在或形式不完整 怪异模式

实际工作中,一般都不会忘记去添加DOCTYPE,所以很多情况都只是我们无意为之。比如IE6,当DOCTYPE不是页面的第一个元素的时候,就会进入怪异模式。这导致在页面开头添加XML文件的可选声明 也会使页面表现出人意料。

<?xml version="1.0" encoding="utf-8"?>

之后的IE7修复了这个bug,但却不完全。在IE7中,一个xml声明并不会再导致进入怪异模式,但是这并不表示在DOCTYPE之前加入其他东西也能不触发。比如html注释。

<?xml version="1.0" encoding="utf-8"?>
<!-- ... and keep IE7 in quirks mode -->    &
lt;!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">

这段代码依旧触发IE7的怪异模式,而触发的原因仅仅只是一段html注释。所以在DOCTYPE前,一段html注释也会导致怪异模式下不可预料的表现。

另一个需要小心的陷阱就是BOM头。当php处理UTF文件的时候会把BOM读成字符,include之后就可能会跑到DOCTYPE前面,从而再次触发IE的怪异模式。所以保存UTF8编码的时候可以选无BOM,BOM对于UTF8的意义本来就不大。

前段时间写的HTML5,DOCTYPE简化到只剩下面这样

<!DOCTYPE html>

对此w3cschool上的解释是这样的:HTML 4.01 中的 doctype 需要引用一个 DTD,这是因为 HTML 4.01 基于 SGML。HTML 5 不基于 SGML,也不需要引用 DTD,但是需要声明文档类型让浏览器按照它们应该的方式来运行。

事实证明,IE只要认到<!DOCTYPE html这串字符就会用标准模式...

现在HTML5的日子已经来了,新的总结,呵呵。 最后记录些DOCTYPE,发觉自己总是在复制他们~

HTML 4.01 Strict

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd">

HTML 4.01 Frameset

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Frameset//EN" "http://www.w3.org/TR/html4/frameset.dtd">

HTML 4.01 Transitional

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">

XHTML 1.0 Strict

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

XHTML 1.0 Frameset

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

XHTML 1.0 Transitional

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

XHTML 1.1

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN" "http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd">
  • 暂无评论