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以及外边距合并的几个小问题的更多相关文章

  1. CSS min-height不能解决垂直外边距合并问题

    垂直外边距合并有一种情况是嵌套元素的垂直外边距合并,当父级元素没有设定外边距时,在顶部或者底部边缘的子元素的垂直外边距就会和父级的合并,导致父级也有了“隐形”的垂直外边距. 当父级元素的min-hei ...

  2. BFC 以及 外边距合并问题

    BFC定义: BFC(Block formatting context)直译为"块级格式化上下文". 它是一个独立的渲染区域,只有Block-level box参与, 它规定了内部 ...

  3. css盒子模型、垂直外边距合并

    css盒子模型由四部分组成:内容(content).填充(padding).边框(border).边距(margin),其中css样式中定义的width属性是定义内容区域的宽度,正常情况下,设置了内容 ...

  4. 深入理解BFC和外边距合并(Margin Collapse)

    一.什么是BFC? 1.BFC的概念 BFC全称Block Formatting Context ,直译“块级格式化上下文”,也有译作“块级格式化范围”.它是 W3C CSS 2.1 规范中的一个概念 ...

  5. css外边距合并和z-index的问题

    参考这篇文章, 将外边距的 折叠 参考这篇文章, 将bfc的生成, bfc的应用 参考这篇文章 position: absolute的元素, 仍然具有内填充padding和border边框属性样式, ...

  6. 李洪强和你一起学习前端之(6)css行高,盒模型,外边距

    李洪强和你一起学习前端之(6)css行高,盒模型,外边距 复习昨天的知识 1.1css书写位置: 内嵌式写法 外联式写法 <link href = "1.css" rel = ...

  7. CSS外边距合并&块格式上下文

    前言问题Margin Collapsing 外边距合并Block Formatting Context 块格式化上下文解决方案参考 前言 之前在前端开发的过程中,都没有遇到外边距合并的问题(其实是因为 ...

  8. 由外边距合并到BFC

    置顶文章:<纯CSS打造银色MacBook Air(完整版)> 上一篇:<JavaScript实现Ajax小结> 作者主页:myvin 博主QQ:851399101(点击QQ和 ...

  9. 文本溢出、垂直外边距合并、BFC、hasLayout

    今天学习文本溢出,又遇到了一些小问题,先上图: 关于文本溢出推荐:http://www.cnblogs.com/yzg1/p/5089534.html 从里面学习到单行文本和多行文本溢出, overf ...

随机推荐

  1. 前端网络、JavaScript优化以及开发小技巧

    一.网络优化 YSlow有23条规则,中文可以参考这里.这几十条规则最主要是在做消除或减少不必要的网络延迟,将需要传输的数据压缩至最少. 1)合并压缩CSS.JavaScript.图片,静态资源CDN ...

  2. 【趣事】用 JavaScript 对抗 DDOS 攻击 (下)

    上一篇:http://www.cnblogs.com/index-html/p/js-network-firewall.html 对抗 v2 之前的那些奇技淫巧,纯属娱乐而已,并不能撑多久. 但简单. ...

  3. 戏说HTML5

    如果有非技术人员问你,HTML5是什么,你会怎么回答? 新的HTML规范... 给浏览器提供了牛逼能力,干以前不能干的事...(确切地说应该是给浏览器规定了许多新的接口标准,要求浏览器实现牛逼的功能. ...

  4. 写出易调试的SQL(修订版)

    h4 { background: #698B22 !important; color: #FFFFFF; font-family: "微软雅黑", "宋体", ...

  5. C# - 值类型、引用类型&走出误区,容易错误的说法

    1. 值类型与引用类型小总结 1)对于引用类型的表达式(如一个变量),它的值是一个引用,而非对象. 2)引用就像URL,是允许你访问真实信息的一小片数据. 3)对于值类型的表达式,它的值是实际的数据. ...

  6. Dapper扩展之~~~Dapper.Contrib

    平台之大势何人能挡? 带着你的Net飞奔吧!http://www.cnblogs.com/dunitian/p/4822808.html#skill 上一篇文章:Dapper逆天入门~强类型,动态类型 ...

  7. ASP.NET MVC5+EF6+EasyUI 后台管理系统(69)-微信公众平台开发-功能概述

    系列目录 为什么要先发这个文章? 因为接下来的文章是关于微信开发的系列,心中一定要有一个概念,知道自己接下来要做什么功能. 而且微信到处都是坑,我首先要把微信与本地跑通起来才敢发布,否则中间出现坑导致 ...

  8. IP报头

      位字段的值设置为二进制的0100表示IP版本4(IPv4).设置为0110表示IP版本6(IPv6)   位,它表示32位字长的IP报头长度,设计报头长度的原因是数据包可选字段大小会发生变化.IP ...

  9. 【腾讯Bugly干货分享】一步一步实现Android的MVP框架

    本文来自于腾讯bugly开发者社区,非经作者同意,请勿转载,原文地址:http://dev.qq.com/topic/5799d7844bef22a823b3ad44 内容大纲: Android 开发 ...

  10. The Coroutine

    关于Coroutine 说到coroutine就不的不说subroutine,也就是我们常用到的一般函数.调用一个函数开始执行,然后函数执行完成后就退出,再次调用的时候,再从头开始,调用之间是没有保存 ...