对于使用CSS样式使得盒子模型脱离文档流的讲解

html中有块级元素(display: block)和内联元素(display: inline) 或者说 display: inline-block;

在正常的文档流中,如果说一个父盒子中包含两个div的子盒子,例如:

<div class="fath">

<div class="son1"></div>

<div class="son2"></div>

 </div>

<style>

.fath {

  width: 500px;

  height: 500px;

  border: 1px solid red;

}

.son1 {

  background-color: green;

  width: 200px;

  height: 200px;

}

.son2 {

  background-color: red;

  width: 200px;

  height: 200px;

}

</style>

此时 son1和son2由于都是独占一行的元素,所以会自上而下的进行排列布局。

那此时如果我在上面那个绿色的盒子上面加上一个float: left呢?

<div class="fath">

<div class="son1"></div>

<div class="son2"></div>

 </div>

<style>

.fath {

  width: 500px;

  height: 500px;

  border: 1px solid red;

}

.son1 {

  background-color: green;

  width: 200px;

  height: 200px;

  float: left;

}

.son2 {

  background-color: red;

  width: 200px;

  height: 200px;

}

</style>

此时.son1的盒子脱离了文档流,.son2的盒子会觉得这个脱离文档流的.son1盒子其实已经不见了,所以就无视.son1盒子的存在,而自己就会往上移动到.son1的位置进行填充,你们想想,.son1盒子都没了,如果布局中只存在着.son2的盒子,那.son2盒子会处在一个什么位置上面呢?对吧,一样道理。

而此时又由于.son1的宽度和高度和.son2的宽度和高度一样,那么.son2的盒子会被.son1的盒子给覆盖掉。如果.son2的宽高比son1要多的话,就是.son1看起来位于.son2盒子的内部了,其实不是的,只是.son2已经无视了.son1盒子的存在,无视了它而已。就像下图所示:

如何解决这种被覆盖的情况呢?

1. 给黄色盒子也加一个float:left

2. 使用BFC布局 (Block Formatting Context 块级元素格式化上下文)

给黄色盒子加上一个overflow: hidden即可解决这种覆盖问题,甚至是文本环绕问题都能用overflow:hidden(BFC布局)解决。

float浮动模型引起的父类盒子塌陷也是 这个原因,子盒子脱离文档流,父盒子没有定高度,完全靠子盒子撑开,子盒子脱离文档流,父盒子没有撑开的子盒子了,所以出现了高度塌陷的情况,那么给父盒子进行overflow:hidden 进行清除浮动,就可以解决父盒子高度塌陷的问题。

position也可以使得盒子脱离文档流,不过是position: fixed和absolute可以脱离文档流,relative不会使得盒子脱离文档流。

position脱离文档流的方式,没有使得文字可以环绕的那种特性,但是float有,而且是真的有,position是真没有。

这是float的效果

这是position: absolute的效果

overflow:hidden (BFC布局)似乎没办法解决 position: absolute/fixed的,而float可以被解决,上述已经说过了。

 所以说position和float脱离文档流的形式还是有区别的,position是Layer层模型,而float是浮动模型。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

luolvzhou

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值