为什么父元素的背景颜色会被父元素的子元素背景盖住?

<!DOCTYPE html>
<html lang="zh">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <meta http-equiv="X-UA-Compatible" content="ie=edge">
    <title></title>
    <style>
        *{
            margin: 0;
            padding: 0;
        }
        body{
            border-top: 1px solid yellow;
        }
        div{
            width: 50px;
            height: 30px;
            background-color: aqua;
            border-top: 1px solid red;
            
        }
        p{
            margin-top: 0px;
            color: #FFFF00;
            width: 50px;
            background-color: red;
            height: 20px;    
        }
        h1{
            height: 20px;
            color: aquamarine;
            font-size: 16px;
            background-color: green;    
        }
    </style>
</head>
<body>
    <div>
        <p></p>
        <h1></h1>
    </div>
    <div style="background-color: blue;"></div>
</body>
</html>

然后默认的 第一个div 会被子元素的p和h1 颜色覆盖 这是正常的,为什么随着p的margin-top越来越大, p和h1的背景会被第二个div的蓝色覆盖呢?难道第一个div 和第二个div 不是在同一标准流中?

阅读 6.1k
1 个回答
  • 两个div都在标准流中,因为div的position的默认值是static
  • div1和div2是两个不同的格式上下文,他们共同处于body这个格式上下文中

    • 后出现的元素,层级更高,所以div2的层级比div1的层级高
    • 所以div2会遮挡住div1(你可以设置div2 margin-top为负试试效果)
  • div的overflow的默认值是visible,所以p的margin加大时会越过div1的边界显示

    • 当超过边界后,外层还是属于div1的格式上下文
    • 自然会被div2挡住
    • 你可以在前面再添加一个div0,把margin-top设置成负数,就会挡住上面一个div了

<div style="background-color: blue;"></div>
<div>
    <p></p>
    <h1></h1>
</div>
<div style="background-color: blue;"></div>
撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题