: po vs. :: po

135

Czy jest jakaś funkcjonalna różnica między CSS 2.1 :aftera ::afterpseudo-selektorami CSS 3 (poza ::aftertym, że nie są obsługiwane w starszych przeglądarkach)? Czy jest jakiś praktyczny powód, aby używać nowszej specyfikacji?

Parker Ault
źródło

Odpowiedzi:

134

To pseudo- klasa vs pseudo elementu wyróżnieniem.

Z wyjątkiem ::first-line, ::first-letter, ::beforei ::after(co było wokół chwilę i może być używany z pojedynczymi dwukropkami jeśli wymagają wsparcia IE8), pseudo- elementy wymagają podwójnych średników.

Pseudoklasy same wybierają rzeczywiste elementy, możesz na przykład użyć :first-childlub :nth-of-type(n)do wybrania pierwszych lub konkretnych elementów w elemencie <p>div.
(A także stany rzeczywistych elementów, takich jak :hoveri :focus.)

Pseudoelementy dotyczą podrzędnej części elementu, takiej jak ::first-linelub ::first-letter, rzeczy, które same w sobie nie są elementami.


Właściwie lepszy opis tutaj: http://bricss.net/post/10768584657/know-your-lingo-pseudo-class-vs-pseudo-element
Również tutaj: http://www.evotech.net/blog/2007/ 05 / po-v-po-czym-jest-notacja-dwukropka /

Dominic
źródło
6
To właśnie z powodu tego rozróżnienia „pseudoselektor” (z pytania) jest terminem bezsensownym. Nigdy go nie używaj.
BoltClock
1
chyba że mówisz o nich obu. lub w kategoriach ogólnych.
Albert
1
To świetne wyjaśnienie teorii, ale czy ma to związek z kwestią praktyczną? Czy jest jakaś korzyść ze stosowania specyfikacji css3, ponieważ css2 wykona to samo zadanie - w większej liczbie przeglądarek?
DRosenfeld
1
@Dominic thanks - dziękuję za skierowanie mojego komentarza. Nie ma wątpliwości, że kwestia obsługi (przynajmniej tego) znacznika CSS3 jest obecnie prawie nieistotna.
DRosenfeld
1
@ BorisD.Teoharov W szczególności możesz używać :afteri ::afterzamiennie z identycznym zachowaniem, z wyjątkiem IE8, który, jak zauważa pytanie, wymaga pojedynczego dwukropka.
Dominic
15

Selektory CSS, podobnie jak ::afterniektóre elementy wirtualne, nie są dostępne jako jawny element w drzewie DOM. Nazywane są „ Pseudo-Elementami ” i służą do wstawiania treści przed / po elemencie (np.: ::before, ::after) Lub do zaznaczania części elementu (np ::first-letter.:). Obecnie jest tylko 5 Standardowe elementy pseudo: after, before, first-letter, first-line, selection.

Z drugiej strony, istnieją inne rodzaje selektorów zwanych „ pseudo-klas ”, które są wykorzystywane do definiowania specjalny stan elementu (jak jak :hover, :focus, :nth-child(n)). Będą one wybierać cały istniejący element w DOM. Pseudoklasy to długa lista zawierająca ponad 30 pozycji.

Początkowo (w CSS2 i CSS1) składnia z pojedynczym dwukropkiem była używana zarówno dla pseudoklas, jak i pseudoelementów. Ale w CSS3 ::składnia zastąpiła :notację dla pseudoelementów, aby lepiej je rozróżnić.

W celu zachowania kompatybilności wstecznej, dla pseudoelementów, takich jak as, akceptowana jest stara składnia dwukropka :after(wszystkie przeglądarki nadal obsługują starą składnię z jednym średnikiem). Tylko IE-8 nie obsługuje nowej składni (użyj dwukropka, jeśli chcesz obsługiwać IE8).

S.Serpooshan
źródło