inline-block、BFC、边距合并

一、在什么场景下会出现外边距合并?如何合并?如何不让相邻元素外边距合并?给个父子外边距合并的范例?

外边距合并指的是,当两个垂直外边距相遇时,它们将形成一个外边距。只有普通文档流中块框的垂直外边距才会发生外边距合并。行内框、浮动框或绝对定位之间的外边距不会合并。

  • 两个相邻的外边距都是正数时,折叠结果是它们两者之间较大的值。
  • 两个相邻的外边距都是负数时,折叠结果是两者绝对值的较大值。
  • 两个外边距一正一负时,折叠结果是两者的相加的和。

创建了新的BFC的元素(例如浮动元素、 inline-block元素、绝对定位元素或者'overflow'值为'visible'以外的元素)与它的子元素的外边距不会合并。
或者给父元素设置padding或边框也可以解决外边距合并的问题。

  • 外边距合并的例子
<style>
    *{  
        margin:0px;  
        padding: 0px;  
    }  
    .div1{  
        width:800px;  
        height: 200px;  
        background-color: cornflowerblue;  
        margin:0px auto;  
    }  
    .div2{  
        width:80%;  
        height: 10%;  
        background-color: wheat;  
        margin: 30px auto;  
    }  
</style>
</head>
<body>
   <div class="div1">  
     <div class="div2">             
     </div>  
  </div>  

结果为:

Paste_Image.png

父子外边距合并了,取了较大值30px(儿子的外边距),父子元素的margin-top塌陷,此时子元素margin-top:30px,使得父子元素同时移动。(父元素无 border、padding)

二、去除inline-block内缝隙有哪几种常见方法?

inline-block(>IE8使用),IE6、7bug存在写成 display:inline-block;*display:inline。
1.去掉html中无序列表前面的空格。使其紧挨着排列。

     <li>tag1</li><li>tag2</li><li>tag3</li>
   或者: <li>tag1</li
         ><li>tag2</li
         ><li>tag3</li>

2.负margin。

 .box>li{
         display:inline-block;
         padding:3px;
         margin:-4px;
 }

3.float。采用浮动时父容器会撑开要清除浮动(父容器要overflow:auto或hidden一下;)

 .box>li{
         display:inline-block;
         padding:3px;
         float:left;
 }

4.将父容器设置font-size=0;此时子容器font-size需重新设置。

三、父容器使用overflow: auto| hidden撑开高度的原理是什么?

overflow这个属性定义溢出元素内容区的内容会如何处理。如果值为 scroll,不论是否需要,用户代理都会提供一种滚动机制。因此,有可能即使元素框中可以放下所有内容也会出现滚动条。
overflow值为auto| hidden时可以闭合元素修复高度坍塌,清除浮动。
例如子容器设置高度大于父容器时,父容器会自动撑开。此时overflow:hidden会清除子容器浮动,子容器超出高度部分自动隐藏。

#box{ 

      width:500px; 
      background:#000; 
     /* height:500px;*/
      overflow:hidden
}
  #content { 
      float:left; 
      width:600px; 
      height:600px; 
      background:red;
} 

如结果为500*600的盒子,超出100隐藏了。

Paste_Image.png

做法:

  • overflow:hidden;
    只要使用了这个样式的元素都会闭合,触发 hasLayout;
  • overflow:auto;zoom:1;
    在不使用 overflow:hidden 的场景下,需要触发 hasLayout ,可以用 zoom: (normal以外的值) 这个样式;
  • overflow:auto;height:1%;
    在不使用 overflow:hidden 的场景下,需要触发 hasLayout ,可以用 height: (auto以外的值)这个样式,1%是为了在实现非0。

四、BFC是什么?如何形成BFC,有什么作用?

定义及形成:
1.BFC可以理解为一个箱子,箱子里面的东西不受外界影响。并且在一个BFC中,块盒与行盒(行盒由一行中所有的内联元素所组成)都会垂直的沿着其父元素的边框排列。
2.浮动元素和绝对定位元素,非块级盒子的块级容器(例如 inline-blocks, table-cells, 和 table-captions),以及overflow值不为“visiable”的块级盒子,都会为他们的内容创建新的BFC。
作用:
作用:不与任何元素产生 margin 折叠,消除浮动元素对其非浮动的兄弟元素和其子元素带来的影响。

五、浮动导致的父容器高度塌陷指什么?为什么会产生?有几种解决方法?

对于其父元素来说,元素浮动之后,它脱离当前正常的文档流,所以它也无法撑开其父元素,造成父元素的塌陷。
例如:父块没有设置指定的高宽,当子块设置为浮动后,原本包裹子块的父块的高度塌陷。

<div style="background: #F99; width: 400px; border: 1px solid #3CF;"> 
<div style="float: left; background: #36F; width: 180px; height: 180px;">
I'm a son container .</div>
 <div style="float: left; background: #F60; width: 180px; height: 180px;">
I'm the other son container .</div>
  </div> 

Paste_Image.png

父容器的高度为0,能看到的只是父容器的边框,而高度并没有被内部的两个子容器的高度撑开。
解决方法:
1.在父容器里加入height属性,该方法适用于子元素高度已知并且固定的情况。
2.在最后一个子元素后加入<div style="clear:both;"></div>,清除浮动元素。
3.给父容器增加overflow:hidden属性。或者overflow:auto;zoom:1;
overflow:auto;height:1%;
4.浮动外部元素,float-in-float让父容器也浮动。
5.使用after伪元素。对浮动元素增加after伪类。(IE8以上生效,在IE6、7中可在父容器中增加overflow:auto;或者overflow:hidden等)。

#outer:after{  
content:"";  
height:0;  
display:block;  
clear:both;  
}

六、以下代码每一行的作用是什么? 为什么会产生作用? 和BFC撑开空间有什么区别?

Paste_Image.png
.clearfix:after{
   content:"";
   display:block;
   clear:both;
 }

作用是清除浮动。
*zoom:1;作用是为兼容IE6,IE7。
BFC撑开空间也可以清除浮动。但它还可以形成BFC盒子,避免与其他元素产生 margin 折叠。

本文版权归本人及饥人谷所有,转载请注明出处,谢谢!

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 204,053评论 6 478
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 85,527评论 2 381
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 150,779评论 0 337
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,685评论 1 276
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,699评论 5 366
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,609评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,989评论 3 396
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,654评论 0 258
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,890评论 1 298
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,634评论 2 321
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,716评论 1 330
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,394评论 4 319
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,976评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,950评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,191评论 1 260
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 44,849评论 2 349
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,458评论 2 342

推荐阅读更多精彩内容