2011-08-25 84 views
0

我學習CSS樣式谷歌文檔,我也注意到有這樣一件事:‘* HTML的.class’和‘HTML>體的.class’

.goog-inline-block { 
    position  : relative; 
    display   : -moz-inline-box; 
    display   : inline-block 
} 

* html .goog-inline-block { 
    display   : inline 
} 

*:first-child + html .goog-inline-block { 
    display   : inline 
} 

html>body .goog-inline-block { 
    display   : -moz-inline-box; 
    display   : inline-block 
} 

我明白這是什麼.goog-inline-block類應該是說,但是這個代碼引起了人們對我的問題:

  • 爲什麼有這麼多的聲明一個簡單的類?
  • 爲什麼簡單的.class-name聲明與* html .class-name聲明不同?
  • 這是什麼狡猾的建設*:first-child + html .class-name在做什麼?

回答

4

這條規則:

* html .goog-inline-block { 
    display   : inline 
} 

定義了IE6的樣式。在IE6的文檔模型中,有一個神祕的根元素,其中包含html,所以這個選擇器利用這個事實使用* html黑客。

這條規則:

*:first-child + html .goog-inline-block { 
    display   : inline 
} 

定義了IE7的樣式。在IE7的文檔模型中,沒有更多的根元素高於html,但在之前還有另一個,它是*:first-child + html選擇器的目標。

這條規則:

html>body .goog-inline-block { 
    display   : -moz-inline-box; 
    display   : inline-block 
} 

定義樣式IE7 +及其他瀏覽器。 IE6不支持子選擇器>,所以它永遠不會看到這個規則。 -moz-inline-box實際上與inline-block相同,但是適用於Firefox 2及更高版本,因爲這些版本不支持inline-block

該類有很多聲明,因爲不同的瀏覽器有display: inline-block樣式的問題,所以這些瀏覽器需要黑客和變通辦法。

+0

因此,'.class-name {display:inline; }'不是交叉瀏覽器,是嗎?我可以承認IE6需要例外,但也可以使用其他瀏覽器嗎? –

+0

@Innuendo:跨瀏覽器問題不在'.class-name'中,而是在'display:-moz-inline-box'和'display:inline-block'中。 – BoltClock

+0

對不起'*:first-child' - 我刪除了空格(這是因爲手動美化了這個代碼)。好吧,所以問題正好在'display:inline-block'屬性中,但不在'.class-name'中 - 我明白了,謝謝 –