2013-03-25 59 views
2

爲什麼我們不能分組CSS如..分組CSS選擇與::選擇

p::selection , p::-moz-selection 
{background:transparent;} 

演示:http://jsfiddle.net/l2aelba/MRyVC/1/

爲什麼我們有個像

選擇一個
p::selection  {background:transparent;} 
p::-moz-selection {background:transparent;} 

演示:http://jsfiddle.net/l2aelba/MRyVC/

有人可以擴展這個問題嗎?

+0

一些瀏覽器只是有怪異的實現。全屏幕選擇器也是如此。 – alex 2013-03-25 11:41:27

+1

我認爲是因爲IE不能識別'moz'而其他瀏覽器也是如此。 – 2013-03-25 11:42:01

+0

Chrome和Firefox都不起作用http://jsfiddle.net/l2aelba/MRyVC/1/ – l2aelba 2013-03-25 11:42:55

回答

6

瀏覽器是expected放棄整個規則如果選擇的任何部分無效:

選擇器(另見關於選擇部分)包括了一切(但不包括)第一左花括號({)。選擇器總是與一個聲明塊一起。當用戶代理無法解析選擇器(即它不是有效的CSS 2.1)時,它必須忽略選擇器和下面的聲明塊(如果有的話)。

CSS 2.1爲選擇器中的逗號(,)提供了特殊含義。但是,由於不知道逗號是否可以在將來更新CSS時獲得其他含義,因此如果選擇器中的任何位置出現錯誤,則應忽略整個語句,即使CSS 2.1中的其他選擇符看起來合理。

(請注意,只要一個瀏覽器而言,「有效的CSS 2.1」的真正含義「即理解和瀏覽器支持的選擇」。)

由於非Mozilla瀏覽器不瞭解::-moz-selection,他們必須放棄規則。由於Mozilla瀏覽器不理解::selection,他們也必須放棄規則。這是一個雙輸的局面(也是前綴難以處理的另一個原因,特別是在選擇器中)。

爲了記錄,我很驚訝這不再適用於Chrome(至少在Windows版本25中,因爲我只是測試過)。它曾經頑固地將選擇器p::selection, p::-moz-selection解析爲p::selection,並應用規則而不是遵循規範,開發人員有理由這樣做。我不知道什麼改變...

+0

+1爲正確的答案。 – Spudley 2013-03-25 11:47:00

+0

好的,謝謝你:D – l2aelba 2013-03-25 11:47:19