Будучи элементом void , элемент <input>
считается пустым по определению HTML "empty", поскольку модель содержимого всех пустых элементов всегда пусто . Таким образом, они всегда будут соответствовать псевдоклассу :empty
, независимо от того, имеют ли они значение. Именно поэтому их значение представлено атрибутом в начальном теге, а не текстовым содержимым в начальном и конечном тегах.
Также из спецификации селекторов :
Псевдокласс :empty
представляет элемент, который вообще не имеет дочерних элементов. В терминах дерева документа только узлы элементов и узлы контента (такие как текстовые узлы DOM, узлы CDATA и ссылки на сущности), чьи данные имеют ненулевую длину, должны рассматриваться как влияющие на пустоту;
Следовательно, input:not(:empty)
никогда не будет соответствовать чему-либо в надлежащем HTML-документе. (Он все равно будет работать в гипотетическом документе XML, который определяет элемент <input>
, который может принимать текстовые или дочерние элементы.)
Я не думаю, что вы можете стилизовать пустые <input>
поля динамически, используя только CSS (то есть правила, которые применяются всякий раз, когда поле пустое, и не вводятся после ввода текста). Вы можете выбрать изначально пустых полей, если они имеют пустой атрибут value
(input[value=""]
) или вообще не имеют атрибута (input:not([value])
), но это все.