关于offset,scroll,position

在看1.11.0的JQuery文档的时候offset的介绍是

            获取匹配元素在当前视口的相对偏移。

一直以为是相对于视口的值。后面在用到的时候发现原来是到页面顶部的值。offset().top;offset().left;都是针对页面文档的.

原生的是offsetLeft,他跟父元素是否是定位有关。如果父元素是声明了position,offsetLeft的值就是相对父元素的偏移量。如果父元素没有,offsetLeft则是相对视口的偏移量。

scrollTop的介绍是:

          获取匹配元素相对滚动条顶部的偏移。

和offset的介绍相比少了一个“在”,这就是自己第一次理解offset时的误区了。

position的介绍是:

          获取匹配元素相对父元素的偏移。position().top;position().left

这里有一种情况就是父元素设置padding-left值,子元素设置margin-left值,获取position().left值的时候是不包括子元素的margin-left的。

<style type="text/css">
#div1{
	 200px;
	height: 200px;
	background: red;
	position: relative;
	padding-left: 30px;
}
#div2{
	50px;
	height: 50px;
	background: yellow;
	position: absolute;
	margin-left: 10px;
}
</style>
<body>
<div id="div1">
	<div id="div2"></div>
</div>
</body>
<script>

var leftdistan=$("#div2").position().left;
		console.log(leftdistan);//30
</script>

  

说到position想到之前遇到对一个元素设置position:absolute的时候会从它的父级开始找,如果碰到父级或者更高的爷级元素有position属性的时候,会相对与找到的这个元素来进行top和left的定位。以前一直以为position的值必须为relative才可以让它的子元素相对于它来进行position:absolute.其实父元素的position:fixed的时候其子元素也可以相对其进行绝对定位。但是fixed可能一些老的浏览器不支持,没去研究。

z-index是定位元素的层叠属性,较大的z-index会覆盖在较小的上,前提是此属性仅仅作用于position属性值为relative或者absolute的对象。

原文地址:https://www.cnblogs.com/jjucap/p/5332350.html