Псевдокласс CSS `:invalid`
Базовая поддержка Широко доступен
Эта функция хорошо зарекомендовала себя и работает на множестве устройств и в разных версиях браузеров. Она доступна во всех браузерах с июля 2015 года.
:invalid — это CSS-псевдокласс, который соответствует любому элементу <form>, <fieldset>, <input> или другому элементу <form>, содержимое которого не проходит проверку валидности.
Этот псевдокласс полезен для выделения ошибок в полях формы.
Попробуйте
label {
display: block;
margin-top: 1em;
}
input:invalid {
background-color: ivory;
border: none;
outline: 2px solid red;
border-radius: 5px;
}
<form>
<label for="email">Email Address:</label>
<input id="email" name="email" type="email" value="na@me@example.com" />
<label for="secret">Secret Code: (lower case letters)</label>
<input id="secret" name="secret" type="text" value="test" pattern="[a-z]+" />
<label for="age">Your age: (18+)</label>
<input id="age" name="age" type="number" value="5" min="18" />
<label
><input name="tos" type="checkbox" required checked /> - Do you agree to
ToS?</label
>
</form>
Синтаксис
:invalid {
/* ... */
}
Специальные возможности
Красный цвет часто используется для обозначения некорректного ввода. Люди с некоторыми видами дальтонизма не смогут определить состояние поля, если оно не сопровождается дополнительным индикатором, который не полагается на цвет для передачи смысла. Обычно для этого используют поясняющий текст и/или значок.
- Пояснения MDN к WCAG, руководство 1.4
-
[Понимание критерия успешного соответствия 1.4.1 Понимание WCAG 2.0 от W3C](https://www.w3.org/TR/UNDERSTANDING-WCAG20/visual-audio-contrast-without-color.html)
Примеры
Изменение цвета элементов для отображения результатов проверки
HTML
<form>
<div class="field">
<label for="url_input">Enter a URL:</label>
<input type="url" id="url_input" />
</div>
<div class="field">
<label for="email_input">Enter an email address:</label>
<input type="email" id="email_input" required />
</div>
</form>
CSS
label {
display: block;
margin: 1px;
padding: 1px;
}
.field {
margin: 1px;
padding: 1px;
}
input:invalid {
background-color: #ffdddd;
}
form:invalid {
border: 5px solid #ffdddd;
}
input:valid {
background-color: #ddffdd;
}
form:valid {
border: 5px solid #ddffdd;
}
input:required {
border-color: maroon;
border-width: 3px;
}
input:required:invalid {
border-color: #c00000;
}
Результат
Поэтапное отображение разделов
В этом примере мы используем :invalid вместе с ~, комбинатором следующих соседей, чтобы показывать форму поэтапно: сначала отображается первый пункт, который нужно заполнить, а после его заполнения пользователем форма показывает следующий. Когда вся форма будет заполнена, пользователь сможет отправить её.
HTML
<form>
<fieldset>
<legend>Personal Information</legend>
<label for="form-name">Name</label><br />
<input type="text" name="name" id="form-name" required />
</fieldset>
<fieldset>
<legend>Contact Information</legend>
<label for="form-email">Email Address</label><br />
<input type="email" name="email" id="form-email" required />
</fieldset>
<fieldset>
<legend>Message</legend>
<label for="form-message">Message</label><br />
<textarea name="message" id="form-message" required></textarea>
</fieldset>
<button type="submit" name="send">Submit</button>
</form>
CSS
/* Hide the fieldset after an invalid fieldset */
fieldset:invalid ~ fieldset {
display: none;
}
/* Dim and disable the button while the form is invalid */
form:invalid button {
opacity: 0.3;
pointer-events: none;
}
input,
textarea {
box-sizing: border-box;
width: 100%;
font-family: monospace;
padding: 0.25em 0.5em;
}
button {
width: 100%;
border: thin solid darkgrey;
font-size: 1.25em;
background-color: darkgrey;
color: white;
}
Результат
Примечания
Переключатели
Если любой переключатель в группе является required, псевдокласс :invalid применяется ко всем переключателям в группе, если ни один из них не выбран. (Переключатели в одной группе имеют одинаковое значение атрибута name.)
Поведение Gecko по умолчанию
По умолчанию Gecko не применяет стиль к псевдоклассу :invalid. Однако он применяет стиль (красное «свечение» с использованием свойства box-shadow) к псевдоклассу :user-invalid, который применяется в некоторых случаях для :invalid.
Спецификации
| Спецификация |
|---|
| HTML # selector-invalid |
| Селекторы уровня 4 # invalid-pseudo |
Совместимость с браузерами
| Для настольных компьютеров | Для мобильных устройств | |||||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|---|
| Chrome | Edge | Firefox | Opera | Safari | Chrome для Android | Firefox для Android | Opera для Android | Safari для iOS | Samsung Internet | WebView для Android | WebView для iOS | |
invalid |
10 |
12 |
4 |
10 |
5 |
18 |
4 |
10.1 |
5 |
1.0 |
37 |
5 |
form |
40 |
79 |
13 |
27 |
9 |
40 |
14 |
27 |
9 |
4.0 |
40 |
9 |
См. также
- Другие псевдоклассы, связанные с проверкой валидности:
:required,:optional,:valid - Связанные псевдоклассы Mozilla:
:user-invalid,:-moz-submit-invalid - Проверка данных формы
- Получение состояния валидности из JavaScript
© 2005–2025 MDN contributors.
Licensed under the Creative Commons Attribution-ShareAlike License v2.5 or later.
https://developer.mozilla.org/en-US/docs/Web/CSS/Reference/Selectors/:invalid