谈谈对盒模型的理解?
1.1 基本概念
当对一个文档进行布局的时候,浏览器的渲染引擎会将元素表示为一个个的矩形的盒子,一个盒子由四部分组成content、padding、border、margin
- content:实际内容,显示文本和图像
- padding:内边距,内容和边框之间的空白区域,内边距是透明的,取值不能为负,颜色由盒子模型的background属性决定
- border:元素内容周围的一条或者多挑的线,由粗细、样式、颜色三部分组成,没有设置颜色的时候和盒子的color属性一致
- margin:外边框,在元素边框外面创建的空白区域
1.2 盒模型
- css盒模型的每个部分:content、padding、border、margin合在一起就创建了我们在页面上看到的内容
- css盒模型分为两种:标准盒模型和怪异盒模型
1.2.1 标准盒模型
- 盒子的总宽度=width+padding+border
- 盒子的总高度=height+padding+border
1.2.2 怪异盒模型
1.3 盒模型的转换
css中的box-sizing属性定义了两种盒模型如何的转换
box-sizing: content-box|border-box|inherit;
- content-box默认值,元素的width、height不包含padding和border,与标准盒模型表现一致
- border-box元素的width、height包含了padding和border,与怪异盒模型表现一致
- inherit指定box-sizing属性的值,应该从父元素继承
1.4 js如何获取盒模型的宽高
dom.style.width/height
只能获取到行内样式的宽和高,style标签中和link外链的样式取不到
dom.currentStyle.width/height
(只有IE兼容)获取到的是最终渲染后的宽和高
window.getComputedStyle(dom).width/height
同2是一样的,但是是多浏览器支持,IE9以上支持
dom.getBoundingClientRect().width/height
:也是获取的是渲染后的宽和高,大多数浏览器支持,IE9以上支持,除此外还可以获得相对于视窗的上下左右的距离。
dom.offsetWidth/offsetHeight
包括高度(宽度)、内边距和外框,不包括外边框,最常用,兼容性是最好的
1.5 实例题(根据盒模型解释外边距重叠)
父元素里面嵌套一个子元素,已知子元素的高度是100px,子元素与父元素的上边距是10px,计算父元素的实际高度。

<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
<title>Document</title>
<style>
* {
padding: 0;
margin: 0;
}
.parents {
width: 100px;
background: #ff9934;
}
.child {
width: 100%;
height: 100px;
background: #336667;
margin-top: 10px;
}
.parent2 {
overflow: hidden;
}
</style>
</head>
<body>
<p>1父元素实际高度为100px</p>
<div class="parents parent1">
<div class="child child1"></div>
</div>
<p>2父元素实际高度为110px</p>
<div class="parents parent2">
<div class="child child2"></div>
</div>
</body>
</html>