遇到了fixed固定定位失效的问题

( 直接往下拉有一些解决办法 )

在写一个小程序的时候,想要把一个东西根据视口定位,但是发现 position: fixed;失效了,不思其解,百度了后了解到问题所在。

当固定元素的祖先的transform 属性非 none 时,定位容器的参照物将由视口改为该祖先。

很好理解吧,transform 属性非 none了那固定定位效果就跟绝对定位差不多,但是不会脱离文档流了,只有transform为none才可以正常使用固定定位,但是我倔,我就想即使用transform不为none,又想实现固定定位的效果,咋办?

有尝试网友说的给祖父元素之一加上transform:none,但是我试了不行……

还有网友说将具有transform属性的盒子设置display:inline-block;试了也不行……

问了chatGPT,给出下面一个解决方案,试了也不行……


找了一些资料,有三个可以实现固定定位效果的办法:

第一种:使用粘滞定位替代。粘滞定位不受transform属性影响,具体可以参考这位大佬的CSS fixed固定定位transofrm失效及居中小技巧

第二种,创建一个与带有transform属性的祖先元素平行的容器,在该容器中进行固定定位。这个相当于绕过transform,有些取巧。

想同时使用transform 属性非 none和固定定位的话,可以看看下面方法,实现思路就是通过监听固定元素的滚动高度,然后实时更改高度值,但是可能出现元素抖动的问题,实现代码如下:

HTML:

  <div class="ZuFu">

    <div class="Fu">

      <div class="child"> 我是要进行固定定位的元素 </div>

    </div>

  </div>

JS:

  window.addEventListener("scroll", fixChildPosition);

  function fixChildPosition() {

    var scrollTop = window.pageYOffset || document.documentElement.scrollTop || document.body.scrollTop || 0;

    var Fu = document.querySelector(".Fu");

    var Child = document.querySelector(".child");

    Fu.style.visibility = scrollTop > 0 ? "visible" : "hidden";

    Child.style.top = `${scrollTop}px`;

  }

CSS:

    .ZuFu {position: relative;height: 10000px;background-color: cadetblue;color: aliceblue;transform: scale(1);}

    .Fu {width: 100px;height: 100px;position: fixed;top: 100px;left: 100px;z-index: 10;

      visibility: hidden;pointer-events: none;}

    .child {width: 100px;height: 100px;position: absolute;top: 0;left: 0;visibility: visible;background-color: aqua;color: black;}

上传不了视频,gif还不动,服了

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容