热门标签 | HotTags
当前位置:  开发笔记 > 前端 > 正文

!DOCTYPE声明对JavaScript的影响分析

DOCTYPE是documenttype(文档类型)的简写,在web设计中用来说明你用的XHTML或者HTML是什么版本。

要建立符合标准的网页,DOCTYPE声明是必不可少的关键组成部分;除非你的XHTML确定了一个正确的DOCTYPE,否则你的标识和CSS都不会生效;当然对JS的取值也会有影响。

DOCTYPE声明如下:

DOCTYPE声明包括:过渡型(Transitional),严格型(Strict)和框架型(Frameset)。接下来就看一下这三种类型对不同浏览器在获取元素相关信息时的影响(包括不定义DOCTYPE和只将DOCTYPE定义为形式),我测试的浏览器分别为:IE6.0、IE7.0、IE8.0(变态模式)、FF、Opera、Chrome和Safari。由于IE5.5已经几乎被淘汰,所以不在测试范围之内。

以下就是测试结果(滚动条只是元素本身的滚动条并不是窗口的):

一、过渡型(Transitional)

1、测试IE6.0、IE7.0与IE8.0(非变态模式Quirks)的宽度和高度(width,height)

offsetWidth,offsetHeight clientWidth,clientHeight currentStyle[‘width'],currentStyle[‘width']

有无滚动条均为:
offsetWidth=
paddingLeft+paddingRight+borderLeft+borderRight

offsetHeight=
paddingTop+paddingBottom+borderTop+boderBottom

1、无滚动条
clientWidth=CSS中定义的宽度+paddingLeft+paddingRight

clientHeight=CSS中定义的高度+paddingTop+paddingBottom
(均不包括边框宽度)

2、有滚动条
clientWidth=CSS中定义的宽度-滚动条宽度(17固定值)-边框宽度,

clientHeight=CSS中定义的高度-滚动条宽度(17固定值)-边框宽度

实际真实宽度,不包括padding与边框值
(除IE和Opera以外无此属性)

offsetLeft,offsetTop clientLeft,clientTop currentSytle[‘left'],currentStyle[‘top']

有无滚动条均为:
offsetLeft=对象的offsetLeft-边框
offsetTop=实际值

有无滚动条均为:边框的宽度

除IE和Opera以外无此属性

2、测试IE8.0变态模式(Quirks)的宽度与高度(width,height)

offsetWidth,offsetHeight clientWidth,clientHeight

1、(无滚动条)宽度(高度)=当前对象的实际数值
2、(有滚动条)宽度(高度)=CSS中定义的数值

1、(无滚动条)宽度(高度)=当前对象的实际数值
2、(有滚动条)宽度(高度)=当前对象在CSS中定义的数值-滚动条(17)

有无滚动条均为:
宽度和高度均为CSS中定义的数值

offsetLeft,offsetTop clientLeft,clientTop

有无滚动条均为:

offsetLeft(offsetTop)=实际值

有无滚动条均为:边框的宽度

除IE和Opera以外无此属性

3、FF、Opera、Safari和Chrom中所取得的数值与第一种情况一样。

二、严格型(Strict)

1、测试IE6.0、IE7.0与IE8.0(非变态模式Quirks)的宽度和高度(width,height)

offsetWidth,offsetHeight clientWidth,clientHeight currentStyle[‘width'],currentStyle[‘width']

有无滚动条均为:
offsetWidth=
paddingLeft+paddingRight+borderLeft+borderRight

offsetHeight=
paddingTop+paddingBottom+borderTop+boderBottom

1、无滚动条
clientWidth=CSS中定义的宽度+paddingLeft+paddingRight

clientHeight=CSS中定义的高度+paddingTop+paddingBottom
均不包括边框宽度

2、有滚动条
clientWidth=CSS中定义的宽度-滚动条宽度(17固定值)-边框宽度,

clientHeight=CSS中定义的高度-滚动条宽度(17固定值)-边框宽度

实际真实宽度,不包括padding与边框值
(除IE和Opera以外无此属性)

offsetLeft,offsetTop clientLeft,clientTop currentSytle[‘left'],currentStyle[‘top']

有无滚动条均为:
offsetLeft=对象的offsetLeft-边框
offsetTop=实际值

有无滚动条均为:边框的宽度

除IE和Opera以外无此属性

2、测试IE8.0变态模式(Quirks)的宽度与高度(width,height)

