логотип PurpleSchool
логотип PurpleSchool

Псевдоклассы invalid и valid в CSS. Полное руководство с примерами

Автор

Дмитрий Нечаев

Псевдоклассы :invalid и :valid в CSS используются для стилизации полей формы на основе их состояния валидации. Эти псевдоклассы позволяют показывать пользователям, правильно ли они заполнили форму, без использования JavaScript. Валидация происходит автоматически, основываясь на встроенных HTML-атрибутах, таких как required, pattern, type и другие. В этой статье мы подробно рассмотрим псевдоклассы :invalid и :valid, их применение и приведём примеры использования для различных ситуаций.

Что такое псевдоклассы :invalid и :valid?

Псевдокласс :invalid применяется к полям формы, которые не прошли валидацию. Это означает, что значение поля не соответствует установленным требованиям.

Псевдокласс :valid применяется к полям формы, которые прошли валидацию. Это означает, что значение поля соответствует установленным требованиям.

Пример базового использования :invalid и :valid

input:invalid {
  /* Стили для полей формы, которые не прошли валидацию */
}

input:valid {
  /* Стили для полей формы, которые прошли валидацию */
}

Пример использования псевдоклассов :invalid и :valid для изменения стилей полей ввода:

input:invalid {
  border-color: red;
}

input:valid {
  border-color: green;
}

В этом примере поля ввода, которые не прошли валидацию, будут иметь красную границу, а поля ввода, которые прошли валидацию, будут иметь зелёную границу.

Примеры использования псевдоклассов :invalid и :valid

Основные примеры

Стилизация текстовых полей

Пример:

<!DOCTYPE html>
<html lang="ru">
<head>
  <meta charset="UTF-8">
  <meta name="viewport" content="width=device-width, initial-scale=1.0">
  <style>
    input:invalid {
      border: 2px solid red; /* Красная граница для полей, не прошедших валидацию */
      background-color: #ffe0e0; /* Светло-красный фон */
    }

    input:valid {
      border: 2px solid green; /* Зелёная граница для полей, прошедших валидацию */
      background-color: #e0ffe0; /* Светло-зелёный фон */
    }
  </style>
  <title>Стилизация текстовых полей</title>
</head>
<body>
  <form>
    <label for="name">Имя (обязательное):</label>
    <input type="text" id="name" name="name" required>
    <br>
    <label for="email">Email (обязательный и валидный формат):</label>
    <input type="email" id="email" name="email" required>
  </form>
</body>
</html>

В этом примере поля ввода будут иметь красную границу и светло-красный фон, если они не прошли валидацию, и зелёную границу и светло-зелёный фон, если они прошли валидацию.

Стилизация полей с числовыми значениями

Пример:

<!DOCTYPE html>
<html lang="ru">
<head>
  <meta charset="UTF-8">
  <meta name="viewport" content="width=device-width, initial-scale=1.0">
  <style>
    input:invalid {
      border: 2px solid red; /* Красная граница для полей, не прошедших валидацию */
      background-color: #ffe0e0; /* Светло-красный фон */
    }

    input:valid {
      border: 2px solid green; /* Зелёная граница для полей, прошедших валидацию */
      background-color: #e0ffe0; /* Светло-зелёный фон */
    }
  </style>
  <title>Стилизация полей с числовыми значениями</title>
</head>
<body>
  <form>
    <label for="age">Возраст (от 18 до 65):</label>
    <input type="number" id="age" name="age" min="18" max="65" required>
  </form>
</body>
</html>

В этом примере поле ввода для возраста будет стилизовано аналогичным образом в зависимости от того, прошло ли оно валидацию.

Сложные примеры

Стилизация с использованием псевдоэлементов

Пример:

<!DOCTYPE html>
<html lang="ru">
<head>
  <meta charset="UTF-8">
  <meta name="viewport" content="width=device-width, initial-scale=1.0">
  <style>
    .form-field {
      position: relative;
      margin-bottom: 20px; /* Отступ снизу для каждого поля формы */
    }

    input:invalid {
      border: 2px solid red; /* Красная граница для полей, не прошедших валидацию */
      background-color: #ffe0e0; /* Светло-красный фон */
    }

    input:valid {
      border: 2px solid green; /* Зелёная граница для полей, прошедших валидацию */
      background-color: #e0ffe0; /* Светло-зелёный фон */
    }

    input:invalid:after {
      content: "✖"; /* Красный крестик для обозначения ошибки */
      position: absolute;
      right: 10px;
      top: 50%;
      transform: translateY(-50%);
      color: red;
      font-size: 20px;
    }

    input:valid:after {
      content: "✔"; /* Зелёная галочка для обозначения успешной валидации */
      position: absolute;
      right: 10px;
      top: 50%;
      transform: translateY(-50%);
      color: green;
      font-size: 20px;
    }
  </style>
  <title>Стилизация с использованием псевдоэлементов</title>
