css知识点之子元素margin-top为何会影响父元素?

2017-07-19  本文已影响72人  落魂灬

首先先贴一段代码

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Document</title>
    <style>
        * {
            margin: 0px;
            padding: 0px;
        }
        .box {
            width: 300px;
            height: 300px;
            background-color: #d6d6d6;
        }
        .box1 {
            width: 100px;
            height: 100px;
            border: 3px solid red;
            background-color: green;
            margin-top: 20px;
        }
    </style>
</head>
<body>
    <div class="box">
        <div class="box1"></div>
    </div>
</body>
</html>

然后看下代码实现的效果,

可以看到,我们给子元素的margin-top并没有起到作用,并且作用在了父元素的身上,这是什么原因呢?下面我们来分析一下:

这是CSS 外边距合并的原因,外边距合并指的是,当两个垂直外边距相遇时,它们将形成一个外边距。合并后的外边距的高度等于两个发生合并的外边距的高度中的较大者。

注释: 只有普通文档流中块框的垂直外边距才会发生外边距合并。行内框、浮动框或绝对定位之间的外边距不会合并。

那么怎么解决这个问题呢,笔者测试了几个方法,有如下5种解决方式:

  1. 修改父元素的高度,增加padding-top样式模拟(padding-top:1px;常用);
  2. 为父元素添加overflow:hidden;样式即可;
  3. 为父元素或者子元素声明浮动(float:left;);
  4. 为父元素添加border(border:1px solid transparent;)
  5. 为父元素或者子元素声明绝对定位;
上一篇下一篇

猜你喜欢

热点阅读