Я пытаюсь придумать хороший стиль стилей по умолчанию для <input> в HTML5 и пробовал следующее:
input::after { display: inline; }
input:valid::after { content: ' ✓ '; color: #ddf0dd; }
input:invalid::after { content: ' ✗ '; color: #f0dddd; }
Увы, контент ::after никогда не появляется. Это не проблема с двойными или единичными двоеточиями для псевдоэлементов; Я пробовал и то, и другое. Это также не проблема с наличием псевдоэлемента и псевдокласса; Я пробовал это без :valid и :invalid. Я получаю такое же поведение в браузерах Chrome, Safari и Firefox (Firefox не имеет псевдо-классов :valid и :invalid, но я пробовал это без них.)
Псевдоэлементы отлично работают на элементах <div>, <span>, <p> и <q>, некоторые из которых являются блочными элементами, а некоторые являются встроенными.
Итак, мой вопрос: почему браузеры согласны с тем, что <input> не имеет ::after? Я не могу найти ничего в спецификации, которая указала бы это.