overflow 和绝对定位的小坑

1,387 阅读1分钟

在项目开发中,我们经常会使用到绝对定位来定位元素,但是在项目比较复杂时,偶尔会发现,绝对定位的元素被裁剪掉了,没有完全显示。

比如下面图-1这种,和我们的目标效果图-2相差巨大。 这是为什么呢?

经过排查发现,绝对定位元素参照父元素进行定位,而父元素的父元素的父元素使用了overflow属性,导致溢出的内容被裁剪了。

不过后来经过反复测试,我发现:如果绝对定位的元素A,相对于父元素B的父元素C进行定位,而且其父元素B设置overflow,则元素溢出不会被裁剪掉。

我个人理解:

一个元素A设置了绝对定位属性后,A元素相对于距离他最近的第一个设置了除static 定位以外定位的祖先元素R进行定位,那么在A和R之间包含的A的祖先元素设置overflow对A不造成影响;但是,在R元素与根节点之间的祖先元素设置overflow会有对溢出部分进行裁剪。

总结:

绝对定位的元素A,相对于祖先元素B进行定位,如果B的祖先元素中有设置overflow属性,则会对溢出部分进行裁剪;否则,无影响。