任务11

  1. 在什么场景下会出现外边距合并?如何合并?如何不让相邻元素外边距合并?给个父子外边距合并的范例
    外边距合并指的是,当两个垂直外边距相遇时,它们将形成一个外边距(块元素的top与bottom外边距会合并为单个外边距),合并后的外边距的高度等于两个发生合并的外边距的高度中的较大者。三种基本场景
  • 毗邻兄弟元素的外边距会合并
<style>
    *{
        margin: 0;
        background: #ccc;
    }
    .p1{
        border: 1px solid red;
        margin: 30px;
    }
    .p2{
        border: 1px solid blue;
        margin: 40px;
    }
    </style>
</head>
<body>
    <p class="p1">下边距被合并</p>
    <p class="p2">上边距被合并</p>
</body>```
![合并部分为40px](http://upload-images.jianshu.io/upload_images/2150964-e0fdd9d1fca5b119.PNG?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)
  - 父元素与第一个子元素或最后一个子元素可能会合并:

<style>
*{
margin: 0;
background: #ccc;
}
.p1{
border: 1px solid red;
margin: 30px;
}
.p2{
border: 1px solid blue;
margin: 40px;
}
.ct{
margin: 20px;
background: green;
}
</style>
</head>
<body>
<div class="ct">
<p class="p1">下边距被合并</p>
<p class="p2">上边距被合并</p>
</div>```


父元素的外边距为20px

第一个子元素的外边距30px

最后一个子元素外边距40px
  • 空块元素的margin-topmargin-bottom可能会合并。
  • 取消合并:
    加入 border、padding、inline content、height、min-height 等或者创建新的BFC(给一个块级元素 设置float:leftoverflow:auto/hiddenposition:absolute样式)空间来分隔来取消合并。
    对于父子元素,添加.ct{ overflow: auto}取消合并
    取消合并效果
  1. 去除inline-block内缝隙有哪几种常见方法?
    元素间有缝隙是因为标签之间存在空格,去掉空格,缝隙自然就会消失。
<style>
    ol li{
        display: inline-block;
        background-color: red;
    }
    </style>
</head>
<body>
    <ol>
        <li>首页</li>
        <li>关于</li>
        <li>练习</li>
        <li>加入</li>
    </ol>
</body>```
![有缝隙](http://upload-images.jianshu.io/upload_images/2150964-a68d17bebff0c80d.PNG?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)
去除缝隙的方法:
 - html结构法:
    ```
<ol>
    首页<li></li>
    关于<li></li>
    练习<li></li>
    加入<li></li>
</ol>```
或者

<ol>
<li>首页</li
><li>关于</li
><li>练习</li>
<li>加入</li>
</ol>```


前两个缝隙没了

利用注释,效果图同上

<ol>
    <li>首页</li><!--
    --><li>关于</li><!--
    --><li>练习</li>
    <li>加入</li>
</ol>```
  * CSS法:把`inline-block`元素的父元素的`font-size`设为0
<style>
ol{
    font-size: 0;
}
ol li{
    display: inline-block;
    background-color: red;
    font-size: 16px;
}
</style>```
没有缝隙
  • CSS之letter-spacing法也可以去掉缝隙
    <style>
    ol{
        letter-spacing: -8px;
    }
    ol li{
        display: inline-block;
        background-color: red;
        letter-spacing: 0;
    }
    </style>```
[参考文章](http://www.zhangxinxu.com/wordpress/2012/04/inline-block-space-remove-%E5%8E%BB%E9%99%A4%E9%97%B4%E8%B7%9D/)

3. 父容器使用`overflow: auto| hidden`撑开高度的原理是什么?
使用`overflow: auto| hidden`触动父容器BFC特性,来包裹浮动流,也就是说包含块会把浮动元素的高度也计算在内,所以不用清除浮动来撑起高度。
4. `BFC`是什么?如何形成`BFC`,有什么作用?[参考文章](http://web.jobbole.com/83274/)
BFC全称是Block Formatting Context,即块格式化上下文,是一个独立的布局环境。BFC中的元素的布局是不受外界的影响,并且在一个BFC中,块盒与行盒都会沿着其父元素的边框垂直排列。
 * BFC的生成:
    - float的值不为none(left/right);
    - overflow的值不为visible(为auto/hidden);
    - display的值为inline-block、table-cell、table-caption;
    - position的值为absolute或fixed。
 * 作用:
    1. **BFC 会阻止外边距折叠**

<style>
.p1{
width: 100px;
height: 50px;
background: #ff0;
margin: 30px;
}
.p2{
width: 100px;
height: 50px;
margin: 30px;
background: #ff0;
}
.p3{
width: 100px;
height: 50px;
margin: 30px;
background: #ff0;
}
.ct3{
overflow: hidden;
}
</style>
</head>
<body>
<div class="ct1">
<p class="p1">我的边距合并</p>
</div>
<div class="ct2">
<p class="p2">我的边距合并</p>
</div>
<div class="ct3">
<p class="p3">我的边距不合并</p>
</div>
</body>```

