IE的2像素偏差问题终于“将要”成为历史了(附js微技巧一则)
眾所周知,IE有一個經典的“差了2像素”的問題,現在在IE9的第四個平臺預覽中這個問題已經可以解決了!
不過有一個前提是,你必須“IE9標準模式”打開網頁才行,默認情況下如果一個網頁的DTD是“<!DOCTYPE html>”,“IE9標準模式”就會啟用。
?
好吧,IE的“2像素”偏差主要是來自于那個瀏覽器顯示區域的那個雞肋的“內陷”邊框,正好2像素寬。有意思的是剛才我跟一個朋友提起這件事他居然大驚“原來是歷史遺留問題么”XD
其實在從這個2像素偏差的問題剛引起廣泛關注的時候,就有一些人注意到把body的邊框干掉就沒問題了。
可是從IE6到IE8一直有一個問題就是標準模式下body的邊框并不是瀏覽器內容區的邊框,而是另有所指,當時還有一些其它方面的原因綜合在一起,都是阻礙了Web標準化進程的因素——從這個角度來說,IE真是罪該萬死。
補充:經3樓“司徒拔's Paradise”提醒后,我發現在IE6中可以通過為html元素設置css邊框規則來消除這個多余的凹陷邊框;但在IE8中仍然不行(手頭沒有IE7暫時沒法測試)。
?
而現在IE9的新“IE9標準模式”(真拗口)會干脆不顯示這個邊框,于是這個2像素偏差的問題也就解決了。
有些人可能早就注意到在“IE9標準模式”中那個內陷邊框已經被干掉了,但是看起來在IEBlog特別提起這件事之前很多人還沒發現2像素的問題已經解決了呢。我也沒發現XD
?
?
在前兩天的一些爭討論中有人提到了使用閉包來確保代碼的完整性——雖然當時有些偏題,但我自己也是很喜歡這個技巧的。
我習慣的寫法和常見的寫法稍微有一點差別,但那只是一兩個字符的差別,所以我也一直不覺得有什么必要特意去提。
鑒于這篇博文只說“2像素”的問題字數實在太少,就在這里把這個技巧也提一下吧。
?
單純以創建作用域為目的的保護性的閉包,一般來說是寫成這樣的:
(function(){/* ... */ })();由于以function關鍵字開頭的語句會被一些JavaScript引擎當作函數聲明,所以在這個“看起來像是聲明”兩邊加上括號表示“這是一個函數表達式”讓它能夠正常工作。
但是增加一對括號兩個字符的做法總讓我覺得不太舒服,所以經過一些小小的摸索之后我開始采用這種寫法:
!function(){/* ... */ }();少了一個字符之后,我覺得舒服多了,雖然本質上說只是減少了一個字符而已,實際運行起來還要因為多一個邏輯運算而多耗費一點時間——不過我想對于一個包含了大量代碼內容的閉包來說多一個邏輯否并不會有太大影響,就一直這樣用了。
當然啦,你可能并不同意我的看法,而采用較為謹慎的括號寫法。
?
也許有人會對這個“!”感到困惑,比方說“函數的邏輯否不應該是false嗎”?
其實跟采用括號的原因一樣,這里用了感嘆號只是想告訴解釋器“這里是一個函數表達式,不是一個函數聲明語句”;
而“!”的操作優先級也是低于“()”這個表示“執行”的操作符的。
?
在ECMAScript中,操作優先級最高的是“關系操作(運算)符”,也就是表示成員的“.”、“[]”和表示執行的“()”,接著才是“一元操作(運算)符”,包括表示邏輯否的“!”在內。
所以,就算是把“!”寫在開頭,也不會影響到后面函數的執行。
轉載于:https://www.cnblogs.com/NanaLich/archive/2010/08/24/ie9-the-2px-issue-resolved.html
總結
以上是生活随笔為你收集整理的IE的2像素偏差问题终于“将要”成为历史了(附js微技巧一则)的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Oracle中使用Table()函数解决
- 下一篇: WEB前端技术趋势图示-JS库