IE7 修復了很多 bug,也增加了對一些選擇符的支持,所以現在諸如 *html {}
和 html>body {}
等針對 IE 隱藏或顯示的 hack 都會在 IE7 中失效。雖然 CSS Hack 不推薦使用,條件注釋才是萬無一失的過濾器,但是條件注釋只能出現在 HTML 中,CSS Hack 還是有用武之地的。Nanobot 發現了一些針對 IE7 的 CSS Hack,具體就是:
>bodyhtml**+html
這三種寫法,其中前兩種都是不合法的 CSS 寫法,在標准兼容浏覽器中被被忽略,但是 IE7 卻不這麼認為。對於 >body
,它會將缺失的選擇符用全局選擇符 *
代替,也就是將其處理成了 *>body
,而且不光對於 >
選擇符,+,~
選擇符中這個現象也存在。對於 html*
,由於 html 和 * 之間沒有空格,所以也是一種 CSS 語法錯誤,但 IE7 不會忽略,而是錯誤地認為這裡有一個空格。對於第三種 *+html
,IE7 認為 html
前面的 DTD 聲明也是一個元素,所以 html 會被選中,這三種方法中只有這一種方法是合法的 CSS 寫法,也就是說可以通過校驗器的驗證,因此也是作者推薦的 hack 用法。
最後作者給出了最佳方式:
- IE 6 and below
- Use
* html {}
to select the html element.- IE 7 and below
- Use
*+html, * html {}
to select the html element.- IE 7 only
- Use
*+html {}
to select the html element.- IE 7 and modern browsers only
- Use
html>body {}
to select the body element.- Modern browsers only (not IE 7)
- Use
html>/**/body {}
to select the body element.
具體信息參考原文:Easy CSS hacks for IE7