scrollWidth,offsetWidth,clientWidth,width;scrollHeight,offsetHeight,clientHeight,height;offsetTop,scrollTop,top;offsetLeft,scrollLeft,left还有谁
题中的那么多属性让人头都大了,他们到底是什么意思?不同浏览器的实现是一样的吗?以下所有结论来自chrome版本 53.0.2785.89 (64-bit)和firefox版本52.0.2,操作系统ubuntu16.04的测试,关于IE及其它浏览器并没有考虑。
一、谈谈XXWidth
1、width
这个是style对象的一个属性,跟你在css样式里写的那个width的值是一样的,注意他是带单位的。
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>1</title>
<style type="text/css">
div{
width: 100px;
height: 100px;
border: 20px;
margin: 20px;
padding: 20px;
background: red;
}
</style>
</head>
<body>
<div id="div"></div>
<script type="text/javascript">
var link = document.getElementsByTagName("style")[0];
var sheet = link.sheet||link.styleSheet;
var rules = sheet.rules || sheet.cssRules;
console.log(rules[0].style.width);
</script>
</body>
</html>
上述例子中结果都是 100px,当然chrome和firefox在获取CSSStyleSheet对象和cssRules对象上还有区别,chorme由sheet和rules得到,firefox由styleSheet 和cssRules得到。
2、clientWidth
这个值表示的是可用区域的宽度,测试没有竖向滚动条时两个浏览器对这个属性保持一致,有滚动条时,chrome认为滚动条是15px,ff认为是10px;而且通过document.body.clientWidth 得到的值和通过document.documentElement.clientWidth得到的值不同,前者等于css的width+左右padding,后者仍然是可用区的宽。有人将这个属性交可视区宽,本人认为不对,可以理解成可用区宽。自行体会,注意padding也是可用的。
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>clientWidth</title> <style type="text/css">
body{
margin: 0;
padding: 20px;
width: 5000px;
/* height: 10000000px; */
}
</style>
</head>
<body>
<script type="text/javascript">
console.log(document.documentElement.clientWidth);
</script>
</body>
</html>
我测试结果两个都是1319(你的测试可能不一样,浏览器的宽度不一样);
如果出现竖向滚动条(去掉height注释),chrome值为1304,firefox值为1309。
如果用body代替上述的documentElement则,结果为5040. 如果设置box-sizing:border-box则值为5000.此处可以用标准盒子模型解释。
3、offsetWidth
表示一个对象的实际宽度。
<!DOCTYPE html>
<html>
<head>
<title>offsetWidth</title>
<style type="text/css">
div{
width: 100px;
height: 100px;
margin: 10px;
padding: 13px;
background: red;
}
</style>
</head>
<body>
<div></div>
<script type="text/javascript">
var div = document.getElementsByTagName("div")[0];
console.log(div.offsetWidth);
</script>
</body>
</html>
得到值为126,加上box-sizing: border-box;为100
看看有滚动条的情况
<!DOCTYPE html>
<html>
<head>
<title>offsetWidth</title>
<style type="text/css">
.outer{
width: 100px;
height: 100px;
margin: 10px;
padding: 13px;
background: red;
box-sizing: border-box;
overflow: scroll;
}
.inner{
width: 1000px;
height: 1000px;
}
</style>
</head>
<body>
<div class="outer">
<div class="inner" id="inner"></div>
</div>
<script type="text/javascript">
var div = document.getElementById("inner");
console.log(div.offsetWidth);
</script>
</body>
</html>
发现仍然是表示真实宽度。
4、scrollWidth
表示的是对象真实宽度,这个和offsetWidth有什么区别呢,我得测试测试。没区别吗?我将上面的offsetWidth换成scrollWidth后发现还是1000啊!在测试,要是一样搞两个干嘛呢,一定有区别的。
<!DOCTYPE html>
<html>
<head>
<title>scrollWidth</title>
<style type="text/css">
.outer{
width: 100px;
height: 100px;
margin: 10px;
padding: 13px;
background: red;
box-sizing: border-box;
overflow: scroll;
}
.inner{
width: 1000px;
height: 1000px;
border: 13px solid red;
padding: 12px;
margin:4px;
}
</style>
</head>
<body>
<div class="outer">
<div class="inner" id="inner"></div>
</div>
<script type="text/javascript">
var div = document.getElementById("inner");
console.log(div.scrollWidth);
</script>
</body>
</html>
一不做,二不修,border,margin,padding全上。发现offsetWidth为1050,说明它算了padding和borer,而scrollWidth为1024,只算了padding没算border。
哦!我知道了,原来offsetWidth算边宽,而scrollWidth不算边宽啊。
二、谈谈XXtop
上面谈得是与大小相关的,下面谈与位置相关的。
1、top
这个是style的属性,没有定义返回“”,定义在link或者style中的拿不到。
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>top</title>
<style type="text/css">
</style>
</head>
<body>
<div id="div" style="width: 100px;height: 100px;background: red;position: relative;top: 20px"></div>
</body>
<script type="text/javascript">
var div = document.getElementById("div");
console.log(div.style.top);
</script>
</html>
返回20px,带单位。
2、offsetTop
他更top差不多,但是是返回的数字,而且一定有值。就是这样

