移動端項目一直使用VUX
來開發,以前使用裏面的Search
組件作過一些二次封裝的組件,最近發現Search
組件內部的默認插槽,本來是fixed
定位,在手機上打開是好的,可是在瀏覽器的模擬器打開竟然失效了。css
首先上google查到了,常見的fixed
定位失效的主要緣由vue
fixed 屬性會建立新的層疊上下文。當元素祖先的 transform, perspective 或 filter 屬性非 none 時,容器由視口改成該祖先。git
見MDN position: fixedgithub
好的,查到了主要問題,接下來咱們來看看,是否是這個緣由致使的chrome
在VUX
的Search
組件中,咱們找到了外層容器.vux-search-fixed
的樣式中,有一個backdrop-filter
屬性瀏覽器
.vux-search-fixed {
position: fixed;
left: 0;
top: 0;
z-index: 5;
background: rgba(255, 255, 255, 1);
backdrop-filter: blur(5px);
}
複製代碼
OK,咱們嘗試着把這個backdrop-filter
屬性取消掉,誒,fixed
定位又鋪滿整個窗口了。佈局
咱們再來看下這個backdrop-filter
屬性的兼容性 ui
兼容性並非很好,目前須要chrome76以上才生效。google
以前fixed
定位正常顯示,是因爲以前瀏覽器沒有支持這個backdrop-filter
屬性。spa
由此能夠肯定就是父元素的這個backdrop-filter
屬性,致使fixed
定位的子元素,不在是相對於屏幕視口(viewport),而是相對於帶有這個backdrop-filter
屬性的父元素定位了。
backdrop-filter
屬性,因此能夠看到內部fixed
定位的子元素child
會相對於設置了backdrop-filter
屬性的父元素parent
定位,而不是屏幕視口(viewport)
parent
元素的backdrop-filter
屬性註釋,便可看到child
元素會基於viewport定位,鋪滿整個視口
backdrop-filter
屬性,因此fixed
不會失效
把父容器的backdrop-filter
屬性去掉就好
畢竟保證佈局一致性的優先級確定是高於這種純屬濾鏡的美化樣式
已經給VUX
提好了issue