</head>
<body>
  <form>
    <div class="form-field">
      <label for="username">Имя пользователя (только буквы и цифры):</label>
      <input type="text" id="username" name="username" pattern="[A-Za-z0-9]+" required>
    </div>
    <button type="submit">Отправить</button>
  </form>
</body>
</html>

В этом примере к полям ввода добавлены красный крестик или зелёная галочка, используя псевдоэлементы :after, в зависимости от состояния валидации.

Комбинирование с другими псевдоклассами

Пример:

<!DOCTYPE html>
<html lang="ru">
<head>
  <meta charset="UTF-8">
  <meta name="viewport" content="width=device-width, initial-scale=1.0">
  <style>
    input:invalid:focus {
      border-color: darkred; /* Более тёмная красная граница при фокусе */
      box-shadow: 0 0 5px red; /* Тень красного цвета */
    }

    input:valid:focus {
      border-color: darkgreen; /* Более тёмная зелёная граница при фокусе */
      box-shadow: 0 0 5px green; /* Тень зелёного цвета */
    }
  </style>
  <title>Комбинирование с другими псевдоклассами</title>
</head>
<body>
  <form>
    <label for="email">Email (обязательный и валидный формат):</label>
    <input type="email" id="email" name="email" required>
  </form>
</body>
</html>

В этом примере граница и тень поля ввода изменяются при фокусе, в зависимости от состояния валидации.

Использование в реальных проектах

Стилизация формы регистрации

Пример использования псевдоклассов :invalid и :valid для стилизации полей в форме регистрации:

<!DOCTYPE html>
<html lang="ru">
<head>
  <meta charset="UTF-8">
  <meta name="viewport" content="width=device-width, initial-scale=1.0">
  <style>
    form {
      max-width: 400px;
      margin: 20px auto;
      padding: 20px;
      border: 1px solid #ccc;
      border-radius: 5px;
      background-color: #f9f9f9;
    }

    .form-field {
      margin-bottom: 15px; /* Отступ снизу для каждого поля формы */
    }

    .form-field label {
      display: block; /* Блочное отображение */
      margin-bottom: 5px; /* Отступ снизу */

 }

    .form-field input,
    .form-field textarea {
      width: 100%; /* Ширина 100% */
      padding: 8px; /* Внутренние отступы */
      box-sizing: border-box; /* Учет границы в ширину */
    }

    input:invalid,
    textarea:invalid {
      border: 2px solid red; /* Красная граница для полей, не прошедших валидацию */
      background-color: #ffe0e0; /* Светло-красный фон */
    }

    input:valid,
    textarea:valid {
      border: 2px solid green; /* Зелёная граница для полей, прошедших валидацию */
      background-color: #e0ffe0; /* Светло-зелёный фон */
    }

    .submit-button {
      background-color: #007bff; /* Фон кнопки */
      color: white; /* Цвет текста */
      padding: 10px 20px; /* Внутренние отступы */
      border: none; /* Без границы */
      border-radius: 5px; /* Скругление углов */
      cursor: pointer; /* Курсор указателя */
      display: block; /* Блочное отображение */
      width: 100%; /* Ширина 100% */
      box-sizing: border-box; /* Учет границы в ширину */
    }

    .submit-button:hover {
      background-color: #0056b3; /* Изменение фона при наведении */
    }
  </style>
  <title>Стилизация формы регистрации</title>
</head>
<body>
  <form>
    <div class="form-field">
      <label for="name">Имя:</label>
      <input type="text" id="name" name="name" required>
    </div>
    <div class="form-field">
      <label for="email">Email:</label>
      <input type="email" id="email" name="email" required>
    </div>
    <div class="form-field">
      <label for="password">Пароль:</label>
      <input type="password" id="password" name="password" required>
    </div>
    <div class="form-field">
      <label for="bio">О себе:</label>
      <textarea id="bio" name="bio" required></textarea>
    </div>
    <button type="submit" class="submit-button">Регистрация</button>
  </form>
</body>
</html>

В этом примере все обязательные поля ввода и текстовая область в форме регистрации будут стилизованы в зависимости от их состояния валидации.

Стилизация формы обратной связи

Пример использования псевдоклассов :invalid и :valid для стилизации полей в форме обратной связи:

