2015-04-20 13 views
9

Badam css i typografię, i wpadłem na tę intrygującą koncepcję pseudo-selektorów. Użyłem selektorów psuedo z pojedynczymi dwukropkami i jestem obeznany z wersją podwójnego dwukropka selektorów psuedo. I understand, że podwójny dwukropek jest nazywany pseudoelementem zamiast pseudo-selektora - ale dlaczego? I jaka jest różnica?CSS "::" vs ":" - pseudoelement vs pseudo-selektor?

Rozumiem również, że pojedynczy dwukropek jest znacznie bardziej obsługiwany, więc w jakiej sytuacji użyłbyś pseudoelementu dwukropka? Czy są przypadki użycia, w których dwukropek byłby konieczny, a pojedynczy dwukropek nie wykonałby tej pracy? jaka może być ta sytuacja?

"W przeciwieństwie do pseudoelementów, pseudoklasy mogą pojawiać się w dowolnym miejscu łańcucha selektora." (cytat z linku) - nie wiem, czym jest "łańcuch selekcyjny", ale wydaje się to również kolejnym ograniczeniem podejścia dwukropka. Dlaczego musiałbym używać podwójnego dwukropka, jeśli jest to (w moim rozumieniu) tylko mniej obsługiwana wersja pojedynczego dwukropka?

edit: nie wydają się być funkcjonalnie takie same: fiddle

<div><p>First Line</p></div> 
<div><p>Second Line</p></div> 

css

div:nth-child(1) > p { 
    color: green; 
} 

div::nth-child(2) > p { 
    color: blue; 
} 
+1

Jako [stan MDN] (https://developer.mozilla.org/en-US/docs/Web/CSS/Pseudo-elements): "Czasami zobaczysz podwójne dwukropki (: :) zamiast tylko jednego (:) To jest część CSS3 i próba rozróżnienia między pseudo-klasami i pseudoelementami. Większość przeglądarek obsługuje obie wartości. " – j08691

+0

Zgodnie z https://developer.mozilla.org/en/docs/Web/CSS/:nth-child nth-child jest selektorem pseudoklasycznym, więc powinieneś użyć pojedynczego dwukropka, a nie doble dwukropka (ponieważ nie jest to selektor psedo-element). –

+1

Dlaczego nazywasz je pseudo-selektorami, gdy dokumentacja nazywa je pseudo-klasami? –

Odpowiedz

14

Pseudoklasy (:) pozwalają projektować różne stany elementu np gdy najedziesz na niego, kiedy zostanie wyłączone, kiedy będzie pierwszym dzieckiem jego rodzica itd.

Pseudoelementy (::) pozwalają na stylizację różnych części elementu, np. pierwszy wiersz, pierwsza litera, wstawianie treści przed lub po itp.

Pierwotnie wszystkie one używały pojedynczego dwukropka, ale CSS3 wprowadził podwójny dwukropek, aby oddzielić dwa.

+2

Nie ma problemu z wstawianiem treści z jednym pseudo dwukropkiem. – Stickers

+0

Przeglądarki mogą obsługiwać pojedyncze dwukropki dla niektórych pseudoelementów, ponieważ tak zostały zdefiniowane w CSS2. Z drugiej strony, żadna przeglądarka nie powinna dopuszczać podwójnych dwukropków dla pseudo-klas, ponieważ nigdy nie zostały one zdefiniowane w ten sposób. – scronide

+1

Tak więc, podczas gdy nie mogę używać ':' i '::' w ten sam sposób ('::' zawiedzie np. ':: hover'), mógłbym użyć': 'w każdej sytuacji? –