transform對定位元素的影響


1溫故知新

.absolute:生成絕對定位的元素,相對於除position:static 定位以外的第一個有定位屬性的父元素進行定位,若父元素沒有定位屬性則相對於瀏覽器窗口的左上角定位,定位的元素不再占據文檔的空間。

   relative:生成相對定位的元素,相對於其正常位置進行定位,定位的元素仍然占據文檔的空間。

2.發現問題

    首先看一個代碼:a為父元素,b為子元素;

    <div class="a">

    a

    <div class="b">b</div>
    </div>

    現在給b加上絕對定位屬性,父元素不加定位屬性,那么b會相對於瀏覽器窗口的左上角定位;

    

一切如上面提到的那樣,b元素相對於瀏覽器定位,但如果將a元素加上transform屬性,那么結果就會發生改變!!

很奇怪,b元素竟然跑到a元素里面,並且相對於a元素定位了,這種情況是不是非常熟悉,就好像給a元素增加了一個定位屬性;那么增加的這個定位屬性的值是relative還是absolute呢?

我們新增加一個元素c,看看效果。

<div class="a">
a
<div class="b">b</div>
</div>
<div class="c">c</div>

發現沒有,c元素並沒有忽略掉a,也就是說a仍然占據着原有的位置,所有在給a元素加上transform屬性之后,a元素具有類似relative的特性,那么既然具有relative特性,如果給a直接加上定位的數值會怎樣呢?

可以看出,a的位置並沒有發生任何改變,所以只能說加了transfrom屬性的a標簽只是具有類似relative的特性,那么此時a標簽的層疊性如何呢??我們回到最初的情況(a元素沒有transform屬性,b元素設置絕對定位),此時給c元素的margin-top加一個負值,使c元素向上運動,覆蓋a元素,如下所示:

倘若此時,給a元素加上transform屬性,那么a元素的垂直地位就會發生改變,而且b元素定位參照的對象也會從瀏覽器窗口改成a元素。

3.總結

當給一個元素加上transform屬性的時候,這個元素就會具有relative的特性,所以若一個元素的父元素擁有tranform屬性,那么子元素在使用定位屬性的時候要注意。

4.結束語

這個問題是昨天做項目的時候偶然發現的,所有今天就研究了一下,寫的第一篇文章肯定有很多地方寫的不好,所以還請大家取其精華去其糟粕。

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM