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

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

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

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

一、浏览器模式的起源

“浏览器模式”最初在IE11中被改名为“用户代理字符串”,主要用于设置navigator.userAgent和navigator.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=10、IE=11、IE=Edge等值均为标准模式。
      • IE=EmulateIE10与IE=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/

    你可能感兴趣的文章
    Python3 - 在字符串格式化程序参数中使用变量
    查看>>
    Python3 A*寻路算法实现
    查看>>
    python3 grpc安装
    查看>>
    python3 mysql 封装多表_python3 mysql-多表查询
    查看>>
    python3 mysql8_Python MySQL8.0 错误:authentication plugin 'calling_sha2_password' is not supported....
    查看>>
    Python关键代码总览!从Zero到Hero必看的考点
    查看>>
    python3 robotframework+pycharm框架搭建
    查看>>
    Python3 shutil模块
    查看>>
    Python关于strftime函数详细解析 附实战代码
    查看>>
    Python3 tutorial day3
    查看>>
    python3 week4
    查看>>
    Python3 创建数组
    查看>>
    python3 套接字异常(a byte-like object is required not str)
    查看>>
    python3 实现用户三次输入错误记录黑名单并对该用户登录锁定-day1
    查看>>
    python3 文本变图片
    查看>>
    Python3 查看 com 组件的属性
    查看>>
    python3 案例分享--发邮件
    查看>>
    python3 模板库_Python3 标准库概览_Python教程_我爱模板网 - 提供下载各种免费建站资源,免费网站模板,免费网页特效,让你爱上建站!...
    查看>>
    Python3 求最大/小值及索引值 Numpy
    查看>>
    python3+django使用celery执行某些任务失败的解决方案
    查看>>