offsetWidth,offsetHeight clientWidth,clientHeight currentStyle[‘width'],currentStyle[‘height]

1、(无滚动条)宽度(高度)=当前对象的实际数值
2、(有滚动条)宽度(高度)=CSS中定义的数值

1、(无滚动条)宽度(高度)=当前对象的实际数值
2、(有滚动条)宽度(高度)=当前对象在CSS中定义的数值-滚动条(17)-边框宽度

有无滚动条均为:
宽度和高度均为CSS中定义的数值
(除IE和Opera以外无此属性)

offsetLeft,offsetTop clientLeft,clientTop

有无滚动条均为:

offsetLeft(offsetTop)=实际值

有无滚动条均为:边框的宽度

除IE和Opera以外无此属性

3、FF、Opera、Safari和Chrom中所取得的数值与第一种情况一样。

三、取消DOCTYPE声明

1、IE6.0、IE7.0在没有DOCTYPE声明时与IE8.0中的变态模式(Quirks)中严格型结果相同。

2、FF、Safari、Chrome和IE8.0标准模式是与过渡型结果相同。

3、Opera浏览器中,在元素没有滚动条时offsetHeight与clientHeight的取值是在其当前现实的大小。

四、将DOCTYPE声明改写为

1、IE6.0、IE7.0在没有DOCTYPE声明时与IE8.0中的变态模式(Quirks)中严格型结果相同。

2、FF、Safari、Chrome和IE8.0标准模式是与过渡型结果相同。

3、Opera浏览器中,在元素没有滚动条时offsetHeight与clientHeight的取值是在其当前现实的大小。

在Opera中也拥有与IE一样的属性“currentStyle”,所以在Opera中也可以使用currentStyle来取得元素的精确值。


推荐阅读
  • 一个登陆界面
    预览截图html部分123456789101112用户登入1314邮箱名称邮箱为空15密码密码为空16登 ... [详细]
  • 利用CSS3和React实现数字滚动动画组件
    在前端开发中,数字滚动动画是一个常见的需求。本文将详细介绍如何使用CSS3和React构建一个数字滚动动画组件,包括组件的代码实现和样式设计。如果您对HTML版本感兴趣,欢迎留言获取。 ... [详细]
  • Python自动化测试入门:Selenium环境搭建
    本文详细介绍如何在Python环境中安装和配置Selenium,包括开发工具PyCharm的安装、Python环境的设置以及Selenium包的安装方法。此外,还提供了编写和运行第一个自动化测试脚本的步骤。 ... [详细]
  • 本文详细比较了CSS选择器和XPath在Selenium中通过页面结构定位元素的优劣,并提供了具体的代码示例,帮助读者理解两者在不同场景下的适用性。 ... [详细]
  • 本文探讨了如何利用HTML5和JavaScript在浏览器中进行本地文件的读取和写入操作,并介绍了获取本地文件路径的方法。HTML5提供了一系列API,使得这些操作变得更加简便和安全。 ... [详细]
  • Vue 开发与调试工具指南
    本文介绍了如何使用 Vue 调试工具,包括克隆仓库、安装依赖包、构建项目以及在 Chrome 浏览器中加载扩展的详细步骤。 ... [详细]
  • 本文详细探讨了JavaScript中四种获取CSS样式的不同方法:style、currentStyle、getComputedStyle和getBoundingClientRect。每种方法的适用场景及其兼容性问题,并提供了解决方案。 ... [详细]
  • 本文深入探讨了JavaScript中实现继承的四种常见方法,包括原型链继承、构造函数继承、组合继承和寄生组合继承。对于正在学习或从事Web前端开发的技术人员来说,理解这些继承模式对于提高代码质量和维护性至关重要。 ... [详细]
  • Vue项目中应用骨架屏实践
    在当前开发的项目中,由于登录过程涉及多次重定向,导致用户体验不佳。为了改善这一状况,本文介绍了如何使用vue-skeleton-webpack-plugin插件在Vue项目中实现骨架屏,以减少用户感受到的白屏时间。 ... [详细]
  • 将基于Web的互动多媒体体验引入手机和平板电脑历来面临诸多挑战,如性能瓶颈、API兼容性和HTML5音频及视频播放限制等问题。本文探讨了如何克服这些障碍,为《霍比特人:史矛革之战》打造了一个移动优先的沉浸式网络体验。 ... [详细]
  • 在进行微信小程序开发过程中,遇到了需要实现类似微信朋友圈那样的长文本折叠功能的需求。本文将详细探讨其实现方法及注意事项。 ... [详细]
  • 精选6款开源Web性能优化工具,助力前端开发
    本文精选了6款开源Web性能优化工具,旨在帮助前端开发者提升页面加载速度,改善用户体验。 ... [详细]
  • 动画队列的设计目的是为了确保一系列任务能够按照预定顺序执行,每个任务只有在其前一个任务完成后才开始。这些任务既可以是同步的,也可以是异步的。本文将探讨jQuery动画系统中的队列机制,并介绍如何使用队列来优化动画效果。 ... [详细]
  • 本文介绍如何使用Python编写一个简单的爬虫程序,从知乎问题页面抓取美腿图片。环境配置包括Windows 10操作系统,Python语言及其相关库。 ... [详细]
  • 精选10款jQuery内联编辑插件
    本文精选了10款优秀的jQuery内联编辑插件,旨在帮助开发者实现页面内容的动态管理和即时编辑,提升用户体验。 ... [详细]
author-avatar
圈闭仔笨仔
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有