解决:子div设置margin-top使得父div也跟着向下移动

   之前在写网页的时候,发现一个小问题,就是子div设置margin-top的时候,父的div也会跟着向下移动。我用代码和图描述一下问题:

 

<style>
 *{margin:0;padding:0;}
 .div1{background:green;height:100px;}
 .div2{background:darkblue;height:100px;}
 .subDiv{background:red;height:40px;}
</style>
<body>
<div class="div1"></div>
<div class="div2">
  <div class="subDiv"></div>
</div>
</body>

效果是:



红色div是蓝色div的子div。然后我设置红色div的margin-top为20px;

结果如下:



可以看到,设置margin-top之后,父div跟着子div向下移动了。(白色层为空白处,非div层)


解决这个问题的方法是,为父div设置border。为此,我为父div设置border-top:1px solid darkblue;

结果显示:



可以看到,子div向下移动了,但是父div并没有向下移动。


网上找到的原理:

一个盒子如果没有上补白(padding-top)和上边框(border-top),那么这个盒子的上边距会和其内部文档流中的第一个子元素的上边距重叠

    虽然可以通过给父div添加border可以解决问题,但是总觉得不太好。每次为了实现这样的效果而设置border-top,好像有点累赘。后来在网上看了一些博文,觉得很不错。大概的意思是:margin是用于隔开两个独立元素,而padding用域隔开元素及其元素内部内容。其实子div相当于父div的内容,为了使元素和内容隔开,可以使用padding。

    于是,我在父div里面设置了padding-top,也达到了目的。

    本文仅作为笔记记录。


W3C的CSS教程:

http://www.w3school.com.cn/css/css_margin_collapsing.asp

网上相关博文:

http://www.hicss.net/do-not-tell-me-you-understand-margin/



  • 5
    点赞
  • 12
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值