Кратко
Скопировано:blank — псевдокласс, который совпадает с элементами, принимающими текстовый ввод (например, <input>, <textarea>), когда их значение пусто или состоит только из пробельных символов.
Отличается от :placeholder тем, что работает и без атрибута placeholder, а также считает строку из одних пробелов «пустой».
Пример
СкопированоПодсветим пустые поля и спрячем подсказку, когда пользователь что‑то ввёл.
/* Пустые поля — неконтрастная рамка и подсказка */input:blank,textarea:blank { border: 1px solid #979797;}/* Когда поле непустое — выделим основным цветом раздела */input:not(:blank),textarea:not(:blank) { border-color: #2E9AFF;}/* Текстовую подсказку показываем только для пустых */input:blank + .hint,textarea:blank + .hint { display: block; color: #979797;}input:not(:blank) + .hint,textarea:not(:blank) + .hint { display: none;}
/* Пустые поля — неконтрастная рамка и подсказка */
input:blank,
textarea:blank {
border: 1px solid #979797;
}
/* Когда поле непустое — выделим основным цветом раздела */
input:not(:blank),
textarea:not(:blank) {
border-color: #2E9AFF;
}
/* Текстовую подсказку показываем только для пустых */
input:blank + .hint,
textarea:blank + .hint {
display: block;
color: #979797;
}
input:not(:blank) + .hint,
textarea:not(:blank) + .hint {
display: none;
}
<label> Ваш ник <input type="text"> <span class="hint">Можно латиницей, 3–20 символов</span> <!-- Когда в поле только пробелы, :blank всё ещё совпадает --> <!-- Когда в поле любой непробельный символ, совпадать перестаёт --></label>
<label>
Ваш ник
<input type="text">
<span class="hint">Можно латиницей, 3–20 символов</span>
<!-- Когда в поле только пробелы, :blank всё ещё совпадает -->
<!-- Когда в поле любой непробельный символ, совпадать перестаёт -->
</label>
Как пишется
Скопировано
/* Совпадает, когда значение пустое или состоит только из пробелов */input:blank { /* ... */ }/* Обратный случай — когда есть хоть один непробельный символ */input:not(:blank) { /* ... */ }
/* Совпадает, когда значение пустое или состоит только из пробелов */
input:blank { /* ... */ }
/* Обратный случай — когда есть хоть один непробельный символ */
input:not(:blank) { /* ... */ }
Как понять
Скопировано:blankанализирует текущее значение элемента. Пустая строка и строка из одних пробельных символов — это «пусто».:placeholderзависит от наличия и отображения плейсхолдера. Поле без- shown placeholderпри пустом значении не будет:placeholder, но будет- shown :blank.:empty— про узлы в DOM (нет дочерних элементов/текста), а не про значение полей формы.- Валидность (
:invalid,/ : invalid :user) — другая плоскость: поле может быть одновременно- invalid :blankи:invalid(например,required).
Подсказки
Скопировано💡 Комбинируйте с :focus/:focus, чтобы аккуратно подсвечивать только активные пустые поля: input.
💡 Используйте :not для показа «кнопки очистки» или счётчика символов только когда поле непустое.
💡 Помните, что неразрывный пробел и другие пробельные символы тоже делают поле :blank.