在看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的对象。