在其他标签上,使用BFC可以清除浮动,为什么正文不可用.如预期,在正文上添加溢出:隐藏形成BFC,可以达到清除浮动的效果,但事实并非如此?
div.f {
float: left;
width: 100px;
height: 100px;
background: red;
margin-right: 1px;
}
body {
overflow: hidden;
border: 1px dashed skyblue;
}
.p {
overflow: hidden;
}
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Document</title>
</head>
<body>
<!-- <div class="p">
<div class="f"></div>
<div class="f"></div>
</div> -->
<div class="f"></div>
<div class="f"></div>
</body>
</html>
因为溢出在应用于body元素时有一个特殊的行为,它会被传播到html元素上。你需要添加 overflow:auto
到html中以避免这种情况。
div.f {
float: left;
width: 100px;
height: 100px;
background: red;
margin-right: 1px;
}
body {
overflow: hidden;
border: 1px dashed skyblue;
}
html {
overflow: auto;
}
<div class="f"></div>
<div class="f"></div>
UAs必须应用
overflow-*
的值设置到视口。但是,当根元素是一个[HTML]html
元素(包括HTML的XML语法)的溢出值是可见的(在两个轴上),并且该元素有一个body元素作为子元素,那么用户代理必须应用overflow-*
值的第一个这样的子元素传播到视口。传播值的元素必须有一个使用过的溢出值,即可见的. 参考
所以你的身体元素又会有 overflow:visible
传播后
为了让它在身体上发挥作用,你可以使用 display:flow-root
我相信这是与内容的宽度如何影响身体displayrender,并通过添加 display:flow-root
它将清除里面的浮动标签。
div.f {
float: left;
width: 100px;
height: 100px;
background: red;
margin-right: 1px;
}
body {
display: flow-root;
border: 1px dashed skyblue;
}
.p {
overflow: hidden;
}
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Document</title>
</head>
<body>
<!--<div class="p">
<div class="f">AAAA</div>
<div class="">test</div>-->
</div>
<div class="f"></div>
<div class="f"></div>
</body>
</html>