网页渲染的时候,全部的元素都会被浏览器引擎根据CSS-Box模型描述为一个盒子,CSS会决定这些盒子的大小, 位置, 属性(颜色, 边框...)。盒子模型由内容(content)、内边距(padding)、边框(border)、外边距(margin)组成。但盒子的大小由content+padding+border这几部分决定,把margin算进去的那是盒子占据的位置,而不是盒子的大小。浏览器
盒模型分为两类: IE盒模型(或怪异模型)和标准盒模型。
二者的区别在于:bash
举个栗子 ui
<style>
.content-box {
width: 150px;
height: 150px;
background: #fff;
margin-bottom: 200px;
}
.child1 {
float: left;
width: 50%;
height: 100px;
padding: 10px;
border: 5px solid red;
background: #ccc;
}
.border-box {
width: 150px;
height: 150px;
background: #fff;
}
.child2 {
float: left;
width: 50%;
height: 100px;
padding: 10px;
box-sizing: border-box;
border: 5px solid red;
background: #ccc;
}
</style>
<body>
<div class="content-box">
<div class="child1">子元素1</div>
<div class="child1">子元素1</div>
</div>
<div class="border-box">
<div class="child2">子元素1</div>
<div class="child2">子元素1</div>
</div>
</body>
复制代码
我同时设置了两个子元素宽度都是父元素的50%;当想在子元素内加padding或者border时,标准模型盒子的实际宽度就会超过50%,致使换行。若是强行想让子元素在同一行内,就不能设置宽度为50%,而应该经过计算width:cacl(50% - 2 * padding - 2 * border);而对于IE盒模型,内容的宽度会根据padding和border进行调整,元素的真实宽度始终是50%,因此不会致使换行。spa
目前在ie8+以及其余浏览器中盒模型默认值为content-box,即标准盒模型。能够经过box-sizing进行切换。code
box-sizing: content-box|border-box|inherit;
你们能够根据本身的须要,经过box-sizing来愉快地改变盒子模型啦~cdn