子类设置margin-top无效

做一个效果

  <div class="head" style="background-color: chartreuse">
        <div class="logo" style="background-color: darkblue">
            <a href="http://www.baidu.com">
                <img src="img/logo_h.png" />
            </a>
        </div>
    </div>
.head {
    height: 69px;
    background: #ffffff;
    overflow: hidden;
    text-align: center;
}

.head .logo {
    width: 133px;
    margin-top: 20px;
}

上面的代码大家估计都看的懂,需要显示的效果图如下

但实际如下

我擦,这是搞啥鬼,子类没有效果,父类向下偏移了,这是啥原因呢?

解释:

这是因为父元素和子元素的margin发生了和并,父元素的margin是0px,子元素的margin是10px,所以合并后的margin是10px,且加在了父元素上,于是出现了图2的效果。在CSS2.1中对盒模型有如下规定:在垂直方向上,所有毗邻的两个或多个盒元素的margin将会合并。毗邻的意思是:同级或嵌套的盒元素,并且它们之间没有非空内容、padding或border。

合并后的margin的大小取两个发生合并的元素中margin较大的那一个。

更详细的讲,分为几种情况:

1.两个元素为同级元素,即当一个元素出现在另一个元素上面时,第一个元素的margin-bottom与第二个元素的margin-top发生合并,合并后的margin值是margin-bottom和margin-top中较大的那一个

2.当两个元素嵌套,即一个元素包含在另一个元素中时(假设没有padding或border把两个元素的margin分隔开),它们的margin-bottom和/或margin-top也会发生合并,合并后的margin值同样也是margin-bottom和margin-top中较大的那一个;该问题就属于这一种情况

3.假设有一个空元素,且不设置它的宽高,它有margin-bottom和margin-top,但是没有padding或border。在这种情况下,margin-bottom和margin-top就碰到了一起,它们也会发生合并,合并后的margin值同样也是margin-bottom和margin-top中较大的那一个。
如果这个外边距遇到另一个元素的外边距,它还会发生合并。

解决方法:


1.在父元素上设置overflow:hidden; (触发父元素的BFC)

2.给父元素设置padding或border(隔开两个元素的margin)

3.父元素或子元素使用浮动或者绝对定位(浮动或绝对定位不参与margin的折叠)

 

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值