<!DOCTYPE html>
<html lang="ru">
<head>
  <meta charset="UTF-8">
  <meta name="viewport" content="width=device-width, initial-scale=1.0">
  <style>
    form {
      max-width: 500px;
      margin: 20px auto;
      padding: 20px;
      border: 1px solid #ccc;
      border-radius: 5px;
      background-color: #f9f9f9;
    }

    .form-field {
      margin-bottom: 20px; /* Отступ снизу для каждого поля формы */
    }

    .form-field label {
      display: block; /* Блочное отображение */
      margin-bottom: 5px; /* Отступ снизу */
    }

    .form-field input,
    .form-field textarea {
      width: 100%; /* Ширина 100% */
      padding: 10px; /* Внутренние отступы */
      box-sizing: border-box; /* Учет границы в ширину */
    }

    input:invalid,
    textarea:invalid {
      border: 2px solid red; /* Красная граница для полей, не прошедших валидацию */
      background-color: #ffe0e0; /* Светло-красный фон */
    }

    input:valid,
    textarea:valid {
      border: 2px solid green; /* Зелёная граница для полей, прошедших валидацию */
      background-color: #e0ffe0; /* Светло-зелёный фон */
    }

    .submit-button {
      background-color: #28a745; /* Фон кнопки */
      color: white; /* Цвет текста */
      padding: 10px 20px; /* Внутренние отступы */
      border: none; /* Без границы */
      border-radius: 5px; /* Скругление углов */
      cursor: pointer; /* Курсор указателя */
      display: block; /* Блочное отображение */
      width: 100%; /* Ширина 100% */
      box-sizing: border-box; /* Учет границы в ширину */
    }

    .submit-button:hover {
      background-color: #218838; /* Изменение фона при наведении */
    }
  </style>
  <title>Стилизация формы обратной связи</title>
</head>
<body>
  <form>
    <div class="form-field">
      <label for="name">Имя:</label>
      <input type="text" id="name" name="name" required>
    </div>
    <div class="form-field">
      <label for="email">Email:</label>
      <input type="email" id="email" name="email" required>
    </div>
    <div class="form-field">
      <label for="message">Сообщение:</label>
      <textarea id="message" name="message" rows="5" required></textarea>
    </div>
    <button type="submit" class="submit-button">Отправить</button>
  </form>
</body>
</html>

В этом примере все обязательные поля ввода и текстовая область в форме обратной связи будут стилизованы в зависимости от их состояния валидации.

Заключение

Псевдоклассы :invalid и :valid в CSS предоставляют мощный способ для стилизации полей формы на основе их состояния валидации, улучшая взаимодействие пользователя с веб-страницей и предоставляя визуальные подсказки о правильности введённых данных. Понимание различных способов использования псевдоклассов :invalid и :valid, а также их комбинирование с другими селекторами и псевдоклассами, помогает разработчикам создавать гибкие и адаптивные стили. Экспериментируйте с различными подходами и находите оптимальные решения для ваших проектов.

Стрелочка влевоПсевдокласс is в CSS. Полное руководство с примерамиПсевдокласс indeterminate в CSS. Полное руководство с примерамиСтрелочка вправо

Постройте личный план изучения Css до уровня Middle — бесплатно!

Css — часть карты развития Frontend

  • step100+ шагов развития
  • lessons30 бесплатных лекций
  • lessons300 бонусных рублей на счет

Бесплатные лекции

Все гайды по Css

