DTD与模式

摘要:
制作网页时我们必须测试的是IE浏览器,毕竟IE浏览器的市场份额仍然很高。随着HTML5的普及,项目可能需要与IE8或更高版本兼容,但许多项目都与较低版本的IE兼容。因此,我们经常遇到IE浏览器低版本页面布局混乱的问题。这是因为IE浏览器有两种模式会影响页面。现在让我们研究文档验证机制(DTD)。DTD是html文件的验证机制,也是html文件的一部分。三种文档类型
摘要

   我们在制作页面时必须要测的就是IE浏览器,毕竟IE浏览器市场占有率还是很高。随着HTML5的流行,可能项目要求兼容IE最低版本为IE8或者更高,但是还是有很多项目兼容IE低版本。所以我们经常会碰到页面在ie浏览器低版本中排版错乱的问题,这是因为IE浏览器有两个模式影响着页面,现在就来研究下

文档验证机制(DTD)

  DTD是html文件的验证机制,属于html文件组成的一部分。三种文档类型:S(Strict)、T(Transitional)、F(Frameset)。

  • Strict
    干净的标记,免于表现层的混乱。
  • Transitional
    DTD 可包含 W3C 所期望移入样式表的呈现属性和元素。如果您的读者使用了不支持层叠样式表(CSS)的浏览器以至于您不得不使用 HTML 的呈现特性时使用
  • Frameset
    DTD 应当被用于带有框架的文档。除 frameset 元素取代了 body 元素之外,Frameset DTD 等同于 Transitional DTD

HTML5简化了DTD,可以直接使用 <!DOCTYPE HTML>。

模式

  模式主要是针对ie浏览器,在ie7以下,微软的代码规范与W3C制定的标准有所差别,但是ie市场占有率非常大,所以开发人员会按照微软的规范来编写代码,随着各大浏览器厂商的发展和W3C组织的努力,浏览器的标准化越来越明显。微软为了兼容ie6/7,在ie8浏览器增加了模式这个功能,这样就可以解决代码标准不一致而引起的问题。

 DTD与模式第1张

模式分为两种一种是浏览器模式,一种是文档模式。这两种模式有什么区别呢?

  • 浏览器模式
    用于切换IE针对该网页的默认文档模式、对不同版本浏览器的条件备注解析、发送给网站服务器的用户代理(User-Agent)字符串的值。网站可以根据浏览器返回的不同用户代理字符串判断浏览器的版本和安装的功能,这样就可以向不同的浏览器返回不同的页面内容。默认情况下,IE8的浏览器模式为IE8。用户可以手动切换到不同的浏览器模式。
  • 文档模式
    用于指定IE的页面排版引擎(Trident)以哪个版本的方式来解析并渲染网页代码。切换文档模式会导致网页被刷新,但不会更改用户代理字符串中的版本号,也不会从服务器重新下载网页。切换浏览器模式的同时,浏览器也会自动切换到相应的文档模式。

 对于文档模式,每个浏览器都有不同的工作模式

 IE6IE7​IE8​IE9IE10ChromeFirefoxSafariOpera
混杂模式(Quriks Mode)
接近标准模式(Almost Standards Mode)
标准模式(Standards Mode)

我们如何控制浏览器以何种文档模式来显示页面呢?

<meta http-equiv="X-UA-Compatible" content="IE=edge">

通过上面的代码用来指定IE浏览器以标准文档模式渲染页面,我们可以修改edge来指定特定版本,例如:IE=8

问什么要控制这个呢?很明显,加上这个元素能够告诉浏览器用什么模式来渲染页面,有时候我们在IE高版本的浏览器中显示正常,到了低版本排版就乱了,加上下面的和正确的DTD声明就可以了。

< meta http-equiv = "X-UA-Compatible" content = "IE=edge,chrome=1" />

 判断当前页面的文档模式

 1 <!DOCTYPE html>
 2 <html>
 3 <head>
 4     <meta http-equiv="Content-Type" content="text/html;charset=utf-8">
 5     <meta http-equiv="X-UA-Compatible" content="IE=8,chrome=1">
 6 </head>
 7 <body>
 8     <script>
 9         function detect() {
10             var mode = document.documentMode;
11             switch (mode) {
12                 case  5:
13                     alert('Internet Explorer 5 quirks mode');
14                     break;
15                 case  7:
16                     alert('Internet Explorer 7 Standards mode');
17                     break;
18                 case 8:
19                     alert('Internet Explorer 8 Standards mode');
20                     break;
21                 case 9:
22                     alert('Internet Explorer 9 Standards mode');
23                     break;
24                 case 10:
25                     alert('Internet Explorer 10 Standards mode');
26                     break;
27             }
28 
29         }
30         detect();
31     </script>
32 </body>
33 </html>

S(标准模式)、A(接近标准模式)、Q(混杂模式)

