CSS :après l'ajout de contenu à certains éléments
Je vais avoir de la difficulté à comprendre le comportement de la CSS :after
de la propriété. Selon la spécification (ici et ici):
Comme leurs noms l'indiquent, la
:before
et:after
pseudo-éléments de spécifier l'emplacement du contenu avant et après un élément de l'arborescence du document contenu.
Cela ne semble pas imposer des restrictions sur les éléments qui peuvent avoir un :after
(ou :before
) propriété. Cependant, il semble être la seule à travailler avec des éléments spécifiques... <p>
œuvres, <img>
n'est pas, <input>
n'est pas, <table>
n'. Je suis peut tester de plus, mais le point est fait. Notez que cela semble assez cohérent sur tous les navigateurs. Ce qui détermine si un objet peut accepter un :before
et :after
propriété?
Vous devez vous connecter pour publier un commentaire.
img
etinput
sont à la fois remplacé éléments.:before
et:after
travaillons uniquement avec des non-remplacement d'éléments.De le spec:
Avec
span:before, span:after
, le DOM ressemble à ceci:De toute évidence, cela ne fonctionnera pas avec
<img src="" />
.<before></before>
" dans la source.<before></before>
. J'aurais dit "faire semblant DOM" ou quelque chose. Le point était de montrer que:before
et:after
sont à l'intérieur de l'élément, non pas en dehors.:before
et:after
ne fonctionnent pas pour remplacer les éléments; il dit seulement qu'il “ne définissent entièrement” comment faire, et que ce sera à définir dans l'avenir (qui n'est pas arrivé jusqu'à présent). Ce qui se passe dans les DOM est pas pertinente ici. Alors que les navigateurs ne prennent pas en charge l'appui de ces pseudo-éléments pour certains éléments, c'est pas dans les specs, juste ce que les implémentations de le faire.::before
et::after
ne travaille pas pour le void (vide) d'un élément qui n'ont jamais contenu réel, avant/après qui ils pourraient s'appliquer. Mais, étonnamment, ils travaillent pourhr
élément dans presque tous les navigateurs.:before
et:after
ne sont pas nécessaire de travail pour remplacer les éléments, et les spécifications CSS ne précisez pas la façon dont ils travaillent pour eux, et le concept de l'élément remplacé est un peu vague.La spécification CSS 2.1 clairement suggère qu'ils peut de travail pour remplacer les éléments, juste dire qu'il n'est pas “entièrement définir le” comment". Cela se rapporte à la question qui a remplacé l'élément devrait avoir sa propre rendu visuel, qui n'est pas contrôlée par le CSS, alors que les pseudo-éléments doit ajouter quelque chose au contenu de l'élément. La spec ajoute que ce sera définie “plus en détail” dans un futur cahier des charges, mais cela n'a pas eu lieu jusqu'à présent.
Fournisseurs de navigateur juste décidé d'éviter les problèmes de non-application, ces pseudo-éléments pour certains éléments.
Il n'est pas clair du tout ce que “remplacé élément” signifie, et le sens semble avoir quelque peu changé. Elle est souvent interprétée comme signifiant la même comme élément vide (un élément avec
EMPTY
déclaré contenu, c'est à dire un élément qui ne peut pas avoir de contenu), mais le CSS 2.1 montre un exemple de feuille de style avec le sélecteurbr:before
(bien que les navigateurs ont ignoré cela, la mise en œuvre debr
leur propre chemin). Il peut être soutenu que de plus en plus d'éléments sont entrés dans le champ d'application de rendu CSS, au moins en partie. Par exemple, uninput
élément (y compris la police, les couleurs, etc.) est largement contrôlable avec les CSS dans les navigateurs modernes.Actuelle des navigateurs (Firefox, IE, Chrome) ne semblent pas soutenir la
:after
et:before
pseudo-éléments pour les éléments vides autre quehr
. Pourhr
, IE et Chrome placer le contenu généré à l'intérieur d'une bordée boîte, qui est la mise en œuvre dehr
; le contenu de la zone de plus grand. Firefox lieux le contenu des deux (!) pseudo-éléments à partir de la règle horizontale qui est de sa mise en œuvre dehr
. Cet écart illustre le genre de “l'interaction” des problèmes qui sont mentionnés dans le CSS 2.1.Il est souvent affirmé que ces pseudo-éléments ne peuvent pas être utilisés pour les éléments vides depuis leur code HTML définitions ne permettent pas de tout contenu. C'est une catégorie d'erreur. Les règles de syntaxe d'un langage de balisage de ne pas limiter ce que vous pouvez le faire en CSS
Pour conclure,
:after
et:before
sont actuellement pas utilisable pour les éléments vides (sauf marginalement pourhr
), mais cela est principalement dû à des implémentations et peut changer dans le futur.Éléments qui n'ont pas de balise de fermeture sont nuls éléments et ils ne peuvent pas afficher le contenu à l'intérieur d'eux:
https://www.w3.org/TR/html5/syntax.html#void-elements
Tous Blink, Webkit et le Quantum des navigateurs vous permettent de créer des éléments pseudo uniquement sur les cases à cocher, mais cela est sujet à controverse car aucune spec permettre ce comportement.
Voici un exemple:
https://codepen.io/equinusocio/pen/BOBaEM/