Универсальный селектор в CSS. Полное руководство с примерамиСелектор по тегу в CSS. Полное руководство с примерамиПеречисление селекторов в CSS. Полное руководство с примерамиСелектор потомка в CSS. Полное руководство с примерамиСелектор по идентификатору в CSS; Полное руководство с примерамиКомбинированные селекторы в CSS; Полное руководство с примерамиСелектор по классу в CSS; Полное руководство с примерамиСелектор по атрибуту в CSS; Полное руководство с примерами
Полное руководство по использованию свойства will-change в CSSПолное руководство по свойству transform-style в CSSУправление точкой опоры трансформаций в CSS с помощью transform-originИспользование функций CSS-трансформации; Полное руководствоПолное руководство по свойству transform-box в CSSУправление элементами с помощью свойства transform в CSSПолное руководство по свойству perspective-origin в CSSПолное руководство по свойству perspective в CSSПолное руководство по свойству backface-visibility в CSS
Псевдокласс selection. Полное руководство с примерамиПсевдоэлементы в CSS. Полное руководство с примерамиПсевдоэлемент placeholder в CSS. Полное руководство с примерамиПсевдоэлемент marker в CSS. Полное руководство с примерамиПсевдоэлемент first-line в CSS. Полное руководство с примерамиПсевдоэлемент first-letter в CSS. Полное руководство с примерамиСвойство content в CSS. Полное руководство с примерамиПсевдоэлемент before в CSS. Полное руководство с примерамиПсевдоэлемент backdrop в CSS. Полное руководство с примерамиПсевдоэлемент after в CSS. Полное руководство с примерами
Псевдокласс where в CSS. Полное руководство с примерамиПсевдокласс visited в CSS. Полное руководство с примерамиПсевдоклассы группы type в CSS. Полное руководство с примерамиПсевдокласс target в CSS. Полное руководство с примерамиПсевдокласс root в CSS. Полное руководство с примерамиПсевдокласс required в CSS. Полное руководство с примерамиПсевдоклассы в CSS. Полное руководство с примерамиПсевдокласс placeholder-shown в CSS. Полное руководство с примерамиПсевдокласс optional в CSS. Полное руководство с примерамиПсевдокласс not в CSS. Полное руководство с примерамиПсевдокласс link в CSS. Полное руководство с примерамиПсевдокласс lang в CSS. Полное руководство с примерамиПсевдокласс is в CSS. Полное руководство с примерамиПсевдоклассы invalid и valid в CSS. Полное руководство с примерамиПсевдокласс indeterminate в CSS. Полное руководство с примерамиПсевдоклассы in-range и out-of-range. Полное руководство с примерамиПсевдокласс hover в CSS. Полное руководство с примерамиПсевдокласс has в CSS. Полное руководство с примерамиПсевдокласс focus-within в CSS. Полное руководство с примерамиПсевдокласс focus-visible в CSS. Полное руководство с примерамиПсевдокласс focus в CSS. Полное руководство с примерамиПсевдокласс empty в CSS. Полное руководство с примерамиПсевдоклассы disabled и enabled в CSS. Полное руководство с примерамиПсевдокласс default в CSS. Полное руководство с примерамиПсевдоклассы группы child в CSS. Полное руководство с примерамиПсевдокласс checked в CSS. Полное руководство с примерамиПсевдокласс active в CSS. Полное руководство с примерами
Функция var в CSS. Полное руководство с примерамиФункция url в CSS. Полное руководство с примерамиФункция repeating-radial-gradient в CSS. Полное руководство с примерамиФункция repeating-linear-gradient в CSS. Полное руководство с примерамиФункция repeating-conic-gradient в CSS. Полное руководство с примерамиФункция radial-gradient в CSS. Полное руководство с примерамиФункция min в CSS. Полное руководство с примерамиФункция max в CSS. Полное руководство с примерамиФункция linear-gradient в CSS. Полное руководство с примерамиФункция image-set в CSS. Полное руководство с примерамиФункции фильтров в CSS. Полное руководство с примерамиФункция conic-gradient в CSS. Полное руководство с примерамиФункция clamp в CSS. Полное руководство с примерамиФункция calc в CSS. Полное руководство с примерамиФункция attr в CSS. Полное руководство с примерами
Вендорные префиксы в CSS. Полное руководство с примерамиКонтекст наложения в CSS. Полное руководство с примерамиСпецифичность в CSS. Полное руководство с примерамиПодход «Pixel Perfect» в верстке сайтов. Полное руководство с примерамиНаследование в CSS. Полное руководство с примерамиCSS-правило. Полное руководство с примерамиКомментарии в CSS. Полное руководство с примерамиПринцип каскада в CSS. Полное руководство с примерамиБлочная модель в CSS. Полное руководство с примерамиСвойство all в CSS. Полное руководство с примерамиПодключение стилей к HTML. Полное руководство с примерами
Полное руководство по свойству will-change в CSSПолное руководство по transition-timing-function в CSSОсновы использования transition-property в CSS; управление плавными переходамиCSS transition-duration; Полное руководство по управлению продолжительностью переходовCSS transition-delay; Полное руководство по управлению задержкой переходовCSS transition; Полное руководство по созданию плавных переходовCSS @keyframes; Полное руководство по созданию анимацийCSS animation-timing-function; Полное руководство по управлению проигрыванием анимацийCSS animation-play-state; Полное руководство по управлению анимациямиCSS animation-name; Полное руководство по заданию имени анимацииCSS animation-iteration-count; Полное руководство по управлению количеством повторений анимацииCSS animation-fill-mode; Полное руководство по управлению состоянием элементов после анимацииCSS animation-duration; Полное руководство по управлению длительностью анимацииCSS animation-direction; Полное руководство по управлению направлением анимацииCSS animation-delay; Полное руководство с примерамиCSS-анимации; Полное руководство с примерами
Открыть базу знаний

Лучшие курсы по теме

изображение курса

HTML и CSS

Антон Ларичев
иконка часов6 бесплатных уроков
иконка звёздочки рейтинга4.8
Frontend
Mobile
изображение курса

TypeScript с нуля

Антон Ларичев
иконка часов6 бесплатных уроков
иконка звёздочки рейтинга4.8
Backend
Frontend
Mobile
изображение курса

Next.js - с нуля

Антон Ларичев
иконка часов8 бесплатных уроков
иконка звёздочки рейтинга4.7
Frontend