CSS中能否通过设置margin-top和margin-bottom相等来垂直居中

<!DOCTYPE html>
<html>
<head>
    <style>
        #a{
            background-color:red;
            height: 100px;
            color: #fff;
        }
        #b{
            width: 60%;
            margin-left: auto;
            margin-right: auto;
            background-color:blue;
            height: 50px;
            margin-top: 50px;
            color: #fff;
        }
    </style>
</head>
<body>
    <div id="a">
        <div id="b">b</div>
        a
    </div>
</body>
</html>

6.png

这里看到明明是b设置的margin-top,对自己没效果反而对a产生效果了。这是因为当父级元素没有设置border-top或者padding-top的时候,他的第一个子节点(这里包括元素节点文本节点)如果设置了margin-top,那么这个margin-top会一层层往上越级直到遇到(1)一个设置了border-top或者padding-top的父元素或者(2)直到遇到body或者(3)此父级元素的第一个子节点不为他或他的父元素的时候才停下。(这里表述不清,请自己写code体会,注意每个div里面文本的位置)

** 解决方法: **
给父元素设置一个border-top或者padding-top把子元素管住就可以防止越级了。比如给#a加上border-top: 1px solid transparent;或者padding-top:1px;

cd.gif

外边距合并并不是浏览器的bug,因为所有的现代浏览器都有这个行为,而且在标准里面也写了。
参考:CSS 外边距合并**

作者:Yuki Cland
链接:https://www.zhihu.com/question/24279692/answer/27272393
来源:知乎

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 问答题47 /72 常见浏览器兼容性问题与解决方案? 参考答案 (1)浏览器兼容问题一:不同浏览器的标签默认的外补...
    _Yfling阅读 13,862评论 1 92
  • 1.在什么场景下会出现外边距合并?如何合并?如何不让相邻元素外边距合并?给个父子外边距合并的范例 概念:在CSS当...
    饥人谷_任磊阅读 730评论 0 3
  • 本课来自http://www.imooc.com/learn/9请不要用作商业用途。 HTML5 HTML介绍 H...
    PYLON阅读 3,350评论 0 5
  • 当margin的值为百分比形式时,为什么浏览器会根据父容器宽度得出计算值? 假如有一个父容器宽度400px,高度6...
    飘雪飞舞阅读 902评论 0 0
  • 刚开始录这首歌的时候怎么都唱不好,因为最初听的是横颜君的翻唱改变编版,但我的音高和音域更接近原创的女声h...
    鹿纹徵曦阅读 1,453评论 2 2