margin重叠是指两个同级元素之间。margin穿透指的是,子元素margin超出父元素而未被父元素包含的现象。

出现margin重叠的原因: 同一个BFC里面两个块级元素会出现margin折叠。

解决方式:让两个块级元素不在一个BFC内。

默认情况,子元素设置margin-top或者margin-bottom会影响其父元素,这就是所谓的margin穿透。解决方式:1.给父元素加个border; 2.将父元素变成BFC。

BFC: Block Formatting Context 简称 块级格式化上下文

BFC的特点: BFC是一个绝对的独立空间,它的内部元素是不会影响到外部元素的!!!

BFC布局规则:

  1. 内部的Box会在垂直方向,按照从上到下的方式逐个排列。
  2. Box垂直方向的距离由margin决定。属于同一个BFC的两个相邻Box的margin会发生重叠
  3. 每个元素的margin box的左边,与包含块border box的左边相接触(对于从左往右的格式化,否则相反)。即使存在浮动也是如此
  4. BFC的区域不会与float box重叠
  5. BFC就是页面上的一个隔离的独立容器,容器里面的子元素不会影响到外面的元素。反之也如此
  6. 计算BFC的高度时,浮动元素的高度也参与计算

元素首先需要是一个block元素,才能变成BFC;

触发BFC的条件:

  • 根元素,body
  • float的值不为none
  • overflow不为visible;可以是hidden或auto或scroll
  • display的值设置为inline-block,flex或者inline-flex,table-cell,table-caption或者inline-table
  • position的值设置为absolute、fixed

因此通过将其中一个元素display属性设置为inline-block,width设置为100%是比较好的解决方式;既解决了margin穿透问题,又达到与display为block一样的效果。

延伸:

与BFC对应的另外一个概念IFC(inline formatting context) 行内格式化上下文

最新文章

  1. 接口--interface
  2. uexGaodeMap插件Android接入指引
  3. ASP.Net MVC跳转,分为form的submit提交跳转和ajax跳转
  4. 解析大型.NET ERP系统 20条数据库设计规范
  5. wifi-mac
  6. 使用ajax和history.pushState无刷新改变页面URL
  7. javascript 之拼接html字符串
  8. 怎么在SQL Server 2008中还原.mdf数据文件
  9. JAVA面试题——JAVA编程题1(2015.07.22——湛耀)
  10. WCF学习笔记一(概述)
  11. POJ 2799 IP Networks
  12. [转]iOS Tutorial – Dumping the Application Heap from Memory
  13. Quartz总结(四):动态修改定时器二
  14. 用require.js封装原生js轮播图
  15. twig模板基本学习
  16. chm制作及Haroopad使用(makedown工具)
  17. MapReduce_架构
  18. Ubuntu14.04配置gcc4.4.4+Qt4.8.4交叉编译环境
  19. 使用SQLMAP对网站和数据库进行SQL注入攻击
  20. jQuery内容横向拖拽滚动

热门文章

  1. 更改微信小程序的组件默认样式
  2. PHP Laravel-包含你自己的帮助函数
  3. mysql中int、bigint、smallint、tinyint 长度
  4. 领扣(LeetCode)字母大小写全排列 个人题解
  5. Jmeter使用代理录制web
  6. ReactJS中的自定义组件
  7. Oracle 环境配置
  8. Android 获取 SHA1值3步完成
  9. 【2018寒假集训 Day2】【动态规划】抢金块
  10. Flow入门初识