offsetParent 算法分析
當調(diào)用元素 A 的 offsetParent 屬性時,必須按以下算法返回元素。
以下任一條件為真時,返回 null,并停止本算法。
A 是根元素。
A 是 HTML 的 body 元素。
元素 A 的 position 屬性計算值是 fixed。注 1
如果 A 是 HTML 元素 area,并且在其上級元素鏈中有 HTML 元素 map,返回上級元素鏈中距 A 最近的 HTML 元素 map,并停止本算法。注 2
如果以下任一條件為真時,返回距 A 最近的符合下述條件的上級元素,并停止本算法。
上級元素的 position 屬性計算值不是 static。注 3
上級元素是 HTML 的 body 元素。注 4
A 的 position 屬性計算值是 static,上級元素是 td、th 或 table。
返回 null。
前面已經(jīng)提到,以上是工作草案的內(nèi)容,所以與現(xiàn)行的瀏覽器不一定一致,注釋如下:
注 1 Firefox 不適用;IE 6 不適用;DOCTYPE 使 IE 7 不支持 fixed 時不適用(以下簡稱 IE 6 模式)。
注 2 Firefox 不適用。
注 3 上級元素的 position 屬性計算值是 fixed,并且 IE 6 或者 IE 6 模式不適用。
注 4 IE 7 模式中,如果元素的 position 屬性計算值是 absolute 或 relative,返回元素 HTML,而不是 BODY。
總結
由此看出,獲得 offsetParent 在各個瀏覽器中,各個瀏覽器的各個版本中,同一版本的不同模式中,都有不同的算法,實在有些麻煩。所以還是建議將其理解為通過 offsetParent 循環(huán)和 offsetLeft、offsetTop 可以獲得控件在瀏覽器中的絕對位置即可。
但慶幸的是有一種常見布局在各種瀏覽器中 offsetParent 是一樣的,那就是:外層元素 div 的 position 計算值是 relative、absolute 時,內(nèi)層元素 div 的 offsetParent 總是外層元素 div。
相關文章
舉例講解JavaScript中將數(shù)組元素轉換為字符串的方法
這篇文章主要介紹了JavaScript中將數(shù)組元素轉換為字符串的方法,是JS入門學習中的基礎知識,需要的朋友可以參考下2015-10-10
移動端自適應flexible.js的使用方法(不用三大框架,僅寫一個單html頁面使用)推薦
這篇文章主要介紹了移動端自適應flexible.js使用方法,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧2019-04-04
Javascript模塊化編程(三)require.js的用法及功能介紹
這個系列的第一部分和第二部分,介紹了Javascript模塊原型和理論概念,今天介紹如何將它們用于實戰(zhàn)。我采用的是一個非常流行的庫require.js感興趣的朋友可以了解下啊2013-01-01
JavaScript中constructor()方法的使用簡介
這篇文章主要介紹了JavaScript中constructor()方法的使用簡介,是JS入門學習中的基礎知識,需要的朋友可以參考下2015-06-06

