Cette question ressemble un peu à une réponse précédente, mais j'ai pensé que je devais l'étoffer et l'expliquer en détail.
Dès que vous avez défini display: inline-block
, :after
devient un élément non lié au texte. C'est pour cela qu'il est enveloppé, et que nowrap n'a aucun effet. Laissez donc display
seul.
Comme il s'agit d'un élément de texte par défaut, le contenu se lie au texte précédent, pour autant qu'il n'y ait pas d'espace entre eux. N'en ajoutez donc pas, mais assurez-vous d'avoir content: ""
ou c'est la même chose que display: none
. Le seul problème est que height
y width
sont contrôlés par le content
qui, dans ce cas, est effondrée. Donc width
est 0
y height
est la hauteur de la ligne.
Redimensionnez la zone avec du padding ; à gauche ou à droite, cela n'a pas d'importance. Ajoutez un peu de margin
pour que l'icône ne touche pas le texte. Gardez tout en taille relative ( em
, pt
etc.), et utiliser background-size: contain
de sorte que l'icône s'adapte au texte, comme un emoji ou une police. Enfin, positionnez l'icône où vous voulez avec background-position
.
ul li.completed a:after {
content: "";
background: url('icon.svg');
background-size: contain;
background-repeat: no-repeat;
background-position: center center;
margin-left: 0.2em; /* spacing*/
padding-right: 0.75em; /* sizing */
}
Je l'ai utilisé pour mes liens externes ( a[href*="://"]:after
), et il a bien fonctionné dans Firefox, Chrome et iOS. Et comme l'icône reste un élément de texte, même le texte qui suit directement l'icône est lié, de sorte que toute ponctuation finale sera également liée.