Open YvetteLau opened 5 years ago
BFC 就可以清除浮动 如何触发块级格式化上下文(常见)
1.根元素本身就会形成一个块级格式化上下文
2.overflow不为visible的
3.float不为none
4.inline-block 行内块元素
5.定位元素(position 是 absolute 或者 fixed)
6.flex 和 grid 布局
7.display 和 table 相关的,比如table, table-cell 等
像 overflow:hidden 让父级容器从新计算高度 就属于BFC 的第一种。
至于 4. after,before伪类 clearfix::after { content: ""; display: block; clear: both; }
这个 display: block; 这条属性同样的起到了作用。 1楼只是回答 可能的几种方法,面试官 可能会直接二连,问为什么这几种方法能清除浮动,然后 引申出浏览器渲染渲染原理,甚至是回流和重绘。至少这个问题,我首先会联想到BFC
/* IE8 以上*/
.clearfloat:after{display:block;clear:both;content:"";visibility:hidden;height:0}
/* zoom(IE转有属性)可解决ie6,ie7浮动问题 */
.clearfloat{zoom:1}
.clearfloat{clear:both}
overflower:hidden;
1、伪类 ::after,::before 2、clear: both; 3、overflow: hidden(触发BFC机制)
清除浮动
1.clear清除浮动(添加空div法)在浮动元素下方添加空div,并给该元素写css样式: {clear:both;height:0;overflow:hidden;} 2.给浮动元素父级设置高度 3.父级同时浮动(需要给父级同级元素添加浮动) 4.父级设置成inline-block,其margin: 0 auto居中方式失效 5.给父级添加overflow:hidden 清除浮动方法 6.万能清除法 after伪类 清浮动
1、使用clear:both。 2、使用伪类before after 元素。 3、使用overflow:hidden。
1、clear:both; 2、overflow:hidden 3、设定父级元素的高度
1.celar:both; 2.父级容器设置高度; 3.父级设置overflow-hidden; 4:伪类 :before :after;
1. 利用伪元素清除浮动
.clearfix:after{
content: "";
display: block;
height: 0;
clear: both;
visibility: hidden;
}
2. clear:both 3. overflow : hidden 4.父级跟着浮动或者设定父级高度
2.伪类清浮动
/* IE8 以上*/ .clearfloat:after{ display:block; clear:both; content:""; visibility:hidden; height:0} /* zoom(IE转有属性)可解决ie6,ie7浮动问题 */ .clearfloat{zoom:1}
3.给父级元素设置高度或跟父级跟着浮动
这个更多的是用来解决高度坍塌问题
当块元素遇到浮动的元素会当浮动的元素不存在,清除浮动就是让块元素一直下移直到块元素的某一边或者某两边没有浮动元素为止。清除浮动的方式就是给块元素添加css的clear属性,为both, left, right.
清除浮动可以理解为清除浮动产生的影响。当元素浮动时也就是为当前元素创建了块格式化上下文(BFC),会对周围的元素或者父元素在布局上会产生一定的影响,比如:父元素因无法自动计算高度而产生的高度塌陷;因脱离文档流而使兄弟元素错位等。
要清除浮动产生的影响,其实就是在解决这两方面的问题。方法是可以通过设置父元素高度,或利用BFC,或者使用自带属性 `clear1 进行清除。
1. 设置父元素的高度 设置父元素的高度解决的是元素浮动产生的父元素高度塌陷问题,其内部元素浮动影响并未彻底清除,且需要进行计算然后再设置,比较固定,一旦子元素的高度发生改变,父元素的高度也需要再次计算设置,不够灵活。除非内容高度固定一成不变,否则不推荐使用。
2. 自带属性 clear
使用自带的属性可以非常好的解决浮动影响。该方法直观有效,哪里需要清除就在哪里添加一个兄弟元素,设置 clear
属性即可,一般属性值都设置为 both
清除两侧的浮动,也可以根据实际需要清除左侧或右侧,灵活方便直观。在 bootstrap 4.0 框架中的 clearfix
应用了该方法,其是在父元素中设置了伪元素,并设置了伪元素隐藏。
.clearfix::after {
display: block;
clear: both;
content: "";
}
该方法是在元素内部清除兄弟元素浮动影响是比较推崇的,因为其灵活有效,想清哪里清哪里。说这个方法有什么不好的地方,需要添加或者新建一个节点,为新节点添加 clear
属性,也就是我们需要一个存放 clear属性
的盒子,来纠正在他之前兄弟产生的不良影响。
3. 利用BFC 使用 BFC 是一种比较灵巧的方法,也可以说是对症下药,因为浮动创建了 BFC,我们就用BFC去解决。根据实际项目中的应用写几个比较常用的。
当容器的高度为auto,且容器的内容中有浮动(float为left或right)的元素,在这种情况下,容器的高度不能自动伸长以适应内容的高度,使得内容溢出到容器外面而影响(甚至破坏)布局的现象。这个现象叫浮动溢出,为了防止这个现象的出现而进行的CSS处理,就叫CSS清除浮动。
<style>
.inner {
width: 100px;
height: 100px;
float: left;
}
</style>
<div class='outer'>
<div class='inner'></div>
<div class='inner'></div>
<div class='inner'></div>
</div>
clear
属性在 <div class='outer'>
内创建一个空元素,对其设置 clear: both;
的样式。
clear
属性 + 伪元素.outer:after{
content: '';
display: block;
clear: both;
visibility: hidden;
height: 0;
}
IE8以上和非IE浏览器才支持:after,如果想要支持IE6、7,需要给 outer
元素,设置样式 zoom: 1
;
根据 BFC 的规则,计算 BFC 的高度时,浮动元素也参与计算。因此清除浮动,只需要触发一个BFC即可。
可以使用以下方法来触发BFC
如:
.outer {
overflow: hidden;
}
注意使用 display: inline-block
会产生间隙。
根据BFC的规则计算BFC的高度时,浮动元素也参与计算
, 父级元素设置为overflow:hidden
<style>
.left {
height: 100px;
width: 100px;
float: left;
background-color: blueviolet;
}
.right {
float: left;
height: 200px;
width: 200px;
background-color: brown;
}
</style>
<div class="parent">
<div class="left"></div>
<div class="right"></div>
</div>
就拿上面的代码来说,不清除浮动的话会导致父元素的高度塌陷。 可以在父元素的最后一个子元素加上clear:both
<div class="parent">
<div class="left"></div>
<div class="right"></div>
<div style="clear:both></div>
</div>
.clearfix::after{
content: '';
display: block;
clear: both;
}
1. overflow:hidden 让父级容器从新计算高度 2 clear: both; 清楚浮动 3 设置固定高度 4. after,before伪类 clearfix::after { content: ""; display: block; clear: both; }
不知还有没有或者正确否