: après vs :: après


134

Y a-t-il une différence fonctionnelle entre les pseudo-sélecteurs CSS 2.1 :afteret CSS 3 ::after(autre que ::afterne pas être pris en charge dans les navigateurs plus anciens)? Y a-t-il une raison pratique d'utiliser la nouvelle spécification?

Réponses:


133

C'est la distinction entre pseudo- classes et pseudo- éléments .

À l' exception de ::first-line, ::first-letter, ::beforeet ::after(qui ont été autour d' un peu de temps et peut être utilisé avec un seul si vous côlons besoin d' aide IE8), pseudo- éléments nécessitent des deux - points.

Les pseudo-classes sélectionnent elles-mêmes les éléments réels, vous pouvez utiliser :first-childou :nth-of-type(n)pour sélectionner le premier ou le spécifique <p>dans un div, par exemple.
(Et aussi des états d'éléments réels comme :hoveret :focus.)

Les pseudo-éléments ciblent une sous-partie d'un élément comme ::first-lineou ::first-letter, des choses qui ne sont pas des éléments à part entière.


En fait, meilleure description ici: http://bricss.net/post/10768584657/know-your-lingo-pseudo-class-vs-pseudo-element
Aussi ici: http://www.evotech.net/blog/2007/ 05 / after-v-after-what-is-double-colon-notation /


6
C'est à cause de cette distinction que «pseudo-sélecteur» (de la question) est un terme absurde. Ne l'utilisez jamais.
BoltClock

1
à moins que vous ne parliez des deux. ou en termes génériques.
albert

1
C'est une excellente explication de la théorie, mais cela a-t-il un rapport avec la question pratique? Y a-t-il réellement un avantage à utiliser la spécification css3 étant que le css2 fera le même travail - dans plus de navigateurs?
DRosenfeld

1
@Dominic merci - J'apprécie votre réponse à mon commentaire. Il ne fait aucun doute que le problème de la prise en charge de (au moins cette) balise CSS3 est presque un problème pour le moment.
DRosenfeld

1
@ BorisD.Teoharov Plus précisément, vous pouvez utiliser :afteret de ::aftermanière interchangeable avec un comportement identique à l'exception d'IE8 qui, comme le note la question, nécessite le simple deux-points.
Dominic

14

Les sélecteurs CSS comme ::aftercertains éléments virtuels ne sont pas disponibles en tant qu'élément explicite dans l'arborescence DOM. Ils sont appelés « pseudo-éléments » et sont utilisés pour insérer une partie du contenu avant / après un élément (par exemple: ::before, ::after) ou de sélectionner une partie d'un élément (par exemple: ::first-letter). À l' heure actuelle il n'y a que 5 éléments pseudo standard: after, before, first-letter, first-line, selection.

D'autre part, il existe d' autres types de sélecteurs appelés « pseudo-classes » qui sont utilisés pour définir un état particulier d'un élément (comme comme :hover, :focus, :nth-child(n)). Celles-ci sélectionneront l'ensemble d'un élément existant dans DOM. Les pseudo-classes sont une longue liste de plus de 30 éléments.

Initialement (en CSS2 et CSS1), la syntaxe à simple deux-points était utilisée à la fois pour les pseudo-classes et les pseudo-éléments. Mais, en CSS3, la ::syntaxe a remplacé la :notation des pseudo-éléments pour mieux les distinguer.

Pour des raisons de compatibilité ascendante, l'ancienne syntaxe à simple deux-points est acceptable pour les pseudo-éléments comme as :after(les navigateurs prennent toujours en charge l'ancienne syntaxe avec un point-virgule). Seul IE-8 ne prend pas en charge la nouvelle syntaxe (utilisez des points simples si vous souhaitez prendre en charge IE8).

En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.