div下的h1 bootstrap设定的margin-top失效了?
在用bootstrap3做项目时,发现被bootstrap3设定的h1的margin-top:20px;失效了,如下:
https://jsfiddle.net/DTcHh/30...
HTML
<div class="header">
<h1>123</h1>
</div>
CSS
div.header{
background-color:blue;
}
h1{
background-color:red;
}
参考了w3cschool card的范例(https://www.w3schools.com/w3c...后,发现他在div.header上加了个:after和:before,内容是:
https://jsfiddle.net/DTcHh/30...
.header:after,.header:before{
content: "";
display: table;
clear: both;
}
请问在:after,:before这三行是什麽巫术这麽神奇,为什麽会这麽使用呢?
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(1)
首先回答第一个问题,margin-top失效了,原因是发生了margin collapse。
先来看规范中的描述,
那么我们尝试一下设置top border | top padding 。
top border
top padding
此时你可以很明显的看到margin神奇的重新出现了。
接下来, 我们解释为什么添加了before, after属性以后就可以了。
before,after都是伪元素,我们可以把它们看做真正的元素,那么它们就是div的子元素了,然而这个块级子元素拥有着一个clear属性导致其无法和其父元素发生margin collapse,
再来看这句,
所以这个before元素也无法和h1发生折叠,同样是因为设置了clear属性,
我觉得设置after是为了阻止div中最后一个子元素的bottom margin和父元素 div 的bottom margin发生折叠。
仅作参考,