关于CSS inline-block、BFC以及外边距合并的几个小问题
CSS inline-block和BCF对于初学者来说,总是弄不太明白,下面记录下我在学习这块知识的过程中遇到的几个问题,供大家参考,有不足的地方,欢迎大家批评指正。
一、在什么场景下会出现外边距合并?如何合并?如何不让相邻元素外边距合并?给个父子外边距合并的范例
定义:当两个垂直外边距相遇时,将形成一个外边距。
合并的场景:
- 一个元素出现在另一个元素上面时;
示例:

- 一个元素包含另一个元素时(没有内边距或边框把它们的外边距分开)

如图效果中,父容器box和子元素box1的上外边距合并,与子元素box2的下外边距合并。
- 一个没有内边距和边框的空元素,它的上下外边距相遇会合并;

当我们给空元素添加边框后,变化很明显:

我们可以很明显的看到:情况一中文字距离box边框的距离是情况二中的一半。
合并后的高度为这两个外边距中高度为这两个外边距中高度值最大者。
解决方案:
1.对于一个元素出现在另一个元素上面:可以使用的方法有:
- 使用display:inline-block;示例如下:

- 使用浮动;示例如下:

2.对于父子以及空元素外边距合并,可以使用通过设置padding和border来解决;
二、去除inline-block内缝隙有哪几种常见方法?
inline-block产生间隙的情况如下:

要想清除inline-block内的缝隙,我们可以采取以下几种方法:
- 去除li元素之间的空格;示例如下:

- 负边距;示例如下:

注意第一个li与外边界之间的距离。
- 使用浮动;示例如下:

- 将li中的font-size设为0px;示例如下:

三、父容器使用overflow: auto| hidden撑开高度的原理是什么?
父容器使用overflow:auto|hidden后,会形成BFC,清除子元素浮动造成的影响,形成自己的“小宇宙”,从而把父容器撑开。
四、BFC是什么?如何形成BFC,有什么作用?
定义:BFC(Block formating context)直译为“块级格式化上下文”。是按照块级盒子布局的。W3C给出的定义如下:
浮动元素和绝对定位元素,非块级盒子的会计容器(例如inline-blocks,table-cells,和table-captions),以及overflow值不为“visiable”的块级盒子,都会为他们的内容创建新的BFC(块级格式上下文)。
如何形成BFC:
1.根元素或其它包含它的元素;
2.浮动(元素的float 不为none);
3.绝对定位(元素的position 为absolute或fixed);
4.行内块inline-blocks(元素的display:inline-block);
5.表格单元格(元素的display:table-cell,HTML表格单元格默认属性);
6.overflow的值不为visible的元素;
7.弹性盒子flex boxes(元素的display:flex或inline-flex)
作用:
1.BFC可以避免外边距折叠;示例:
html:
<pre><div class="box">
<div class="box1"></div>
<div class="new">
<div class="box2"></div>
</div>
</div></pre>
css:
<pre>.box{
border:1px solid;
background:#ccc;
}
.box1{
height:100px;
width:100px;
background:#0000ff;
margin:20px;
}
.box2{
height:100px;
width:100px;
background:red;
margin:20px;
}
.new{
overflow:auto;
}</pre>
实现的效果:

