Dies ähnelt ein wenig einer früheren Antwort, aber ich dachte, ich würde es ausarbeiten und es vollständig erklären.
Sobald Sie festlegen display: inline-block, :afterwird ein nicht textbindendes Element. Dies ist der Grund, warum es umhüllt und warum Nowrap keine Wirkung hat. Also lass es in displayRuhe.
Da es sich standardmäßig um ein Textelement handelt, wird der Inhalt an den vorherigen Text gebunden, sofern kein Leerzeichen zwischen ihnen vorhanden ist. Fügen Sie also keine hinzu, aber stellen Sie sicher, dass Sie welche haben content: "", oder es ist dasselbe wie display: none. Das einzige Problem ist heightund widthwird von der gesteuert content, die in diesem Fall zusammengebrochen ist. So widthist 0und heightist die Linienhöhe.
Ändern Sie die Größe des Bereichs mit Polsterung. links oder rechts spielt es keine Rolle. Fügen Sie ein wenig hinzu, margindamit das Symbol den Text nicht berührt. Halten Sie alles als relative Größen ( em, ptusw.) und die Verwendung background-size: contain, so dass das Symbol Waage mit dem Text, wie ein Emoji oder Schriftart. Positionieren Sie schließlich das Symbol an der gewünschten Stelle 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;
padding-right: 0.75em;
}
Ich habe dies für meine externen Links verwendet (a[href*="://"]:after ) verwendet und es hat in Firefox, Chrome und iOS einwandfrei funktioniert. Und da das Symbol ein Textelement bleibt, wird auch direkter Text nach dem Binden eingefügt, sodass auch jede schließende Interpunktion umbrochen wird.