2013-07-16 31 views
14

從MDN:對於之前,之後,首字母和第一行僞元素,我應該使用單冒號(:)還是雙冒號(::)?

::符號是在CSS 3以建立僞類和僞元件之間的 歧視引入。瀏覽器 也接受CSS 2

引入的符號:如果符號:總是會被瀏覽器CSS3接受,我應該使用它,因爲它適用於新老瀏覽器?

或者我應該使用它們兩個,舊版瀏覽器爲:,新版爲::,因爲:不會總是被接受?


注意:我覺得我的問題是不是重複不是Should I use single or double colon notation for pseudo-elements?重複,因爲其他問題詢問單,相較於ALL僞元素雙符號;而我的問題只是關於CSS2中定義的僞元素,而不是CSS3中定義的新元素,因爲我已經知道那些我必須使用::

+0

您是否在意IE8等老式瀏覽器?如果是這樣,請使用':'。否則使用'::'。 – thirtydot

+2

可能重複的[我應該使用單一或雙冒號符號僞元素的CSS](http://stackoverflow.com/questions/10181729/should-i-use-single-or-double-colon-notation-for-僞元素-css) – thirtydot

+0

@thirtydot http://stackoverflow.com/questions/10181729/should-i-use-single-or-double-colon-notation-for-pseudo-element-css詢問有關單一符號與雙重符號對於所有僞元素。我的問題只是關於在CSS2中定義的僞元素,而不是在CSS3中定義的新元素;因爲我已經知道,在那些我必須使用'::' – Oriol

回答

15

對於什麼是值得推出了新的僞元素,Selectors 4 now explicitly asks ,作者使用雙冒號所有僞元素,包括CSS1和CSS2僞元件,前進:

由於遺留的限制,用戶代理必須允許以單冒號寫入::before::after::first-line,和::first-letter僞元素,而不是兩個,類似於僞類 句法。作者必須對這些僞元素始終使用雙冒號語法。

這意味着,今天只有適當使用單冒號語法的是,如果你確實需要舊版瀏覽器的支持 - 在這裏唯一重要的瀏覽器IE8是和老年人。如果您不這樣做,則應該使用雙冒號語法,以便與僅接受雙冒號的newer pseudo-elements保持一致。此外,如果您要將IE8 不支持的屬性(例如border-radiusbox-shadow)應用到您的::before::after僞元素,則使用單冒號語法的意義是毫無意義的。

我願意相信,至少是選擇器3暗示這在其聲明中表示,單冒號語法並不適用於任何新的僞元素,不過話說這樣的事情在黑陳述和白色從不傷害任何人,很高興知道即將到來的標準就是這樣做的。

此外,絕對沒有理由同時使用這兩個符號(例如:before, :after { ... } ::before, ::after { ... }),因爲沒有支持新語法的瀏覽器不支持新語法而不支持較舊的語法。


我說,這充分認識到它可能還不在這個問題被問時註明這一點 - May 2013 WD肯定沒有。

+0

*另外,如果你打算將樣式應用到IE8不支持的:: before和:: after僞元素,那麼使用單冒號語法就沒有意義了。*我猜想那最後的子句是指樣式而不是僞元素?這句話非常含糊:它可以被理解爲你的意思是在IE8中不支持之前/之後的情況。 –

+0

@Bram Vanroy:你說得對,我會編輯澄清。 – BoltClock

+0

看起來「*作者必須總是使用雙冒號語法*」的句子在某個時間點被丟棄,但是昨天CSSWG [已解決](https://lists.w3.org/Archives/Public/www-style/ 2015Sep/0111。HTML)來推薦一個SHOULD。 – Oriol

-2

我會去爲單: 現在人們應該至少有一些最新的瀏覽器安裝,所以你沒有什麼可擔心的。

4

正如我在此評論前面提到的 - http://css-tricks.com/html5-progress-element/#comment-533395

簡答 - 使用單一冒號表示:

長的答案 - 有:before::before,或:after::after之間沒有真正的區別。但由於舊版瀏覽器使用單個冒號記號,因此使用:總是比較安全。閱讀此規範由W3C on pseudo elements定義其中指出,

這::符號是由當前文件,以建立僞類和僞元素之間的區別介紹。爲了與現有樣式表兼容,用戶代理還必須接受在CSS級別1和2中引入的僞元素(即:first-line,:first-letter,:before和:after)的前一個冒號記號。這種兼容性是不允許在CSS級別3

相關問題