Це трохи схоже на попередню відповідь, але я думав, що докладу її до кінця і пояснить повністю.
Як тільки ви встановите display: inline-block, :afterстає елементом, що не прив'язує текст. Ось чому він обгортається, і чому норап не має ефекту. Тож залиште в displayспокої.
Оскільки це текстовий елемент за замовчуванням, вміст прив’язується до попереднього тексту, якщо між ними немає пробілів. Тому не додайте жодного, але переконайтеся, що у вас є content: "", або це те саме, що display: none. Єдина проблема полягає в тому , що вони контролюються heightі widthконтролюються content, який у цьому випадку згортається. Так widthє 0, і heightце висота лінії.
Змініть розмір області за допомогою прокладки; ліворуч або праворуч, неважливо. Додайте трохи, marginщоб піктограма не торкалася тексту. Зберігайте все у відносних розмірах ( emта ptін.) Та використовуйте background-size: containтак, щоб піктограма масштабувалася разом із текстом, як смайлик або шрифт. Нарешті розташуйте піктограму там, де хочете 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;
}
Я використовував це для своїх зовнішніх посилань ( a[href*="://"]:after), і це добре працювало у Firefox, Chrome та iOS. А оскільки піктограма залишається текстовим елементом, навіть прямий текст після її прив’язки, тому будь-яка закриваюча пунктуація також обернеться.