clientWidth
是一个只读属性,返回元素的内部宽度,该属性包括内边距,但不包括垂直滚动条 (如果有)、边框和外边距。
用法:
var offsetWidth = element.clientWidth;
计算方法:
clientWidth = width + padding
offsetWidth
是一个只读属性,返回一个元素的布局宽度。一个典型的 offsetWidth 是测量包含元素的边框、水平线上的内边距、竖直方向滚动条 (如果有的话)、以及 CSS 设置的宽度(width) 值。
用法:
var offsetWidth = element.offsetWidth;
计算方法:
clientWidth = width + padding + scrollWidth + border
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<meta http-equiv="X-UA-Compatible" content="ie=edge">
<title>Document</title>
<style>
#parent {
width: 200px;
height: 200px;
background-color: red;
}
</style>
</head>
<body>
<div id="parent"></div>
<script>
var clientWidth = window.document.getElementById("parent").clientWidth;
var offsetWidth = window.document.getElementById("parent").offsetWidth;
console.log(clientWidth); //200
console.log(offsetWidth); //200
</script>
</body>
</html>
当我们给上面 parent 元素加上边框内边距时:
#parent {
width: 200px;
height: 200px;
background-color: red;
border: 10px solid black;
padding: 10px;
}
显示结果如图:
输出结果为:
// clientWidth: 220
// offsetWidth: 240
计算规则
(clientWidth)220 = 200(width) + 10(padding) + 10(padding)
(offsetWidth)240 = 200(width) + 10(padding) + 10(padding) + 10(border) + 10(border)
现在我们给 parent 加一个子元素,并让滚动条出现,完整代码如下:
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<meta http-equiv="X-UA-Compatible" content="ie=edge">
<title>Document</title>
<style>
#parent {
width: 200px;
height: 200px;
background-color: red;
border: 10px solid black;
padding: 10px;
overflow: auto;
}
#son {
width: 300px;
height: 300px;
}
</style>
</head>
<body>
<div id="parent">
<div id="son"></div>
</div>
<script>
var clientWidth = window.document.getElementById("parent").clientWidth;
var offsetWidth = window.document.getElementById("parent").offsetWidth;
console.log(clientWidth);
console.log(offsetWidth);
</script>
</body>
</html>
显示结果如图:
输出信息如下:
// 205
// 240
对于上述代码作个简要说明,clientWidth 值为 205 是这样计算来的:原本我们设置 parent 的宽度为 200, 因为我们设置了父元素 overflow:scroll 属性出现滚动条后,滚动条宽度被包括在这个设置的宽度之内。chrome 浏览器滚动条默认宽度为 15,所以 parent 宽度就只剩 185。
计算规则:
(clientWidth)205 = 185(实际 width) + 10(padding) + 10(padding)
(offsetWidth)240 = 185(实际 width) + 10(padding) + 10(padding) + 10(border) + 10(border) + 15(scrollWidth)