第三个与第二个边框没有折叠

2. BFC 可以包含浮动的元素

    <style>
    p{
        width: 100px;
        height: 100px;
        background: #ff0;
        margin: 30px;
        float: left;
    }
    .ct1{
        border: 1px solid red;
    }
    .ct2{
        border: 1px solid blue;
        overflow: auto;
    }
    </style>
</head>
<body>
    <div class="ct1">
        <p>我塌陷</p>
    </div>
    <div class="ct2">
        <p>我没塌陷</p>
    </div>
</body>```
![BKC包裹浮动元素](http://upload-images.jianshu.io/upload_images/2150964-93c4802f3f2ed937.PNG?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)
    3. **BFC 可以阻止元素被浮动元素覆盖**
<style>
.box1{
    width: 100px;
    height: 100px;
    background: #ff0;
}
.box2{
    width: 200px;
    height: 100px;
    background: green;
    float: left;
}
.ct1{
    width: 300px;
    background: #ccc;
    margin: 30px;
    overflow: hidden;       
}
.ct2{
    width: 300px;
    background: #ccc;
    margin: 30px;
}
</style>

</head>
<body>
<div class="ct1">
<div class="box1"></div>
<div class="box2"></div>
</div>
<div class="ct2">
<div class="box1"></div>
<div class="box2"></div>
</div>
</body>```


参考文章

  1. 浮动导致的父容器高度塌陷指什么?为什么会产生?有几种解决方法
    当没有给父容器指定高度或者设为auto时,如果它的子元素浮动,那么它就会出现高度塌陷,这是因为元素浮动后就脱离了文档流,父容器计算高度时会忽略浮动子元素的高度。
  • 解决办法3种:
    1. 直接给父元素设置高度。
    • 在父元素中添加一个无语义的标签,清除浮动,例如<div class="clear"></div>.clear: both;
    • 给父元素创建一个BFC空间,例如添加属性overflow: hidden;,或者让父元素也浮动。
  1. 以下代码每一行的作用是什么? 为什么会产生作用? 和BFC撑开空间有什么区别?
    .clearfix:after{    /*在class="clearfix"后添加一个伪元素*/
        content: '';    /*不添加内容*/
        display: block; /*设置为块级元素*/
        clear: both;    /*清除左右两边的浮动*/
    }
    .clearfix{
        *zoom: 1;   /*在IE5.5,IE6,IE7下用于清除浮动*/
    }```
`*zoom: 1`实现了对IE5.5,IE6,IE7浏览器的兼容,原理是在IE5.5,IE6,IE7下为元素应用zoom:1的时候可以激活haslayout属性,(IE5.5,IE6,IE7 accepts css properties with an * at the start.),闭合浮动,避免父容器不会被撑开。
##代码
[BFC](https://github.com/jirengu-inc/jrg-renwu6/blob/master/homework/%E9%83%AD%E5%BF%97%E6%98%8E/%E4%BB%BB%E5%8A%A111/BFC.html)/ [预览](http://book.jirengu.com/jirengu-inc/jrg-renwu6/homework/%E9%83%AD%E5%BF%97%E6%98%8E/%E4%BB%BB%E5%8A%A111/BFC.html)
[导航条](https://github.com/jirengu-inc/jrg-renwu6/blob/master/homework/%E9%83%AD%E5%BF%97%E6%98%8E/%E4%BB%BB%E5%8A%A111/%E5%AF%BC%E8%88%AA%E6%9D%A12.html) /[预览](http://book.jirengu.com/jirengu-inc/jrg-renwu6/homework/%E9%83%AD%E5%BF%97%E6%98%8E/%E4%BB%BB%E5%8A%A111/%E5%AF%BC%E8%88%AA%E6%9D%A12.html)
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 211,290评论 6 491
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 90,107评论 2 385
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 156,872评论 0 347
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 56,415评论 1 283
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 65,453评论 6 385
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 49,784评论 1 290
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 38,927评论 3 406
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 37,691评论 0 266
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,137评论 1 303
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 36,472评论 2 326
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 38,622评论 1 340
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 34,289评论 4 329
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 39,887评论 3 312
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 30,741评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,977评论 1 265
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 46,316评论 2 360
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 43,490评论 2 348

推荐阅读更多精彩内容