侧边栏壁纸
博主头像
MicroMatrix博主等级

曲则全,枉则直,洼则盈,敝则新,少则得,多则惑。是以圣人抱一为天下式。不自见,故明;不自是,故彰;不自伐,故有功;不自矜,故长。夫唯不争,故天下莫能与之争。古之所谓“曲则全”者,岂虚言哉!诚全而归之。

  • 累计撰写 80 篇文章
  • 累计创建 21 个标签
  • 累计收到 0 条评论

目 录CONTENT

文章目录

CSS3小问题-子元素设置margin-top为什么影响了父元素

蜗牛
2022-12-13 / 0 评论 / 0 点赞 / 6 阅读 / 2650 字 / 正在检测是否收录...

前言

今天遇到一个问题,我写了下面一个样式,发现子的margin-top没有作用,但是父亲的却出现了子的margin-top值。

<div class="father">
    <div class="children"></div>
</div>

<style>
.father{
    height:100%;
    width:100%;
    padding:0;
    margin:0;
}

.children{
    margin-top:20px;
}
</style>

原因

在css2.1盒模型仲规定的内容:

相邻两个元素或者是嵌套元素时都会形成这个问题;当两个垂直外边距 相遇时,会形成一个外边距 ,称为‘外边距合并';以外边距最大者为设置基准。所有毗邻的两个或更多盒元素的margin将会合并为一个margin共享之。毗邻(/同级或嵌套)的定义为:同级或者嵌套的盒元素,并且它们之间没有非空内容、Padding或Border分隔。

所以我的父元素和子元素之间没有分割,然后就导致了子元素的margin-top出现在父亲元素上。

解决

  1. 父级或子元素使用浮动或者绝对定位absolute浮动或绝对定位不参与margin的折叠
  2. 父级overflow:hidden;
  3. 父级设置padding(破坏非空白的折叠条件)
  4. 父级设置border
0

评论区