DoctypeNS6Old MozMoz &
Safari &
Opera 10
&
IE10
& HTML5
Opera 9.0IE 8, IE 9 & Opera 9.5IE 7 & Opera 7.10IE 6 & Opera 7.0Mac IE 5Konq 3.2
NoneQQQQQQQQQ
<!DOCTYPE html>QSSSSAAA 
<!DOCTYPE html SYSTEM "about:legacy-compat">???????? 
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 3.2 Final//EN">QQQQQQQQQ
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN">SSSSSAAAA
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN">SSSSSAAQA
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/html4/strict.dtd">SSSSSAAAA
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd">SSSSSAAAA
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">QQQQQQQQQ
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">QQQQQQQQQ
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">SSAAAAAAQ
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/1999/REC-html401-19991224/loose.dtd">QSAAAAAAQ
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">QQQQAAAAQ
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN" "http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd">SSSSSAAAA
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML Basic 1.0//EN" "http://www.w3.org/TR/xhtml-basic/xhtml-basic10.dtd">SSSSSAAAA
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">SSSSSAAAA
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">SSAAAAAAQ
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN" "http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd">
SSSSSAQAQ
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML Basic 1.0//EN" "http://www.w3.org/TR/xhtml-basic/xhtml-basic10.dtd">
SSSSSAQAQ
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
SSSSSAQAQ
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
SSAAAAQAQ
<!DOCTYPE HTML PUBLIC "ISO/IEC 15445:2000//DTD HTML//EN">QSSQQQQQQ
<!DOCTYPE HTML PUBLIC "ISO/IEC 15445:2000//DTD HyperText Markup Language//EN">QSSSSAAAQ
<!DOCTYPE HTML PUBLIC "ISO/IEC 15445:1999//DTD HTML//EN">SSSQQQQQQ
<!DOCTYPE HTML PUBLIC "ISO/IEC 15445:1999//DTD HyperText Markup Language//EN">SSSSSAAAQ

PS:

  Opera文档模式:http://www.opera.com/docs/specs/doctype/

  Firefox文档模式:https://developer.mozilla.org/en-US/docs/Mozilla%27s_DOCTYPE_sniffing

  IE8:http://blogs.msdn.com/b/ie/archive/2010/03/02/how-ie8-determines-document-mode.aspx

免责声明:文章转载自《DTD与模式》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇回溯法之n皇后问题puppet运维自动化之sshkey管理下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

相关文章

如何通过Html网页调用本地安卓app?

如何使用html网页和本地app进行传递数据呢?经过研究,发现还是有方法的,总结了一下,大致有一下几种方式 一、通过html页面打开Android本地的app 1、首先在编写一个简单的html页面 <html> <head> <meta http-equiv="Content-Type" c...

Node.JS + MongoDB技术浅谈

看到一个Node.JS + MongoDB的小例子,分享给大家,魔乐科技软件学院(www.mldnjava.cn)的讲座 Node.JS + MongoDB技术讲座          云计算 +大数据 = 未来。          在中国的云计算上基本上是一个概念,个人感觉与当初的SOA没有太大的区别,空泛的理论。          中小型开发的未来...

用nginx的反向代理机制解决前端跨域问题在nginx上部署web静态页面

用nginx的反向代理机制解决前端跨域问题在nginx上部署web静态页面 1.什么是跨域以及产生原因   跨域是指a页面想获取b页面资源,如果a、b页面的协议、域名、端口、子域名不同,或是a页面为ip地址,b页面为域名地址,所进行的访问行动都是跨域的,而浏览器为了安全问题一般都限制了跨域访问,也就是不允许跨域请求资源。   跨域情况如下: url 说...

express的学习,与使用

最近在学习vue的一个实战项目,碰到一个express,当时很萌,就随便看了看................ expres是基于node 的一个web框架, 首先可以找到它的官网照着学习 这里只讲一些官网上没有的或者很晦涩的东西......... 1)模版引擎的使用 给出package.json的依赖 {  "name": "demo",  "versi...

CSS布局:水平居中

CSS布局之元素水平居中 本文将依次介绍在不同条件下实现水平居中的多种方法及简单原理 Tip:下文中说的适用场景只是举了几个简单的例子方便读者理解。实际应用场景太复杂,生搬硬套容易出错。最重要的是掌握各种方法能够实现居中的原理。只要掌握了原理,那么不管问题怎么变都可以根据自己的理解选择合适的方法。 一、使用 text-align: center 1.原理...

jsp、javabean、el

JSP三大指令一个jsp页面中,可以有0~N个指令的定义!1. page --> 最复杂:<%@page language="java" info="xxx"...%>* pageEncoding和contentType:> pageEncoding:它指定当前jsp页面的编码,只要不说谎,就不会有乱码!在服务器要把jsp编译成.j...