Re: 剛剛測到一個 bug...

看板Browsers (瀏覽器)作者時間16年前 (2009/07/22 18:20), 編輯推噓2(205)
留言7則, 3人參與, 最新討論串4/4 (看更多)
※ 引述《tyf99 (呵呵)》之銘言: : Firefox, Opera 抓到的 scrollHeight 都是錯的! : 這和 body margin, padding 什麼的都完全無關.. : test1.html 內容很簡單,只有一個 <div> 和兩個 <hr> : <div> 高度設定 100px,很固定不會變. : <hr> redner 出來的線條高度是 2px,<hr> 本身 margin-top=margin-bottom=0.5em : 所以在 {font-size:16px; line-height:16px;} 設定下,<hr> 實際佔用高度 18px 看起來 hr 佔的高度是 18px 沒錯,但不要忘了, hr 的上面沒有其他物件,所以 hr 的 margin-top 必須與 body 的 margin-top 重疊, 而兩者的 margin-top 都是 8px,只畫一次 8px。 而 hr 和 div 之間的距離,就是 margin-bottom = 8px。 所以根據我對 css 以及 dom 的瞭解,在你這個例子裏: body (body 的 margin-top) 8px hr------------------------------ 2px <-- (hr div 間 margin) 8px | -------------------------------- | | | | | | | body 的實際 height | div | 100px | 也就是 | | | scrollHeight | | | -------------------------------- | (hr div 間 margin) 8px | hr------------------------------ 2px <-- (body 的 margin-bottom) 8px 根據這樣來算,body.scrollHeight = 120px 因為 scrollHeight 不計入 margin。 : 結果抓出來的 scrollHeight: : Firefox 120px 只有 Firefox render 出來的結果是符合這個算法的。 當然 html 並沒有規定 hr 的高度設定以及 margin 該是多少, 所以不同的瀏覽器可以有自己的解讀,這可能是造成 Opera 與 Safari 不同的原因。 但不論如何,scrollHeight 不能算 margin, 我覺得 Safari 把 margin 給算進去了,才會得到 136px。 : Opera 124px : WebKit 136px : 用肉眼看也只有 WebKit 的最正確,Firefox, Opera 都是錯的.. : 順帶一提,IE 抓到的是 132px,可能是沒有把 <hr> 本身的線條高度算進去. : 但 Firefox, Opera 這兩個怎麼看都不正常. 根據上述, 把 iframe 的 height 設成 body 的 scrollHeight 時, 不能計入 body 的上下 margin, 但是當內框頁面載入時,會從頁面的頂部開始顯示, 也就是必須要畫內框頁面的 margin-top, 於是 iframe 的高度就不夠顯示底下的 hr。 在這點上只有 Firefox 和 Opera 是對的, Safari 看得到兩條 hr 以及中間的 div,也看得到頁面的上下 margin, 顯然是錯的。 (也就是我前面說的,算入了 body 的上下 margin 的結果。) -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 123.193.74.131 ※ 編輯: Hemiola 來自: 123.193.74.131 (07/22 18:20)

07/22 18:30, , 1F
常遇到的人都知道基本上Webkit出錯的地方很多就是XD
07/22 18:30, 1F

07/22 18:50, , 2F
好深入的討論
07/22 18:50, 2F

07/22 20:55, , 3F
其實我上一篇測的時候已經把 body margin 設為 0 了...
07/22 20:55, 3F

07/22 20:56, , 4F

07/22 20:57, , 5F
fx 3.0.12: 120px, fx 3.0.11: 119px,跑個奇數出來是怎樣XD
07/22 20:57, 5F

07/22 21:11, , 6F
scrollHeight 好麻煩喔,我還是改用 clientHeight 算了..
07/22 21:11, 6F

07/22 21:13, , 7F
至少各瀏覽器解讀 clientHeight 比較一致
07/22 21:13, 7F
文章代碼(AID): #1APkVJL5 (Browsers)
文章代碼(AID): #1APkVJL5 (Browsers)