「CSS」Margin Collapsing

php中文网
发布: 2016-06-24 11:37:17
原创
1585人浏览过

外边距合并在排版上带来非常大的便利,但是人们对其不甚了解,导致使用外边距的时候总是出现繁多问题,今日写下一片文章,总结一下外边距合并。

三种基本的外边距合并

只有上外边距和下外边距才会触发外边距合并,左外边距和右外边距不会。外边距合并都是基于以下三种基本的外边距合并。

1. 相邻的同胞元素

我们考虑两个连续的 div,他们的上下左右的边距都是 50px。此时,第一个区域的下外边距第二个区域的上外边距 合并,故他们的间隔是 50px。

<style>    .margin-box {        width: 50px;        height: 50px;        margin: 50px;        background: #fae900;    }</style><div class="margin-box"></div><div class="margin-box"></div>
登录后复制

2. 父元素与子元素

  • 第一个子元素的上外边距和父元素的上外边距会进行合并

    立即学习前端免费学习笔记(深入)”;

  • 最后一个子元素的下外边距和父元素的下外边距会进行合并

合并的视觉效果就是这些合并的外边距 表现为父元素的外边距

我们使用一个有颜色区域包含另外一个不同颜色的区域。里面的区域所有的外边距设为50px。

<div style="background: #cccdd1;">    <div class="margin-box"></div></div>
登录后复制

我们可以看到, margin-box 的左边和右边都展示为 #cccdd1, 而由于上边和下边的外边距和父元素的合并了,并表示为父元素的外边距,故颜色为父元素的父元素的背景色(若又发生合并,递推即可)。

细心的读者会发现,我并没有设置父元素的 margin,何来合并一说?这是因为当 margin 为 0 的时候也会发生合并。

3. 空元素

它自己的上外边距和下外边距合并了。°(°?Д?°) °

阻止外边距合并

第二种情况不合并

  • 设置 overflow: hidden;(不为 visible 都可)。

  • 由于 margin 需要直接接触才能够合并,根据盒子模型,我们可以设置父元素的 边框内边距,或者使用某些元素将第一个元素和父元素隔开(那就不是第一个元素了)。

  • 三种情况都不合并

  • 只有在静态流的元素才会发生外边距合并,故设置 float, position: absolute; 都可以使得外边距在何种情况都不合并。

  • inline-block 是个例外,它既没有脱离文档流,但是它的所有的外边距都不会合并。

  • DEMO

    听说技术文章和 DEMO 更配噢~
    git clone https://github.com/JasonKid/fezone.git 搜索 Margin Collapsing

    记得点赞... (??□′)?? ┴─┴

    最佳 Windows 性能的顶级免费优化软件
    最佳 Windows 性能的顶级免费优化软件

    每个人都需要一台速度更快、更稳定的 PC。随着时间的推移,垃圾文件、旧注册表数据和不必要的后台进程会占用资源并降低性能。幸运的是,许多工具可以让 Windows 保持平稳运行。

    下载
    来源:php中文网
    本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
    最新问题
    开源免费商场系统广告
    热门教程
    更多>
    最新下载
    更多>
    网站特效
    网站源码
    网站素材
    前端模板
    关于我们 免责申明 意见反馈 讲师合作 广告合作 最新更新
    php中文网:公益在线php培训,帮助PHP学习者快速成长!
    关注服务号 技术交流群
    PHP中文网订阅号
    每天精选资源文章推送
    PHP中文网APP
    随时随地碎片化学习
    PHP中文网抖音号
    发现有趣的

    Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号