2.BFC包含浮动;
3.使用BFC避免文字环绕;
4.在多列布局中使用BFC。
五、浮动导致的父容器高度塌陷指什么?为什么会产生?有几种解决方法?
浮动导致的父容器高度塌陷指的是子元素浮动后使得父容器没有高度;
产生原因:浮动的框会左右移动,直至它的边缘遇到包含框或者另一个浮动框的边缘。浮动框或脱离文档流,当一个元素浮动之后,文档流就表现得和浮动框不存在一样,当浮动框高度超过包含框的时候,就会出现包含框不会自动伸高来闭合浮动元素,从而出现“父容器高度塌陷”。
解决方法:
1.使用clear:left|right|both;
2.父元素也设置浮动;
3.给父元素设置overflow:hidden|auto
4.使用伪元素 :after.
参考文献:
1.How To Clear Floats Without Structural Markup
2.那些年我们一起清除过的浮动
3.【CSS】浮动和它的工作原理?清除浮动的技巧?
4.CSS中的BFC
版权所有,若有转载,请注明来源。
关于CSS inline-block、BFC以及外边距合并的几个小问题的更多相关文章
- CSS min-height不能解决垂直外边距合并问题
垂直外边距合并有一种情况是嵌套元素的垂直外边距合并,当父级元素没有设定外边距时,在顶部或者底部边缘的子元素的垂直外边距就会和父级的合并,导致父级也有了“隐形”的垂直外边距. 当父级元素的min-hei ...
- BFC 以及 外边距合并问题
BFC定义: BFC(Block formatting context)直译为"块级格式化上下文". 它是一个独立的渲染区域,只有Block-level box参与, 它规定了内部 ...
- css盒子模型、垂直外边距合并
css盒子模型由四部分组成:内容(content).填充(padding).边框(border).边距(margin),其中css样式中定义的width属性是定义内容区域的宽度,正常情况下,设置了内容 ...
- 深入理解BFC和外边距合并(Margin Collapse)
一.什么是BFC? 1.BFC的概念 BFC全称Block Formatting Context ,直译“块级格式化上下文”,也有译作“块级格式化范围”.它是 W3C CSS 2.1 规范中的一个概念 ...
- css外边距合并和z-index的问题
参考这篇文章, 将外边距的 折叠 参考这篇文章, 将bfc的生成, bfc的应用 参考这篇文章 position: absolute的元素, 仍然具有内填充padding和border边框属性样式, ...
- 李洪强和你一起学习前端之(6)css行高,盒模型,外边距
李洪强和你一起学习前端之(6)css行高,盒模型,外边距 复习昨天的知识 1.1css书写位置: 内嵌式写法 外联式写法 <link href = "1.css" rel = ...
- CSS外边距合并&块格式上下文
前言问题Margin Collapsing 外边距合并Block Formatting Context 块格式化上下文解决方案参考 前言 之前在前端开发的过程中,都没有遇到外边距合并的问题(其实是因为 ...
- 由外边距合并到BFC
置顶文章:<纯CSS打造银色MacBook Air(完整版)> 上一篇:<JavaScript实现Ajax小结> 作者主页:myvin 博主QQ:851399101(点击QQ和 ...
- 文本溢出、垂直外边距合并、BFC、hasLayout
今天学习文本溢出,又遇到了一些小问题,先上图: 关于文本溢出推荐:http://www.cnblogs.com/yzg1/p/5089534.html 从里面学习到单行文本和多行文本溢出, overf ...
随机推荐
- C语言 · 奇偶判断
问题描述 能被2整除的数称为偶数,不能被2整除的数称为奇数.给一个整数x,判断x是奇数还是偶数. 输入格式 输入包括一个整数x,0<=x<=100000000. 输出格式 如果x是奇数,则 ...
- 隐马尔科夫模型python实现简单拼音输入法
在网上看到一篇关于隐马尔科夫模型的介绍,觉得简直不能再神奇,又在网上找到大神的一篇关于如何用隐马尔可夫模型实现中文拼音输入的博客,无奈大神没给可以运行的代码,只能纯手动网上找到了结巴分词的词库,根据此 ...
- JdbcTemplate+PageImpl实现多表分页查询
一.基础实体 @MappedSuperclass public abstract class AbsIdEntity implements Serializable { private static ...
- ASP.NET MVC5+EF6+EasyUI 后台管理系统(73)-微信公众平台开发-消息管理
系列目录 前言 回顾上一节,我们熟悉的了解了消息的请求和响应,这一节我们来建立数据库的表,表的设计蛮复杂 你也可以按自己所分析的情形结构来建表 必须非常熟悉表的结果才能运用这张表,这表表的情形涵盖比较 ...
- java 利用ManagementFactory获取jvm,os的一些信息--转
原文地址:http://blog.csdn.net/dream_broken/article/details/49759043 想了解下某个Java项目的运行时jvm的情况,可以使用一些监控工具,比如 ...
- CSS知识总结(九)
CSS常用样式 10.自定义动画 1)关键帧(keyframes) 被称为关键帧,其类似于Flash中的关键帧. 在CSS3中其主要以“@keyframes”开头,后面紧跟着是动画名称加上一对花括号“ ...
- Asp.Net Core + Dapper + Repository 模式 + TDD 学习笔记
0x00 前言 之前一直使用的是 EF ,做了一个简单的小项目后发现 EF 的表现并不是很好,就比如联表查询,因为现在的 EF Core 也没有啥好用的分析工具,所以也不知道该怎么写 Linq 生成出 ...
- IT持续集成之质量管理
研发工具生态 质量相关工作 一次编译产出测试包与上线包 !从源头保证版本的⼀一致性!代码质量控制! 全⽅方位的⾃自动化测试体系保证! 提测冒烟效率! 全⾃自动上线流程杜绝⼈人⼯工犯错! 生产环境应⽤用 ...
- ES6(块级作用域)
我们都知道在javascript里是没有块级作用域的,而ES6添加了块级作用域,块级作用域能带来什么好处呢?为什么会添加这个功能呢?那就得了解ES5没有块级作用域时出现了哪些问题. ES5在没有块级作 ...
- Supermap iCloudManager -负载均衡
Supermap icm负载均衡理解: 应用场景:地图出图 子节点1和子节点2中的服务保持一致,一般情况下设置的是匿名用户通过nginx访问服务信息,所以不需要登录. 1.通过nginx分发请求,(轮 ...