JS 的位置、元素宽高计算

1,055 阅读2分钟

JS 的位置、元素宽高计算

为了更加清晰地了解和更好地计算元素的宽高,必须要先清楚 CSS 的盒模型。

1.CSS 盒模型

盒模型是 css 布局的基石,它规定了网页元素如何显示以及元素之间的关系。CSS 模型本质上是一个盒子,封装了周围了 HTML 元素,它包括边距、边框、填充和实际内容。盒模型可分为两种:W3C 盒模型(标准盒模型)IE 盒模型(怪异盒模型),这两种盒模型都包括 margin、border、padding、content 四个部分,他们的说明如下:

  • margin:外边距、外界。边框外的部分,该区域是透明的。
  • border:边框。位于外边距和内边距之间,包含着填充区域(padding)和内容区域(content)。
  • padding:内边距、填充。该区域包裹着实际内容区域。
  • content:盒子的实际内容。
  • width 和 height:指的是内容的宽度和高度(并不是指盒子的宽度和高度)。

1.1 标准盒模型

标准盒模型的范围包括:margin、border、padding、content
内容的范围包括:content
height 就是 content 的高度;
width 就是 content 的宽度。
标准盒模型的图文介绍如下图所示:
标准盒模型.png

1.2 IE 盒模型

IE 盒模型的范围和标准盒模型一样,也包括:margin、border、padding、content
但其内容的范围包括:borderpaddingcontent


height 表示 borderpaddingcontent 三部分的高度之和;

width 表示 borderpaddingcontent 三部分的宽度之和。
IE 盒模型的图文介绍如下图1-2所示:
IE盒模型.png

2. 元素的宽高

2.1 clientHeight

元素可视区域的高度,包括元素的 contentpadding 的高度,不包括 滚动条 的高度。

// height + padding-top + padding-bottom
document.getElementById('app').clientHeight

2.2 clientWidth

元素可视区域的宽度,包括元素的 contentpadding 的宽度,不包括 滚动条 的宽度。

// width + padding-left + padding-right + border-left + border-right
document.getElementById('app').offsetWidth

2.3 offsetHeight

元素占据页面的高度,包括元素的 contentpaddingborder 的高度,也包括 滚动条 的高度。

// height + padding-top + padding-bottom + border-top + border-bottom + 滚动条的总高度
document.getElementById('app').offsetHeight

2.4 offsetWidth

元素占据页面的宽度,包括元素的 contentpaddingborder 的宽度,也包括 滚动条 的宽度。

// width + padding-left + padding-right + border-left + border-right + 滚动条的总宽度
document.getElementById('app').offsetWidth

2.5 scrollHeight

元素的总高度,也称为滚动高度。即当有滚动条时,滚动条从最上面滚到最下面实际走过的距离。看下面的例子可以更好地了解scrollHeight 属性。

<style>
    #zzz {
        width: 100px;
        height: 100px;
        overflow: scroll;
    }

    #app {
        background: pink;
        width: 200px;
        height: 200px;
        border: 20px solid cyan;
        margin: 50px;
        padding: 30px;
    }
</style>


<div id="zzz">
    <div id="app"></div>
</div>

<script>
    document.getElementById('zzz').scrollHeight // 400
</script>

</html>

2.6 scrollWeight

元素的总宽度,也称为滚动宽度。即当有滚动条时,滚动条从最左侧滚到最最右侧实际走过的距离。