博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
document.documentElement.clientwidth和document.body
阅读量:6263 次
发布时间:2019-06-22

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

hot3.png

测试例子:

代码如下:

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" 
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> 
<html> 
<head> 
<meta http-equiv="Content-Type" content="text/html; charset=utf-8"/> 
<title></title> 
<style type="text/css"> 
*{ margin: 0; padding: 0;} 
body{ border: 10px solid red;} 
#inner{width: 2000px; height: 2000px; border: 5px solid blue;} 
</style> 
</head> 
<body> 
<div id="inner"></div> 
</body> 
</html> 

结果:

chrome:

FF

OPERA:

SAFARI:

IE9:

IE8

IE7:

IE6

说明:

Chrome/FF/Safari/opera对这些浏览器而言,window有个属性innerWidth/innerHeight包含的是整个文档的可视区域尺寸,注意,这个尺寸是包含滚动条大小的。如果我们不计滚动条的影响,就可以直接使用这两个属性。如果滚动条会影响(比如最大化弹出框),那么应该想另外的办法。Document对象是每个DOM树的根,但是它并不代表树中的一个HTML元素,document.documentElement属性引用了作为文档根元素的html标记,document.body属性引用了body标记我们这里获取常见的三个值(scrollWidth、offsetWidth和clientwidth)来比较一下document.documentElement.scrollWidth返回整个文档的宽度document.documentElement.offsetWidth返回整个文档的可见宽度document.documentElement.clientwidth返回整个文档的可见宽度(不包含边框),clientwidth = offsetWidth - borderWidth不过一般来说,我们不会给document.documentElement来设置边框,所以这里的clientwidth 与 offsetWidth一致document.body.scrollWidth返回body的宽度opera和FF返回的就是标准的body 的scrollWidth,个人觉得opera和FF算是比较合理的。document.body.offsetWidth返回body的offsetWidthdocument.body.clientwidth返回body的clientwidth(不包含边框),clientwidth = offsetWidth - borderWidth我们看上面的例子,会发现body和documentElement的有些值是相等的,这并不是表示他们是等同的。而是因为当我们没有给body设置宽度的时候,document.body默认占满整个窗口宽度,于是就有:document.body.scrollWidth = document.documentElement.scrollWidthdocument.body.offsetWidth = document.documentElement.offsetWidthdocument.body.clientwidth = document.documentElement.clientwidth - document.body.borderWidth(body的边框宽度)当我们给body设置了一个宽度的时候,区别就出来了。IE9/IE8这两个差不多,唯一的区别是IE9包含windows.innerWidth属性,而IE8不包含windows.innerWidth属性。document.documentElement.scrollWidth返回整个文档的宽度,和FF等浏览器一致document.documentElement.offsetWidth返回整个文档的可见宽度(包含滚动条,值和innerWidth一致),注意,这里和FF等浏览器又有点区别。document.documentElement.clientwidth返回整个文档的可见宽度(不包含边框),和FF等浏览器一致。clientwidth = offsetWidth - 滚动条宽度document.body.scrollWidth返回body的宽度,document.body.offsetWidth返回body的offsetWidth,和FF等浏览器一致document.body.clientwidth返回body的clientwidth(不包含边框),和FF等浏览器一致,clientwidth = offsetWidth - borderWidthIE7IE7与IE9/IE8的主要区别是第一、document.documentElement.offsetWidth的返回值不一样,参见上面说的,IE9/IE8的document.documentElement.offsetWidth包含滚动条,第二、document.documentElement.scrollWidth返回整个文档的宽度,其他倒是挺一致的。最后是IE6了IE6的document.documentElement返回值与IE9/IE8没有区别(由此可见,对于document.documentElement,IE7就是个奇葩)。因此,在算上IE6在解析width方面的bug,和其他的浏览器的区别就淋漓尽致了。document.body.scrollWidth返回body的宽度,和IE9/IE8/IE7一致document.body.offsetWidth返回body的offsetWidth,注意,由于body的不同,这里的offsetWidth = scrollWidth + borderWidthdocument.body.clientwidth返回body的clientwidth(不包含边框)clientwidth = offsetWidth - borderWidth

总结一下,在标准模式下,我们获取文档可见区域的方法如下: 

复制代码代码如下:

function getViewSizeWithoutScrollbar(){//不包含滚动条 
return { 
width : document.documentElement.clientWidth, 
height: document.documentElement.clientHeight 
function getViewSizeWithScrollbar(){//包含滚动条 
if(windows.innerWidth){ 
return { 
width : windows.innerWidth, 
height: windows.innerHeight 
}else if(document.documentElement.offsetWidth == document.documentElement.clientWidth){ 
return { 
width : document.documentElement.offsetWidth, 
height: document.documentElement.offsetHeight 
}else{ 
return { 
width : document.documentElement.clientWidth + getScrollWith(), 
height: document.documentElement.clientHeight + getScrollWith() 

getScrollWith()是获取滚动条尺寸,参见 

转载于:https://my.oschina.net/syso4yy/blog/506300

你可能感兴趣的文章
django框架 restful规范 CBV源码分析
查看>>
jdk 配置(已验证,但是并不是完全相同)
查看>>
《代码敲不队》第九次团队作业:Beta冲刺与验收准备
查看>>
迭代器和生成器
查看>>
requests库入门05-参数类型
查看>>
go语言 windows 32位编译环境搭建
查看>>
我的家庭私有云计划-20
查看>>
手把手教你封装属于自己的Windows7安装镜像
查看>>
《作业指导书》的发布管理问题与解决办法
查看>>
55.Azure内容分发网络(CDN)
查看>>
MySQL常见错误代码(error code)及代码说明
查看>>
微软MVP社区巡讲
查看>>
总结一下,MariaDB 10(MySQL5.6企业版分支)的主要新特性
查看>>
MS UC 2013-0-虚拟机-标准化-部署-2-模板机-制作-3-安装-Tool
查看>>
IDS与IPS的区别
查看>>
初试Windows 8 RTM
查看>>
Linux 下rpm包搭建LAMP环境
查看>>
Windows Server 2016-Nano Server介绍
查看>>
未来架构师的平台战略范例(4)_大数据
查看>>
Grizzly学习笔记(二)
查看>>