博客
关于我
JS魔法堂:浏览器模式和文档模式怎么玩?
阅读量:425 次
发布时间:2019-03-06

本文共 1724 字,大约阅读时间需要 5 分钟。

文档模式与浏览器兼容性探索

从IE8开始,文档兼容模式的概念正式引入,为开发者在适配各版本IE时带来了极大的便利。然而,这一机制并非万能钥匙,开发者仍需深入理解其工作原理与局限性。

一、浏览器模式的起源

“浏览器模式”最初在IE11中被改名为“用户代理字符串”,主要用于设置navigator.userAgentnavigator.appVersion。这一设置会影响文档模式的选择,但在IE11中,文档模式与用户代理字符串的关系已被解耦。

  • IE89:文档模式与用户代理字符串的关系较为紧密,设置浏览器模式会直接影响文档模式的选择。
  • IE11及以后:文档模式与用户代理字符串的关系弱化,IE11默认采用浏览器自身版本的文档模式。

二、文档模式的定义与演变

文档模式主要影响浏览器对HTML、CSS的解析方式及JavaScriptAPI的行为。IE6及其后续版本逐步向W3C标准靠拢,但仍保留了IE5.5的怪异模式。

  • IE5.5:首个引入“怪异模式”(Quirks)的版本,主要用于解决IE5.5下与W3C标准不兼容的问题。
  • IE6:引入“兼容模式”(Quirks和IE6标准模式),解决旧网站在IE6上显示问题。
  • IE8:新增“文档兼容性模式”,提供更丰富的文档模式选择,包括怪异模式、标准模式和模拟模式。

三、文档模式的分类

  • 怪异模式

    • IE6789:IE5.5的文档模式。
    • IE10+及其他浏览器:默认采用W3C规范的怪异模式。
  • 标准模式

    • W3C标准的文档模式,但各浏览器的实现可能存在差异。
  • 准标准模式(有限怪异模式)

    • IE6、7的标准模式实际上是准标准模式,IE8+才有实质性的标准模式。
  • 四、IE8+设置文档模式的方式

    开发者可通过以下方式设置文档模式:

    • 开发者工具

      • 在IE的开发者工具中设置文档模式。
    • 元数据标签

      • 在head标签中加入<meta http-equiv="X-UA-Compatible" content="IE=7">,设置为IE7标准模式。
    • DOCTYPE声明

      • 通过<!DOCTYPE>标签切换标准模式与怪异模式。
    • Web服务器配置

      • 配置HTTP响应头X-UA-Compatible,如IIS的配置示例:

    五、<meta http-equiv="X-UA-Compatible">的作用

    • 默认情况:IE浏览器在没有<meta>标签时,采用怪异模式。
    • IE11
      • IE=10IE=11IE=Edge等值均为标准模式。
      • IE=EmulateIE10IE=10效果相同。

    六、文档模式的实际应用

    • 布局:盒子模型的差异可能导致表格、单元格样式异常。
    • 解析:CSS和HTML解析规则因文档模式不同而变化。
    • 脚本:JavaScript的行为和API调用结果可能受文档模式影响。

    七、IE10+的变化

    • 文档模式与渲染模式分离:IE10+将文档模式与盒子模型的渲染模式分开。
    • 怪异模式的实现:IE10+的怪异模式更接近W3C标准,与Webkit等浏览器的行为一致。

    八、文档模式的优化建议

  • 使用有效的DOCTYPE声明:确保盒子模型使用标准模式。
  • 明确目标浏览器范围:根据项目需求,选择需要适配的IE版本和其他浏览器。
  • 结合特征嗅探:在文档模式判断外,结合浏览器特性来确保兼容性。
  • 九、IE10+的文档模式与前端开发

    IE10+的文档模式虽然为W3C标准,但仍需考虑老旧浏览器的兼容性。开发者应:

    • 使用现代技术:如Flexbox、Grid等,减少依赖IE特有的布局技术。
    • 结合特征检测:通过JavaScript检测浏览器特性,弥补文档模式的不足。
    • 谨慎使用文档模式锁定:仅在必要时使用文档模式锁定,避免对后续维护造成困扰。

    十、总结

    文档模式是前端开发中不可或缺的一部分,但其设置与使用需谨慎。IE10+的文档模式与W3C标准的关联更加紧密,开发者应根据项目需求选择合适的文档模式,并结合特征嗅探和现代技术,提升开发效率与兼容性表现。

    转载地址:http://jjsuz.baihongyu.com/

    你可能感兴趣的文章
    Netty源码—2.Reactor线程模型一
    查看>>
    Netty源码—4.客户端接入流程一
    查看>>
    Netty源码—4.客户端接入流程二
    查看>>
    Netty源码—5.Pipeline和Handler一
    查看>>
    Netty源码—6.ByteBuf原理二
    查看>>
    Netty源码—7.ByteBuf原理三
    查看>>
    Netty源码—7.ByteBuf原理四
    查看>>
    Netty源码—8.编解码原理二
    查看>>
    Netty源码解读
    查看>>
    Netty的Socket编程详解-搭建服务端与客户端并进行数据传输
    查看>>
    Netty相关
    查看>>
    Network Dissection:Quantifying Interpretability of Deep Visual Representations(深层视觉表征的量化解释)
    查看>>
    Network Sniffer and Connection Analyzer
    查看>>
    NetworkX系列教程(11)-graph和其他数据格式转换
    查看>>
    Networkx读取军械调查-ITN综合传输网络?/读取GML文件
    查看>>
    Net与Flex入门
    查看>>
    net包之IPConn
    查看>>
    NFinal学习笔记 02—NFinalBuild
    查看>>
    NFS共享文件系统搭建
    查看>>
    nfs复习
    查看>>