【css】offset、client、scroll家族属性

77 阅读2分钟

:内边距、外边距、边距的关系 juejin.cn/post/741295…

offset家族

偏移量(offset dimension)是javascript中的一个重要的概念。涉及到偏移量的主要是offsetLeftoffsetTopoffsetHeightoffsetWidth这四个属性。

当然,还有一个偏移参照————定位父级offsetParent

image.png

offsetWidth、offsetHeight包含边距和内边距

offsetWidth = border-left-width + padding-left + width + padding-right + border-right-width

offsetHeight = border-top-width + padding-top + height + padding-bottom + border-bottom-width

client

client是javascript中的一个重要的概念。涉及到偏移量的主要是clientLeftclientTopclientWidthclientHeight这四个属性。

41486e3154754342dfaf2eb0ffe9025.png

[定位父级]

​ 在理解偏移大小之前,首先要理解offsetParent。人们并没有把offsetParent翻译为 偏移父级 ,而是翻译成定位父级,很大原因是offsetParent与定位有关

​ 定位父级offsetParent的定义是:与当前元素最近的经过定位父级元素,主要分为下列几种情况

1.元素自身有fixed定位,offsetParent的结果为null

当元素自身有固定定位时,我们知道固定定位的元素相对于视口进行定位,此时没有定位父级,offsetParent的结果为null

firefox浏览器有兼容性问题

<div id="test" style="position:fixed"></div>    
<script>
   var test = document.getElementById('test');
   //firefox并没有考虑固定定位的问题,返回<body>,其他浏览器都返回null
   console.log(test.offsetParent);
</script>

2.元素自身无fixed定位,且父元素都没有设置定位,offsetParent的结果为body

<div id="test"></div>    
<script>
    var test = document.getElementById('test');
    console.log(test.offsetParent);//<body>
</script>

3.元素自身无fixed定位,且父级元素存在经过定位的元素,offsetParent的结果为离自身元素最近的经过定位的父级元素

<div id="grandfather" style="position: relative;">
    <div id="father" >
        <div id="test"></div>
    </div>
</div>
<script type="text/javascript">
    var test = document.getElementById('test');
    // 距离该子元素最近的进行过定位的父元素,如果其父元素不存在定位则offsetParent为:body元素;
    console.log(test.offsetParent);
</script>

4.<body>元素的offsetParent是null

console.log(document.body.offsetParent);//null

clientWidth = padding-left + width + padding-right

clientHeight = padding-top + height + padding-bottom

clientLeft和clientTop:返回的是元素边框的 borderWidth,如果不指定一个边框或者不定位改元素,其值就为0

scroll

scroll(滚动)是javascript中的一个重要的概念。涉及到偏移量的主要是scrollLeftscrollTopscrollWidthscrollHeight这四个属性。

1726055727914.png

当盒子内容超出盒子之后就会出现滚动条,这时候的

scrollHeight滚动高度=内容的高度

scrollWidth滚动的宽度=内容的宽度

scrollLeft、scrollTop = 滚动出去的部分