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

慎用margin系列1---CSS的margin塌陷(collapse) 问题与对策

 

    对于以下简单代码:

 

    如果您认为应该是这样的话:

 

    

    那就错了。结果是这样的:

   

 

    因为CSS中存在一个margin collapse,即边界塌陷或者说边界重叠。对于上下两个并列的div块而言,上面div的margin-bottom和下面div的margin-top会塌陷,也就是会取上下两者margin里最大值作为显示值,所以从这个意义上说:CSS及浏览器的设计者们希望我们在布局时,如果遇到上下两个并排内容块的安排,最好只设置其中每个块上或下margin的一处即可

    但对于父块DIV内含子块DIV的情况,就会按另一条CSS惯例来解释了,那就是:对于有块级子元素的元素计算高度的方式,如果元素没有垂直边框和填充,那其高度就是其子元素顶部和底部边框边缘之间的距离。所以对于代码:

点击(此处)折叠或打开

  1. <div class="father"></div>
    father这个div的高度为0,因为里面没有能够撑开div的内容。如果变为:
 

点击(此处)折叠或打开

  1. <div class="father">I am here.</div>
    则高度就是文字的高度,因为此时文字在撑着这个DIV。
 
在常规文档流中,2个或以上的块级盒模型相邻的垂直margin会被折叠。 最终的margin值计算方法如下: 
a、全部都为正值,取最大者; 
b、不全是正值,则都取绝对值,然后用正值减去最大值; 
c、没有正值,则都取绝对值,然后用0减去最大值。 
注意:相邻的盒模型可能由DOM元素动态产生并没有相邻或继承关系。
 
    话说回来,一个DIV和它的子DIV特别重视垂直边框或填充,也就好像是,一口锅,里面放个盆,能不能扣住里面的盆,主要看锅盖了,垂直边框或填充就是这个“锅盖”。于是解决的方式至少有以下4种:
 
     结论:
    解决父子DIV中顶部margin cllapse的问题,需要给父div设置:
    1、边框,当然可以设置边框为透明;

点击(此处)折叠或打开

  1. border:1px solid transparent
  2. border-top:1px solid transparent
     2、为父DIV添加padding,或者至少添加padding-top;
    3、还可以通过over-flow来解决,给父DIV写入:
   over-flow:hidden;
  4、在父级加position:absolute;
    希望对大家有所帮助。

转载于:https://www.cnblogs.com/propheterLiu/p/5935777.html

相关文章:

  • Workarounds一词的翻译
  • jquery ui中的dialog,官网上经典的例子
  • screen 后台实时执行命令
  • IP数据包首部校验和的计算
  • 烂泥:rsync与inotify集成实现数据实时同步更新
  • 使用junitamp;spring修改系统的环境变量,解决docker程序测试问题
  • Eclipse下使用Subversion =subclipse
  • 上传附件
  • check_nginx pnp4nagios 模版
  • 统计挖掘那些事那些情(2)-回归分析spss
  • redis应用之主从架构配置
  • android MediaCodec 音频编解码的实现——转码
  • 2014.9.30 Double转字符
  • 【转载】【容斥原理】
  • 持续改进不能止步于回顾
  • 3.7、@ResponseBody 和 @RestController
  • ES6系统学习----从Apollo Client看解构赋值
  • Java读取Properties文件的六种方法
  • JSDuck 与 AngularJS 融合技巧
  • LeetCode算法系列_0891_子序列宽度之和
  • PHP 的 SAPI 是个什么东西
  • Python十分钟制作属于你自己的个性logo
  • scala基础语法(二)
  • socket.io+express实现聊天室的思考(三)
  • Solarized Scheme
  • vagrant 添加本地 box 安装 laravel homestead
  • 百度地图API标注+时间轴组件
  • 从零开始的无人驾驶 1
  • 规范化安全开发 KOA 手脚架
  • 基于OpenResty的Lua Web框架lor0.0.2预览版发布
  • 数组大概知多少
  • 一道闭包题引发的思考
  • 用Python写一份独特的元宵节祝福
  • ​一、什么是射频识别?二、射频识别系统组成及工作原理三、射频识别系统分类四、RFID与物联网​
  • (3)llvm ir转换过程
  • (9)目标检测_SSD的原理
  • (delphi11最新学习资料) Object Pascal 学习笔记---第7章第3节(封装和窗体)
  • (html5)在移动端input输入搜索项后 输入法下面为什么不想百度那样出现前往? 而我的出现的是换行...
  • (二)Pytorch快速搭建神经网络模型实现气温预测回归(代码+详细注解)
  • (四)七种元启发算法(DBO、LO、SWO、COA、LSO、KOA、GRO)求解无人机路径规划MATLAB
  • (算法设计与分析)第一章算法概述-习题
  • ./include/caffe/util/cudnn.hpp: In function ‘const char* cudnnGetErrorString(cudnnStatus_t)’: ./incl
  • .dwp和.webpart的区别
  • .NET 5种线程安全集合
  • .net core MVC 通过 Filters 过滤器拦截请求及响应内容
  • .NET Core WebAPI中使用Log4net 日志级别分类并记录到数据库
  • .net 获取url的方法
  • .netcore 6.0/7.0项目迁移至.netcore 8.0 注意事项
  • .net程序集学习心得
  • .Net中的设计模式——Factory Method模式
  • @cacheable 是否缓存成功_Spring Cache缓存注解
  • [@Controller]4 详解@ModelAttribute
  • [Android Pro] Notification的使用
  • [Angular] 笔记 7:模块
  • [C#]DataTable常用操作总结【转】