發(fā)現(xiàn)這個問題是在寫代碼的時候發(fā)現(xiàn),輪播組件里被輪播組件包裹的position:fixed定位失效了。
<el-carousel
ref="carousel"
>
<el-carousel-item name="0">
<img :src="src1">
<play-control
:visible="true"
/>
</el-carousel-item>
<el-carousel-item name="1">
<img :src="src2">
</el-carousel-item>
</el-carousel>
其中,<play-control>公用組件就是position:fixed,相對于瀏覽器窗口的絕對定位,但是在這個輪播圖中,它卻變成了變成了相對于父元素的絕對定位。查了一下,是受父元素輪播項transform:translateX()的影響,所有的CSS3 transform變換,無論是scale還是translate,都會讓position:fixed相對定位對象變成父元素,就像absolut。
這是css本身的特性(或者缺陷?)無法改變,只能從另一角度去找解決方案。那就是在當(dāng)前組件另寫樣式去控制<play-control>的絕對定位值,例如把原本的top:20px改成top:0之類的。
后來看了鑫大神的博客CSS3 transform對普通元素的N多渲染影響才知道,transform對元素渲染的影響可不止這么一點(diǎn),真的是又漲見識了。