1. 程式人生 > 其它 >【css】translate元素仍佔據原始位置特性分析

【css】translate元素仍佔據原始位置特性分析

技術標籤:csscss3

如何發現該特性的?

使用translateX平移元素後,再用offsetLeft獲取元素距離body左側的距離時,無法獲取經translateX移動的部分(背景復現見以下程式碼),造成該結果的原因是translate屬性不會改變元素原始位置。

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="
width=device-width, initial-scale=1.0"
>
<title></title> <style> * { margin: 0; } div { position: absolute; left: 100px; width: 200px; height: 200px; background-color: pink; transform
: translateX(100px); }
</style> </head> <body> <div> </div> <script> var div = document.querySelector('div'); console.log(div.offsetLeft);//100 </script> </body> </html>

為什麼translate不會改變元素原始位置?這樣的特性適用於什麼場景?

改變transform或opacity不會觸發瀏覽器重新佈局(reflow)或重繪(repaint),只會觸發複合(compositions)(

https://blog.csdn.net/duola8789/article/details/79237553,關於重繪和複合可以看這篇文章,作者爸爸寫的很細緻)。

transform使瀏覽器為元素建立一個 GPU 圖層,translate改變位置時,元素依然會佔據其原始空間,如果改變絕對定位會觸發重新佈局,進而觸發重繪和複合。因此translate()更高效,可以縮短平滑動畫的繪製時間。