结果我测试了一下,发现不对啊,就是上面的那个例子,我直接改了个offsetTop,你猜怎么着,结果是28不是20,然后我给了一个body{margin:0;}, 然后就是20了,你说奇怪不奇怪。我的理解是。因为上面是position:relative;是相对自己定位的,所以它本来的上边距离外面那个宽有8px,8px是body的margin引起的。而offsetTop考虑了这个8,是从父元素的最最外边算得,不是border那里。
3、scrollTop
表示的是被卷去的高度。比如下面就是0,因为获取的时候还没卷。
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>top</title>
<style type="text/css">
body{
margin: 10px;
height: 1000000000000px;
}
</style>
</head>
<body>
<div id="div" style="width: 100px;height: 100px;background: red;position: relative;top: 20px"></div>
</body>
<script type="text/javascript">
var b = document.body;
console.log(b.scrollTop);
</script>
</html>
三、关于xxheight和xxleft,offsetParent
xxheight和xxleft跟上面的差不多,对比一下就知道了。offsetParent和parentNode是有区别的,看这里:http://blog.csdn.net/u012552049/article/details/45390181,offset相对于谁偏移,相对于谁就是offsetParent,这个元素一般来说是用了定位的元素。
参考:
- http://www.cnblogs.com/kongxianghai/p/4192032.html
- http://blog.csdn.net/woxueliuyun/article/details/8638427
- http://wenku.it168.com/d_000647093.shtml
scrollWidth,offsetWidth,clientWidth,width;scrollHeight,offsetHeight,clientHeight,height;offsetTop,scrollTop,top;offsetLeft,scrollLeft,left还有谁的更多相关文章
- height clientHeight scrollHeight offsetHeight的大致区别
这主要是针对火狐浏览器来讲的: height:就是div的高度,就是style中设置的高度:在chrome中clientHeight是包含padding的,offsetHeight和clientHei ...
- 浏览器中如何获取想要的offsetwidth、、、clientwidth、、offsetheight、、、clientheight。。。
clientWidth是对象看到的宽度(不含边线,即border)scrollWidth是对象实际内容的宽度(若无padding,那就是边框之间距离,如有padding,就是左padding和右pad ...
- 彻底搞清楚DOM元素的height,offsetHeight,clientHeight,scrollHeight
测试用例: <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF ...
- clientHeight ,offsetHeight,style.height,scrollHeight有区别与联系
style.height 包括 元素的滚动条,不包括边框clientHeight 不包括元素的滚动条和边框,只有在没有元素的滚动条的情况下,style.height相等于clientHeightoff ...
- scrollWidth、clientWidth、offsetWidth、width的区别
scrollWidth:对象的实际内容的宽度,不包边线宽度,会随对象中内容超过可视区后而变大. clientWidth:对象内容的可视区的宽度,不包滚动条等边线,会随对象显示大小的变化而改变. off ...
- offsetHeight, clientHeight与scrollHeight的区别
在网上搜了一下,结论非常笼统,讲IE从不讲版本,因此自己做了测试并上传结论.以下结论皆是在标准模式下测试通过的,没有测试quirk模式. clientHeight 大部分浏览器对 clientHe ...
- offsetTop,offsetHeight,clientHeight,scrollHeight,scrollTop区别
这些高度相信很多同学都搞不清楚吧.这里我通过本地测试,发现了区别. 以聊天窗口为例. 元素(class='content')高度444px,其中上下padding分别是10px,margin为0.距离 ...
- scrollTop,scrollHeight,clientTop,clientHeight,offsetTop,offsetHeight实际意义 及 计算方式 附实例说明
一.滚动距离.高度 scrollTop scrollLeft scrollHeight scrollWidth 二.相对位置.距离 offsetTop offsetLeft offsetHeight ...
- clientHeight , scrollHeight , offsetHeight之间的区别及兼容方案
clientHeight , scrollHeight , offsetHeight相信每个人都用过,可是每次用都要查一下到底哪个是文档大小哪个是视口大小,还有头疼的兼容问题. 先来官方的了解一下这三 ...
随机推荐
- 使用Jmeter3.1进行接口测试(包含需登录后测试的接口)
Jmeter版本为3.1,以下只针对此版本进行测试说明: 1.打开Jmeter3.1: 启动命令路径:apache-jmeter-3.1\bin\jmeter.bat 2.测试步骤: 1.测试计划-- ...
- 令人费解的java泛型
对于我们java中的泛型,可能很多人知道怎么使用并且使用的还不错,但是我认为想要恰到好处的使用泛型,还是需要深入的了解一下它的各种概念和内部原理.本文将尽可能的囊括java泛型中的重要的概念 ...
- Linux下ls命令显示符号链接权限为777的探索
Linux下ls命令显示符号链接权限为777的探索 --深入ls.链接.文件系统与权限 一.摘要 ls是Linux和Unix下最常使用的命令之一,主要用来列举目录下的文件信息,-l参数允许查看当前目录 ...
- 《剑指offer》— JavaScript(19)顺时针打印矩阵
顺时针打印矩阵 题目描述 输入一个矩阵,按照从外向里以顺时针的顺序依次打印出每一个数字,例如,如果输入如下矩阵: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 则依次打 ...
- ABP Zero 单部署,单数据库,多租户架构
首先,我们应该定义多租户系统中的两个条目: 租主(Host):租主是单例的(只有一个租主).租主会对创建和管理租户负责.因此,一个“租主用户”比所有的租户等级更高,并独立于所有租户,同时还能控制他们. ...
- markdown中常见的转义字符
markdown中的转义字符 字符 转义后字符 & & " " > > < < 不断空格 \ \\ ` \` * \* _ \_ {} ...
- Git如何检出指定目录或文件
系统版本:Window 10,Git 版本:2.7.1 对于大型 Git 仓库,每次执行 Git 命令,都需要经过漫长的等待,特别是要经常执行的 git status 命令.下面是一个例子... 从 ...
- js实现浏览器添加收藏功能
今天搞项目的时候为了实现浏览者实现添加收藏的功能,特地了解了一下相关的API. 也看到了网上各种版本的代码.整理了一下,代码如下.简单易懂. <script> function _addF ...
- java基础:数组查询,同一数组一个元素最多出现两次
- css秘密花园
picture元素 http://www.w3cplus.com/responsive/responsive-images-101-part-6-picture-element.htmlCHAPTER ...