如何让position: fixed不再基于浏览器窗口定位?

前言

这个问题可能比较奇怪,干嘛要让position: fixed失效呢?

其实主要的场景是应用在移动端跟PC端兼容的问题上,在移动端,fixed根据浏览器窗口定位,这没问题,但是如果将页面用PC打开,想让页面以375px显示在屏幕中央,以便模拟手机体验,同时还想让position: fixed也只在375px内生效,这就有点意思了。

默认是办不到的,那么怎么办?

实现原理

MDN对position: fixed有一个注释:

当元素祖先的 transform 属性非 none 时,容器由视口改为该祖先。

也就是说,只要给它的随便哪个祖先设上非none的transform,问题就解决了。这祖先可以是static的,也就是说随便哪个祖先都行。但是,由于要模拟手机体验,所以基于body元素比较妥。

比如说给body设一个transform: translateZ(0);,测试有效。

由于在PC环境下,我们通过媒体查询等手段限定了body的宽度,那么fixed元素也只会在这个宽度内生效了。

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

推荐阅读更多精彩内容

  • Spring Cloud为开发人员提供了快速构建分布式系统中一些常见模式的工具(例如配置管理,服务发现,断路器,智...
    卡卡罗2017阅读 135,234评论 19 139
  • 今天,在看别人的写的七牛组件时,看到如下这种写法: 点击上传图片 对于 :id="pickfiles", 这种写法...
    hxdale阅读 777评论 0 0
  • 这篇笔记主要包含 Vue 2 不同于 Vue 1 或者特有的内容,还有我对于 Vue 1.0 印象不深的内容。关于...
    云之外阅读 5,089评论 0 29
  • 欢迎关注微信公众号“畅畅上学记”。
    罗环环阅读 1,398评论 15 51
  • 火 车 钢铁般的汉子 没有疲惫,只有背负 奔跑的爱 捂热远方冰冷的心肠
    Love_999阅读 143评论 0 1