当设置了父元素的宽度,子元素设置宽度为100%后再在加上子元素上添加padding或margin值就会溢出。举个例子:css
<!-- 示例 --> <!-- html --> <div class="parent"> <div class="child"></div> </div> <!-- css --> .parent { width: 500px; height: 50px; background-color: green; border: 1px solid #E74D4D; } .child { width: 100%; height: 30px; margin: 20px; background-color: pink; }
示例html
这是由于设置了width: 100%;
后已经将父元素占满,再添加margin
值就会溢出(默认溢出值为左侧的margin
值)css3
解决方法:浏览器
padding
<!-- 弊端是增长了parent占用的宽度 --> .parent { width: 500px; height: 50px; padding: 20px; background-color: green; border: 1px solid #E74D4D; } .child { width: 100%; height: 30px; background-color: pink; }
box-sizing: border-box;
属性解释连接border
和padding
全会在你设置的宽度内部。.parent { width: 500px; height: 50px; padding:20px; background-color: green; border: 1px solid #E74D4D; box-sizing: border-box; } .child { width: 100%; height: 30px; background-color: pink; }
<div class="parent"> <div class="child2"> <!-- 设置margin: 20px; --> <div class="child"></div> </div> </div>
** end **spa
下面是彩蛋。。。.net
我在举这个例子的时候发现了一个css hack(针对不一样的浏览器/不一样版本写相应的CSS code的过程):父元素与子元素之间的margin-top问题。
html代码ssr
<div class="box1"> <div class="box2"></div> </div>
css样式code
.box1{height:200px;width:200px;background:gray;} .box2{height:100px;width:100px;background:gold;margin-top:50px;}
结果htm
示例blog
父元素的盒子包含一个子元素盒子,给子元素盒子一个垂直外边距margin-top,父元素盒子也会往下走margin-top的值,而子元素和父元素的边距则没有发生变化。
解决方法:
ps:
https://www.cnblogs.com/bluey/p/6417922.html
https://www.cnblogs.com/Renyi-Fan/p/9006084.html