Des choses comme a:link
ou div::after
...
Les informations sur la différence semblent rares.
css
css-selectors
pseudo-class
pseudo-element
tybro0103
la source
la source
Réponses:
La recommandation du sélecteur CSS 3 est assez claire sur les deux, mais je vais quand même essayer de montrer les différences.
Pseudo-classes
Description officielle
La source
Qu'est-ce que ça veut dire?
La nature importante des pseudo-classes est énoncée dans la toute première phrase: "le concept de pseudo-classe [...] permet la sélection " . Il permet à l'auteur d'une feuille de style de différencier les éléments en fonction d'informations qui «se trouvent en dehors de l'arborescence du document» , par exemple l'état actuel d'un lien (
:active
,:visited
). Ceux-ci ne sont enregistrés nulle part dans le DOM, et il n'existe aucune interface DOM pour accéder à ces options.Par contre,
:target
on peut y accéder via la manipulation DOM (vous pouvez utiliserwindow.location.hash
pour trouver l'objet avec JavaScript), mais cela "ne peut pas être exprimé en utilisant les autres sélecteurs simples" .Donc, fondamentalement, une pseudo-classe affinera l'ensemble des éléments sélectionnés comme n'importe quel autre sélecteur simple dans une séquence de sélecteurs simples . Notez que tous les sélecteurs simples dans une séquence de sélecteurs simples seront évalués en même temps. Pour une liste complète des pseudo-classes, consultez la recommandation du sélecteur CSS3.
Exemple
L'exemple suivant
#ccc
colorera toutes les lignes paires en gris ( ), toutes les lignes inégales qui ne peuvent pas être divisées par 5 en blanc et une ligne sur deux en magenta.Pseudo-éléments
Description officielle
La source
Qu'est-ce que ça veut dire?
La partie la plus importante ici est que "les pseudo-éléments permettent aux auteurs de se référer à [..] des informations autrement inaccessibles " et qu'ils "peuvent également fournir aux auteurs un moyen de faire référence à un contenu qui n'existe pas dans le document source (par exemple, le
::before
et les::after
pseudo-éléments donnent accès au contenu généré). ". La plus grande différence est qu'ils créent en fait un nouvel élément virtuel sur lequel des règles et même des sélecteurs de pseudo-classes peuvent être appliqués. Ils ne filtrent pas les éléments, ils filtrent essentiellement le contenu (::first-line
,::first-letter
) et l'enveloppent dans un conteneur virtuel, que l'auteur peut styliser comme il le souhaite (enfin, presque).Par exemple, le
::first-line
pseudo-élément ne peut pas être reconstruit avec JavaScript, car il dépend fortement de la police actuellement utilisée, de la taille des polices, de la largeur des éléments, des éléments flottants (et probablement de l'heure de la journée). Eh bien, ce n'est pas tout à fait vrai: on pourrait toujours calculer toutes ces valeurs et extraire la première ligne, mais cela est une activité très lourde.Je suppose que la plus grande différence est que "un seul pseudo-élément peut apparaître par sélecteur" . La note dit que cela pourrait être sujet à changement, mais à partir de 2012, je ne pense pas que nous voyions un comportement différent à l'avenir ( c'est toujours en CSS4 ).
Exemple
L'exemple suivant ajoutera une balise de langue à chaque citation d'une page donnée en utilisant la pseudo-classe
:lang
et le pseudo-élément::after
:TL; DR
Les pseudo-classes agissent comme de simples sélecteurs dans une séquence de sélecteurs et classent ainsi les éléments sur des caractéristiques non-présentationnelles, les pseudo-éléments créent de nouveaux éléments virtuels.
Références
W3C
la source
:not(.someclass):nth-child(even)
cela ne signifie pas filtrer les éléments qui n'en ont pas.someclass
, et parmi les éléments restants, filtrer les occurrences paires. Au lieu de cela, il représente tout élément qui est à la fois:not(.someclass)
et:nth-child(even)
de son parent en même temps. Des explications plus détaillées peuvent être trouvées dans cette réponse et cette réponse .Une pseudo-classe filtre les éléments existants.
a:link
signifie tous les<a>
s qui sont:link
.Un pseudo-élément est un nouvel élément faux.
div::after
signifie des éléments non existants après l'<div>
art.::selection
est un autre exemple de pseudo-élément.Cela ne signifie pas tous les éléments sélectionnés; cela signifie la plage de contenu sélectionnée, qui peut s'étendre sur des portions de plusieurs éléments.
la source
div::after
soit un enfant dediv
, se produisant après son contenu plutôt que l'élément lui-même.Brève description qui m'a aidé à comprendre la différence:
la source
À partir de la documentation Sitepoint:
la source
Voici la réponse simple:
Nous utilisons une pseudo-classe lorsque nous devons appliquer des css en fonction de l' état d'un élément. Tel que:
:hover
):focus
). etc.Nous utilisons un pseudo-élément lorsque nous devons appliquer css à des parties spécifiques d'un élément ou à un contenu nouvellement inséré . Tel que:
::first-letter
)::before
,::after
)Voici l'exemple des deux:
la source
Une réponse conceptuelle:
Un pseudo-élément fait référence à des éléments qui font partie du document, mais vous ne le savez pas encore. Par exemple la première lettre. Avant, vous n'aviez que du texte. Vous avez maintenant une première lettre que vous pouvez cibler. C'est un nouveau concept, mais qui a toujours fait partie du document. Cela comprend également des choses comme
::before
; bien qu'il n'y ait pas de contenu réel là-bas, le concept de quelque chose avant autre chose était toujours là - maintenant vous le spécifiez.Une pseudo-classe est l'état de quelque chose dans le DOM. Tout comme une classe est une balise que vous associez à un élément, une pseudo-classe est une classe qui est associée par le navigateur ou le DOM ou autre, généralement en réponse à un changement d'état. Lorsqu'un utilisateur visite un lien - ce lien peut prendre l'état de «visité». Vous pouvez imaginer le navigateur appliquant la classe «visitée» à l'élément Anchor.
:visited
serait alors comment vous sélectionnez pour cette pseudo-classe.la source
Pseudo-classe
Une pseudo-classe est un moyen de sélectionner certaines parties d'un document HTML, basé en principe non sur l'arborescence du document HTML elle-même et ses éléments ou sur des caractéristiques comme le nom, les attributs ou le contenu, mais sur d'autres conditions fantômes comme le codage de la langue ou l'état dynamique d'un élément.
États dynamiques définis par pseudo-classe d'origine d'un élément qui sont entrés et sortis au fil du temps, ou par l'intervention de l'utilisateur. CSS2 a développé ce concept pour inclure des composants de documents conceptuels virtuels ou des parties inférées de l'arborescence de documents, par exemple le premier enfant. Les pseudo-classes fonctionnent comme si des classes fantômes étaient ajoutées à divers éléments.
RESTRICTIONS: Contrairement aux pseudo-éléments, les pseudo-classes peuvent apparaître n'importe où dans la chaîne de sélecteurs.
Exemple de code de pseudo-classe:
Une page qui montre un rendu du code de pseudo-classe ci-dessus
Pseudo-éléments
Les PSEUDO-ELEMENTS sont utilisés pour adresser des sous-parties d'éléments. Ils vous permettent de définir le style d'une partie du contenu d'un élément au-delà de ce qui est spécifié dans les documents. En d'autres termes, ils permettent de définir des éléments logiques qui ne sont pas réellement dans l'arborescence des éléments du document. Les éléments logiques permettent de traiter la structure sémantique implicite dans les sélecteurs CSS.
RESTRICTIONS: Les pseudo-éléments ne peuvent être appliqués qu'à des contextes externes et au niveau du document - pas aux styles en ligne. Les pseudo-éléments sont limités là où ils peuvent apparaître dans une règle. Ils ne peuvent apparaître qu'à la fin d'une chaîne de sélecteurs (après l'objet du sélecteur). Ils doivent venir après tous les noms de classe ou d'ID trouvés dans le sélecteur. Un seul pseudo-élément peut être spécifié par sélecteur. Pour adresser plusieurs pseudo-éléments sur une seule structure d'élément, plusieurs instructions de sélection / déclaration de style doivent être effectuées.
Les pseudo-éléments peuvent être utilisés pour des effets typographiques courants tels que les majuscules initiales et les lettrines. Ils peuvent également adresser le contenu généré qui n'est pas dans le document source (avec le "avant" et "après"). Un exemple de feuille de style de certains pseudo-éléments avec des propriétés et des valeurs ajoutées suit.
/ * La règle suivante sélectionne la première lettre d'un titre 1 et définit la police sur 2em, cursive, sur fond vert. La première lettre sélectionne la première lettre / caractère rendu pour un élément de niveau bloc. * /
Sources: Lien
la source
En bref, des pseudo-classes sur MDN:
Et, à partir de Pseudo-éléments sur MDN:
la source