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

margin-top 外边距合并

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

<style type="text/css">
#div1{
	background:#000;
	width:100px;
	height:100px;
	margin-top:10px;
}
#div2{
	margin-top:20px;
	background:#f00;
	width:50px;
	height:50px;
}
</style>
<div id="div1">
	<div id="div2"></div>
</div>
复制代码

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

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

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

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

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

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

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

边距重合 来源:W3C CSS2.1

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

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

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

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

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

外边距合并的触发条件:

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

外边距合并的解决方式:

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

另推荐个表格组件gridManager

相关文章:

  • Visual Paradigm 教程[UML]:如何在序列图中应用消息编号?
  • 【漫画】为什么说O(n)复杂度的基数排序没有快速排序快?
  • 博客园的第一篇随笔
  • vue之修饰符
  • 赶紧收藏!41个Web UI工具包资源免费及付费下载
  • 共勉:作为一名程序员你应该怎么提一个高质量的问题?
  • 反转单链表和双链表
  • OSPF 笔记之Master / Slave
  • Codeforces Round #564 (Div. 2) A. Nauuo and Votes
  • iOS 开发调试工具
  • linux5.7 启动命令总结
  • T-MBA学习营 | 寒窗十数载,我们原来并不会学习?
  • 自定义博客总结
  • J_Knight_ iOS 高级面试题 实战题解答以及一些扩展性链接
  • 【源码浅析】 ElementUI 的 Select 组件
  • [译]Python中的类属性与实例属性的区别
  • 「译」Node.js Streams 基础
  • Angular 响应式表单之下拉框
  • angular学习第一篇-----环境搭建
  • CNN 在图像分割中的简史:从 R-CNN 到 Mask R-CNN
  • css的样式优先级
  • hadoop入门学习教程--DKHadoop完整安装步骤
  • isset在php5.6-和php7.0+的一些差异
  • java多线程
  • Java小白进阶笔记(3)-初级面向对象
  • js学习笔记
  • Koa2 之文件上传下载
  • Logstash 参考指南(目录)
  • MaxCompute访问TableStore(OTS) 数据
  • mysql常用命令汇总
  • react 代码优化(一) ——事件处理
  • SAP云平台里Global Account和Sub Account的关系
  • Spring核心 Bean的高级装配
  • vue中实现单选
  • Zsh 开发指南(第十四篇 文件读写)
  • 分享自己折腾多时的一套 vue 组件 --we-vue
  • 基于MaxCompute打造轻盈的人人车移动端数据平台
  • 基于Vue2全家桶的移动端AppDEMO实现
  • 技术胖1-4季视频复习— (看视频笔记)
  • 听说你叫Java(二)–Servlet请求
  • 我的面试准备过程--容器(更新中)
  • 正则学习笔记
  • 正则与JS中的正则
  • 国内开源镜像站点
  • # Swust 12th acm 邀请赛# [ E ] 01 String [题解]
  • #if和#ifdef区别
  • #NOIP 2014# day.2 T2 寻找道路
  • #我与Java虚拟机的故事#连载08:书读百遍其义自见
  • #我与Java虚拟机的故事#连载15:完整阅读的第一本技术书籍
  • (04)odoo视图操作
  • (42)STM32——LCD显示屏实验笔记
  • (Redis使用系列) Springboot 使用redis的List数据结构实现简单的排队功能场景 九
  • (二)七种元启发算法(DBO、LO、SWO、COA、LSO、KOA、GRO)求解无人机路径规划MATLAB
  • (附源码)spring boot儿童教育管理系统 毕业设计 281442
  • (附源码)springboot电竞专题网站 毕业设计 641314