场景:
<div class="demo">(父盒子)
<div class="box"></div>(子盒子)
</div>
当你设置子盒子的padding和border的时候就会把父盒子撑破,因为子盒子的宽度是100%,而浏览器的默认盒模型为content-box(即内容为其的宽度)
1.利用box-sizing属性。
原理:改变子盒子的盒模型(即把子盒子的content-box变为border-box)。border-box的宽度会包括content+padding+border
2.利用calc()属性。【css3d的calc()属性详细讲解见https://www.cnblogs.com/avon/p/5908393.html】
知道总宽度是100%,在这个基础上减去boder的宽度(5px * 2 = 10px),在减去padding的宽度(10px * 2 = 20px),即"100% - (10px + 5px) * 2 = 30px" ,最终得到的值就是div.box的width值:
.demo { width: 300px; background: #60f; padding: 3px 0; } .box { background: #f60; height: 50px; padding: 10px; border: 5px solid green; width: 90%;/*写给不支持calc()的浏览器*/ width:-moz-calc(100% - (10px + 5px) * 2); width:-webkit-calc(100% - (10px + 5px) * 2); width: calc(100% - (10px + 5px) * 2); } 这样一来,通过calc()计算后,div.box不在会超出其容器div.demo的宽度,如图所示