美文网首页
Css—盒模型外边距折叠带来的影响

Css—盒模型外边距折叠带来的影响

作者: 弱冠而不立 | 来源:发表于2020-08-12 15:32 被阅读0次

MDN上外边距折叠的定义

块的上外边距margin-top和下外边距margin-bottom有时合并(折叠)为单个边距,其大小为单个边距的最大值(或如果它们相等,则仅为其中一个),这种行为称为边距折叠
注:有设定floatposition=absolute的元素不会产生外边距重叠行为。

怎样的布局才会造成外边距折叠?以及如何解决子元素因外边距给父元素带来的影响

1. 同一层级的相邻元素之间,即使是中间有空的块级元素
<style>
    * {
        margin: 0;
        padding: 0;
    }
    .container {
        background: darkcyan;
    }
    .container p:first-child {
        margin-bottom: 20px;
        height: 20px;
    }
    .container p:last-child {
        margin-top: 40px;
        height: 20px;
    }
</style>
<body>
    <div class="container">
        <p>margin-bottom 20px</p>
        <p>margin-top 40px</p>
    </div>
</body>
两个p标签高度都是20px,一个外边距20px 一个外边距40px 按常规思想来说,父元素高度应该为100px,但是父元素高度只有 80px,原因就是向上的40px外边距 合并了向下的20px外边距
2. 没有内容将父元素和子元素分开

父元素和子元素之间,没有边框border 内边距padding 这样的内容,也没有块级上下文,行内元素等。总之就是父级元素直接和子元素紧挨,就会出现父块元素和其内后代块元素外边界重叠,重叠部分最终会溢出到父级块元素外面。

p标签外上边距40px,然后父元素虽然没有向上外边距,但是也还是被子元素带着向偏移了40px
根据溢出的原因,我们主要可以用以下几种方式,消除子元素margin对父级元素偏移的影响。
  1. 给父级元素加上 1px 的边框border 或者 padding
  2. 在子元素和父元素直接加个空的div。
  3. 父元素加上一个overflow:hidden的属性。
  4. 父元素或者子元素使用浮动或者绝对定位。

但是以上的方法均会带来其他不同程度的负面影响,那我们有没有更好的解决办法?
我从设置伪类元素清除浮动中受到了一点启发,即用 before 或者 after 伪类元素,设置高度为零 display 为块级然后随便给一个content值,最后再加上 overflow:hidden。具体实现如下:

.clear-margin::before {
        content: ".";
        overflow: hidden;
        display: block;
        height: 0px;
    }

    .clear-margin::after {
        content: ".";
        overflow: hidden;
        display: block;
        height: 0px;
    }

是不是感觉和清除浮动的clearfix样式很像。

相关文章

  • Css—盒模型外边距折叠带来的影响

    MDN上外边距折叠的定义 块的上外边距margin-top和下外边距margin-bottom有时合并(折叠)为单...

  • 盒子模型

    标准盒模型 IE盒模型 盒模型的转化 css 外边距合并 上下方向相邻的元素框垂直相遇时,外边距会合并,合并后的外...

  • CSS外边距合并(塌陷/margin越界)

    原文 博客原文 大纲 1、什么是外边距合并?(折叠外边距)2、外边距带来的影响3、折叠的结果4、产生折叠的原因5、...

  • css 面试题

    1. 盒模型 css盒模型CSS 框模型实质上是一个包围每个 HTML 元素的框。它包括:外边距、边框、内边距以及...

  • CSS代码缩写

    CSS代码缩写-占用更少的带宽 盒模型代码缩写 盒模型中外边距(margin)、内边距(padding)和边框(b...

  • 盒模型

    盒模型 CSS 盒模型 (Box Model) 规定了元素框处理元素内容、内边距、边框 和 外边距 的方式 1.标...

  • 任务九-CSS盒模型

    1.盒模型包括哪些属性? 答:css和模型主要包括外边距(margin),内边距(padding),边框(bord...

  • css盒模型与box-sizing关系

    一、css盒子模型 CSS盒模型本质上是一个盒子,盒子里包含:Margin(外边距)、Padding(内边距)、B...

  • 盒模型

    1.什么是盒模型 盒模型是css3新增的一个css属性 包含四个值:外边距 边框的宽度 内边距 和内容宽 ...

  • css第三节第十天

    1、css盒模型 盒子:边框+内边距+内容区域+外边距组成。 IE6的盒模型的bug:背景色不能穿透 边框。而且如...

网友评论

      本文标题:Css—盒模型外边距折叠带来的影响

      本文链接:https://www.haomeiwen.com/subject/nokpdktx.html