元素的clientHeight、offsetHeight、scrollHeight、scrollTop、offsetTop属性相信我们在项目里接触的不少,作为小白,刚开始接触傻傻分不清楚,每次遇到都要翻资料,很难分清楚具体的区别,知识点不难,但对我来说记忆。好吧,看来是不够认真,不自己总结永远记不住,那就总结一下,顺便加深自己的记忆,免得以后频繁查资料,相信大家看完这篇总结,一定不会被这几个属性迷惑了。
具体分为5大类:
-
clientHeight/clientWidth——可读
-
offsetHeight/offsetWidth——可读
-
offsetTop/offsetLeft——可读
-
scrollHeigth/scrollWidth——可读
-
scrollTop/scrollLeft——可读可写
接下来,我会通过自己对他们的认识来给不同的属性加以定义,同时图文并茂,相信看完这篇文章的你再也不备这几个属性烦恼了。因为的官网的定义太过官方,还是不利于记忆和区分。太难了。。。。
先给大家来个【查阅手册】:
1、clientHeight/clientWidth:元素padding以内(包括padding)的可见区域距离,不包括滚动条;
2、offsetHeight/offsetWidth:元素border以内(包括border)的可见区域距离,包括滚动条;
3、scrollHeigth/scrollWidth:元素border以内(包括border)的整体区域(可见区域+不可见区域)距离;
4、scrollTop/scrollLeft:在有滚动条时,滚动条向下/向右滚动的距离也就是元素顶部/左侧被遮住部分的距离;
5、offsetTop/offsetLeft:子元素的border-box左上角相对offsetParent定位父元素的content-box的偏移量;
以上定义应该是清晰明了的,相信大家看完定义已经可以在一定程度上区分它们的不同,如果你还是有疑问那就继续跟我走吧,相信看完下面的你会更加印象深刻,go~
实例分析阶段(有图)
<div class="position-outer" style="position: relative">
<div class="position-inner" style="position: relative">
<div class="not-position">
<div class="box1" style="position: fixed"></div>
</div>
</div>
</div>
四个盒子(正方形)逐层包裹,最外层盒子Width/height:400px;从外向内递减100px,盒子右上角标注对应盒子的宽高,所有盒子的内边距都是padding:35px;边框都是border:15px;通过html可知第一层(最外层)盒子和第二层盒子都有position:relative的定位属性,第四层(最里层)有position:fixed的定位属性,第三层没有定位属性。实例的情况介绍完了,下面通过这个实例来看看具体的值。。
1、clientHeight/clientWidth
上面对这个属性的定义是元素padding以内(包括padding)的可见区域距离,不包括滚动条,如果用盒模型来解释这句定义就是 element.clientHeight = element.height(可见区域) + element.padding,为什么要强调可见区域?看到下面的scrollHeigth你就知道了。clientWidth同上。 1)没有滚动条的情况,实例中每层盒子的clientHeight如下:
2、offsetHeight/offsetWidth:
元素border以内的区域,因为滚动条占用的是padding的区域,所以自然包括滚动条,如果用盒模型来解释这句定义就是 element.clientHeight = element.height + element.padding + element.border 1)没有滚动条的情况,实例中每层盒子的offsetHeight如下:
3、scrollHeigth/scrollWidth:
因为子元素比父元素高,父元素不想被子元素撑的一样高就显示出了滚动条,在滚动的过程中子元素有部分被隐藏了。所以scrollHeigth/scrollWidth代表元素padding以内的整体高度,当前可见部分高度+不可见部分的元素的高度,而可见部分的高度其实就是clientHeight,也就是scrollHeight>=clientHeight恒成立。在有滚动条时讨论scrollHeight才有意义,在没有滚动条时,也就是子元素不存在滑动,此时元素scrollHeight==clientHeight恒成立。 1)没有滚动条的情况,实例中每层盒子的scrollHeigth如下:
4、scrollTop/scrollLeft 偏移量,代表在有滚动条时,滚动条向下滚动的距离也就是元素顶部被遮住部分的高度。在没有滚动条时scrollTop==0恒成立。 可读可设置
注意两点:webkit内核、Firefox下的特殊情况:
1)element自身的display属性为none
<div class="position-outer" style="position: relative">
<div class="position-inner" style="position: relative">
<div class="not-position" >
<div class="box1" style="display:none"></div>
</div>
</div>
</div>
2)element自身的position属性为fixed
<div class="position-outer" style="position: relative">
<div class="position-inner" style="position: relative">
<div class="not-position" >
<div class="box1" style="position: fixed"></div>
</div>
</div>
</div>
好了关于属性总结完了,如有不正,希望指正,啦啦啦啦~