当前位置: 首页 > ops >正文

css margin外边距重叠/塌陷问题

一、定义

相邻块级元素或父子元素的垂直外边距会合并(折叠)为单个边距,其大小为单个边距的最大值(或如果他们相等,则仅为其中的一个),这种行为称为边距折叠

<div style="margin-bottom: 20px;">A</div>
<div style="margin-top: 30px;">B</div>
// A和B的实际间距为30px

二、哪些元素会发生外边距重叠问题

  • 外边距重叠问题只会发生在普通流文档元素的上下外边距之间,且只有块级元素会发生外边距重叠
  • 行内元素的垂直margin不生效、不参与布局,不会发生外边距重叠问题
  • 行内块元素的垂直margin有效、参与布局,但也不会发生外边距重叠问题

三、问题常见场景及解决方法

外边距合并的规则中有以下的例外情况

  • 边框:如果元素之间有边框,即使边框是透明的,外边距不会合并
  • 内边距:如果元素之间有内边距,外边距也不会合并
  • BFC(块级格式化上下文):如果元素创建了一个新的BFC,外边距也不会合并
  1. 相邻的兄弟元素的margin-topmargin-bottom的值发生重叠,且都为正值,会按照最大的边距值设置

    解决方法:
    (1)给后一个元素加上float
    (2)给其中一个兄弟套上一个div,并设置border: 1px solid transparent;

  2. 父级和第一个 / 最后一个子元素的margin合并,且都为正值,会按照最大的边距值设置

    解决方法:
    (1)给父元素添加overflow: hidden(创建BFC)
    这个方法只适用于子元素的高度 + 外边距高度 < 父元素高度,否则子元素部分内容会被隐藏
    (2)给父元素加边框(可以加个透明的)
    (3)给父元素或者子元素设置display: inline-block
    (4)给父元素或子元素设置float
    (5)给父元素或子元素设置position: absolute
    (6)给父元素添加padding

  3. 空的块级元素自身的margin-top和margin-bottom发生重叠

    解决方法:
    给自身设置border、padding或高度

  4. 高度为auto的父元素的margin-bottom和子元素的margin-bottom发生重叠

    解决方法:
    (1)父元素设置border-bottom、padding-bottom来分隔他们
    (2)父元素设置高度,max-height和min-height也可以解决

四、外边距重叠数值计算

  • 全部为正值,取最大值
    例如 10px5px,取10px
  • 一正一负,两者相加,取得到的结果
    例如 10px-5px,取10px + (-5px) = 5px
  • 全部为负值,取绝对值最大的
    例如 -10px-5px,取-10px
http://www.xdnf.cn/news/19954.html

相关文章:

  • AI时代企业获取精准流量与实现增长的GEO新引擎
  • Android14实现Settings左右分屏显示的 代码修改
  • 智能相机还是视觉系统?一文讲透工业视觉两大选择的取舍之道
  • MCP驱动企业微信智能中枢:企业级机器人服务构建全攻略
  • 嘎嘎厉害!耐达讯自动化RS485转Profinet网关就是食品温控的“天选之子”
  • vscode连接SSH
  • 25高教社杯数模国赛【C题超高质量思路+可运行代码】第十弹
  • PostgreSQL15——DML 语句
  • jodconverter将word转pdf底层libreoffice的问题
  • 企业微信AI怎么用才高效?3大功能+5个实操场景,实测效率提升50%
  • Linux服务器暴走,用Netdata+cpolar轻松驯化
  • 数据库查询优化
  • 高级RAG策略学习(六)——Contextual Chunk Headers(CCH)技术
  • MySQL InnoDB 的 MVCC 机制
  • 在选择iOS代签服务前,你必须了解的三大安全风险
  • Opencv C++ 教程-人脸识别
  • AI驱动健康升级:新零售企业从“卖产品”到“卖健康”的转型路径
  • 人形机器人控制系统核心芯片从SoC到ASIC的进化路径
  • 机器学习与Backtrader的融合构建自适应交易策略
  • 动态规划入门:从记忆化搜索到动态规划
  • 从0开始学习Java+AI知识点总结-30.前端web开发(JS+Vue+Ajax)
  • JavaSe之多线程
  • 残差网络的介绍
  • 【代码随想录算法训练营——Day2】数组——209.长度最小的子数组、59.螺旋矩阵II、区间和、开发商购买土地
  • “人工智能+”的新范式:应用赋能与风险应对
  • 不会战略、不会融资、不会搭团队?别叫自己 CTO
  • /Users/yourname/Library/Developer/Xcode 文件夹里面各子文件夹作用
  • 【LeetCode热题100道笔记】缺失的第一个正数
  • 【CouponHub项目开发】使用RocketMQ5.x实现延时修改优惠券状态,并通过使用模板方法模式重构消息队列发送功能
  • 3分钟快速了解ToDesk远程控制企业版的技术奥秘!