为什么定位元素会覆盖浮动元素?

两个div,第一种情况a没有浮动,b不会覆盖a,第二种情况a浮动,b会覆盖a,这是为什么呢??absolute没有设置top、right等应该是在原来的位置才对呀。求助大佬。

`

<style>
  .a {
    /* float: left; */
    height: 100px;
    width: 100px;
    background-color: aqua;
  }
  .b {
    position: absolute;
    height: 100px;
    width: 100px;
    background-color: red;
  }
</style>
<body>
  <div class="a"></div>
  <div class="b"></div>
</body>

`
2020-03-06_200940.png2020-03-06_201000.png

阅读 3.1k
2 个回答

absolute没有设置方向时在原来的位置——这里的位置指的是没有absolute时该元素应该所处的位置。
如图:
屏幕快照 2020-03-06 下午8.43.07.png

这里a float, b没有absolute时,b应该所处的位置是和a有重合的,所以当b absolute时就处于该位置——即视觉表现为覆盖了a

floatabsolute 都会脱离文档流,所以:

第一个例子 的情况下, 元素a 没有浮动, 元素b 具有 position:absolute 属性脱离了文档流,
但由于没有设定 lefttop,它们的 默认值是 auto ,它 保持static 时的位置,所以各自保持原位。

场景1.jpg


第二个例子 的情况下,元素a 设置了 float元素b 维持原先的 position:absolute ,

由于浮动的缘故使得 元素a 脱离了文档流,此时 元素b 还是因为 absolute 也是脱离文档流的,
所以 元素b 会出现在 元素a 的位置(即使 元素b 没有设置 position:absolute 它也不会保持原位出现在 元素a 的位置),

并且因为元素层级的关系(如果没有设置 z-index 后边元素可以遮盖前边的兄弟元素),元素b 会遮挡住 元素a
场景2.jpg
如果 元素b 没有脱离文档流,则 元素a 会遮挡住 元素b,因为脱离文档流会增加元素层级顺序( z-index )
场景2特殊情况.jpg

也可以设置 z-index 修改堆叠层次

一个 BFC 的问题,如果想更加了解可以查阅一下 BFC 的相关文章。

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题