博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
margin-top 外边距合并
阅读量:6115 次
发布时间:2019-06-21

本文共 893 字,大约阅读时间需要 2 分钟。

这是一个早以前研究过的东西,今天java开发说起了这个,顺带记录一下。 这里有一行代码,很简单的一段代码

复制代码

可是在浏览器中打开后,居然是这个样子的~

( 黑色的区块为div1,红色的为div2 )

从效果上看div2的margin-top像是没有生效,经测量div1的margin-top值,发现这个div2的margin-top像是生效到div1上了。

就这几行代码写错是不大可能,那这又是怎么回事?

之前遇到这个问题时,试遍了所有的浏览器,都是这个样子;我就觉着这是个兼容性极佳的BUG。

后来一个偶然的机会发现在父级上增加border或者overflow:hidden是可以规避这个问题,且这个问题只会在常规流向中出现,也就是说用position或者是float都不会存在这个问题。

整点原理规范什么的提高一下;百度一下,你就知道。。

边距重合 来源:

在本规范中,表述边距重合意味着两个或多个框(可能相邻也可能嵌套)的相邻的边距(其间没有边白或边框间隔)重合在一起而形成一个单一的边距。 CSS2中,水平边距永远不会重合。

垂直边距可能在特定的框之间重合:

  • 常规流向中两个或多个块框相邻的垂直边距会重合。结果的边距宽度是相邻边距宽度中较大的值。如果出现负边距,则在最大的正边距中减去绝对值最大的负边距。如果没有正边距,则从零中减去绝对值最大的负边距。
  • 在一个浮动框和其它框之间的垂直边距不重合。
  • 绝对和相对定位的框的边距不重合。

首先了解到这并不是BUG,而是个规范,虽然看上去像是BUG 按着规范试一下,觉着还是像是个BUG。

看规范是一目十行,过目就忘,还是整理一下。

外边距合并的触发条件:

  • 常规流向布局,未使用定位或者是浮动
  • 存在垂直边距
  • 父级元素不存在border,overflow:hidden
  • 在父级元素与子元素之间不存在拥有实际高度的元素(包含文本)

外边距合并的解决方式:

  • 父级元素增加border,overflow
  • 使用定位或者是浮动
  • 使用padding-top替代margin-top,比较推荐这个。

另推荐个表格组件

转载地址:http://tznka.baihongyu.com/

你可能感兴趣的文章
Python/PHP 远程文件/图片 下载
查看>>
【原创】一文彻底搞懂安卓WebView白名单校验
查看>>
写给对前途迷茫的朋友:五句话定会改变你的人生
查看>>
并行程序设计学习心得1——并行计算机存储
查看>>
JAVA入门到精通-第86讲-半双工/全双工
查看>>
bulk
查看>>
js document.activeElement 获得焦点的元素
查看>>
C++ 迭代器运算
查看>>
【支持iOS11】UITableView左滑删除自定义 - 实现多选项并使用自定义图片
查看>>
day6-if,while,for的快速掌握
查看>>
JavaWeb学习笔记(十四)--JSP语法
查看>>
【算法笔记】多线程斐波那契数列
查看>>
java8函数式编程实例
查看>>
jqgrid滚动条宽度/列显示不全问题
查看>>
在mac OS10.10下安装 cocoapods遇到的一些问题
查看>>
angularjs表达式中的HTML内容,如何不转义,直接表现为html元素
查看>>
css技巧
查看>>
Tyvj 1728 普通平衡树
查看>>
[Usaco2015 dec]Max Flow
查看>>
javascript性能优化
查看>>