Это немного похоже на предыдущий ответ, но я подумал, что я конкретизирую его и объясню полностью.
Как только вы установите display: inline-block, :afterстановится элементом без привязки к тексту. Вот почему он обертывается и почему nowrap не действует. Так что оставь в displayпокое.
Поскольку по умолчанию это текстовый элемент, содержимое привязывается к предыдущему тексту, если между ними нет пробелов. Так что не добавляйте ничего, но убедитесь, что у вас есть content: "", или он такой же, как display: none. Единственная проблема в том , heightи widthнаходится под контролем content, который в данном случае свернут. Так widthэто 0и heightесть высота строки.
Измените размер области с помощью padding; влево или вправо, не имеет значения. Добавьте немного, 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. И поскольку значок остается текстовым элементом, даже прямой текст после привязки, поэтому любая закрывающая пунктуация также переносится.