要建立符合标准的网页,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'] |
有无滚动条均为: |
1、无滚动条 |
实际真实宽度,不包括padding与边框值 |
offsetLeft,offsetTop | clientLeft,clientTop | currentSytle[‘left'],currentStyle[‘top'] |
有无滚动条均为: |
有无滚动条均为:边框的宽度 |
除IE和Opera以外无此属性 |
2、测试IE8.0变态模式(Quirks)的宽度与高度(width,height)
offsetWidth,offsetHeight | clientWidth,clientHeight | currentStyle[‘width'],currentStyle[‘height] |
1、(无滚动条)宽度(高度)=当前对象的实际数值 |
1、(无滚动条)宽度(高度)=当前对象的实际数值 |
有无滚动条均为: |
offsetLeft,offsetTop | clientLeft,clientTop | currentSytle[‘left'],currentStyle[‘top'] |
有无滚动条均为: offsetLeft(offsetTop)=实际值 |
有无滚动条均为:边框的宽度 |
除IE和Opera以外无此属性 |
3, FF, Opera, Safari, Chrom에서 얻은 값은 첫 번째 경우와 동일합니다.
2. 엄격하다
1. IE6.0, IE7.0, IE8.0의 너비와 높이(너비, 높이) 테스트(비정상 모드 쿼크)
offsetWidth, offsetHeight | 클라이언트 너비, 클라이언트 높이 | 현재 스타일['너비'], 현재 스타일['너비'] | ||||||||||||||||||||||||
offsetWidth= paddingLeft paddingRight borderLeft borderRight offsetHeight= paddingTop paddingBottom borderTop boderBottom |
1. 스크롤 막대 없음 clientWidth=width paddingLeft paddingRight는 CSS에 정의됨 clientHeight=height paddingTop paddingBottom은 CSS에 정의됨 테두리 너비는 포함되지 않음 2 스크롤 막대 clientWidth=CSS에 정의된 너비-스크롤 막대 너비(17 고정 값)-테두리 너비, clientHeight=CSS에 정의된 높이-스크롤 막대 너비(17 고정 값)- 테두리 너비 |
패딩 및 테두리 값을 제외한 실제 실제 너비 (IE 및 Opera를 제외하고는 해당 속성 없음)
|
||||||||||||||||||||||||
offsetLeft, offsetTop | 클라이언트왼쪽, 클라이언트탑 | currentSytle['left'], currentStyle['top'] | ||||||||||||||||||||||||
스크롤 막대 유무: |
스크롤 막대 유무: 테두리 너비 |
IE 및 Opera를 제외한 해당 속성 없음 |
offsetWidth, offsetHeight | 클라이언트 너비, 클라이언트 높이 | 현재 스타일['너비'], 현재 스타일['높이] |
1. (스크롤 막대 없음) 너비(높이) = 현재 개체의 실제 값 |
1. (스크롤 막대 없음) 너비(높이) = 현재 개체의 실제 값 |
스크롤 막대 유무: 너비와 높이는 CSS에 정의된 값입니다 (IE 및 Opera를 제외하고 해당 속성이 없습니다) |
offsetLeft, offsetTop | 클라이언트왼쪽, 클라이언트탑 | currentSytle['left'], currentStyle['top'] |
스크롤 막대 유무: offsetLeft(offsetTop)=실제값 |
스크롤 막대 유무: 테두리 너비 |
IE 및 Opera를 제외한 해당 속성 없음 |