Псевдоклассы для форм (:checked, :disabled, :required)

Тренажер по CSS для пользователей с начальным уровнем подготовки.

Тренажер CSS

Эта серия упражнений посвящена псевдоклассам CSS, которые используются для стилизации элементов форм в зависимости от их состояния: `:checked` (для выбранных чекбоксов или радиокнопок), `:disabled` (для отключенных элементов) и `:required` (для обязательных полей). Вы будете работать с готовым HTML-кодом и CSS-стилями, в которых нужно будет заполнить пропущенные части кода. Задания построены от простого к сложному, чтобы помочь вам понять и закрепить использование этих псевдоклассов для создания интерактивных и визуально понятных форм.

Список тем

Стилизация выбранного чекбокса

В этом задании у вас есть чекбокс и его метка (label). Ваша задача — изменить стиль метки, когда соответствующий ей чекбокс выбран. Сделайте текст метки жирным при выборе чекбокса.

CSS
input[type="checkbox"]input1 + label {
  font-weight: bold;
}
HTML
<form>
  <input type="checkbox" id="option1" name="option1">
  <label for="option1">Опция 1</label>
</form>
Используйте псевдокласс `:checked` для выбора чекбокса в активном состоянии. Затем примените селектор смежного родственного элемента (+) для выбора следующего за ним элемента `label` и установите для него свойство `font-weight` в значение `bold`.
Заполнить ответами все поля
Результат
Сообщения
Выполнить
Отметить решенным
Показать подсказку

Выделение выбранной радиокнопки

Здесь представлены две радиокнопки с метками. Необходимо добавить зеленую рамку вокруг метки той радиокнопки, которая выбрана пользователем.

CSS
input[type="radio"]input1 + input2 {
  border: 2px solid green;
  padding: 2px 5px;
  border-radius: 4px;
}
HTML
<form>
  <input type="radio" id="radio1" name="radioGroup">
  <label for="radio1">Вариант A</label>
  <br>
  <input type="radio" id="radio2" name="radioGroup">
  <label for="radio2">Вариант B</label>
</form>
По аналогии с чекбоксами, используйте псевдокласс `:checked` для радиокнопок (`input[type="radio"]`). С помощью селектора смежного родственного элемента (+) выберите `label` и добавьте ему свойство `border` со значением `2px solid green`.
Заполнить ответами все поля
Результат
Сообщения
Выполнить
Отметить решенным
Показать подсказку

Стилизация неактивного поля ввода

В форме есть поле ввода, которое отключено (атрибут `disabled`). Сделайте фон этого поля светло-серым (`#eeeeee`), чтобы визуально показать его неактивность.

CSS
inputinput1 {
  background-color: #eeeeee;
  cursor: not-allowed;
}
HTML
<form>
  <label for="name">Имя:</label>
  <input type="text" id="name" name="name">
  <br>
  <label for="email">Email (неактивно):</label>
  <input type="email" id="email" name="email" disabled>
</form>
Используйте псевдокласс `:disabled` для выбора отключенных элементов ввода. Установите свойство `background-color` в значение `#eeeeee`.
Заполнить ответами все поля
Результат
Сообщения
Выполнить
Отметить решенным
Показать подсказку

Визуальное обозначение обязательных полей

В форме есть обязательное поле (атрибут `required`). Добавьте красную рамку слева (`border-left`) толщиной 4px для всех обязательных полей ввода.

CSS
inputinput1 {
  border-left: 4px solid red;
}
HTML
<form>
  <label for="username">Имя пользователя (обязательно):</label>
  <input type="text" id="username" name="username" required>
  <br>
  <label for="city">Город:</label>
  <input type="text" id="city" name="city">
</form>
Используйте псевдокласс `:required` для выбора элементов, у которых установлен атрибут `required`. Примените свойство `border-left` со значением `4px solid red`.
Заполнить ответами все поля
Результат
Сообщения
Выполнить
Отметить решенным
Показать подсказку

Изменение фона при выборе чекбокса

Сделайте так, чтобы при выборе чекбокса 'Согласен с условиями' фон следующего за ним `div` элемента становился светло-желтым (`#ffffcc`).

CSS
input[type="checkbox"]input1 + label  + input2 {
  background-color: #ffffcc;
}
HTML
<form>
  <input type="checkbox" id="terms" name="terms">
  <label for="terms">Согласен с условиями</label>
  <div style="padding: 10px; margin-top: 5px; border: 1px solid #ccc;">
    Текст условий...
  </div>
</form>
Используйте псевдокласс `:checked` для чекбокса и селектор смежного родственного элемента (+) для выбора следующего `div`. Установите для `div` свойство `background-color`.
Заполнить ответами все поля
Результат
Сообщения
Выполнить
Отметить решенным
Показать подсказку

Прозрачность для неактивной кнопки

В форме есть кнопка отправки, которая изначально неактивна. Сделайте так, чтобы неактивная кнопка была полупрозрачной (например, `opacity: 0.5`).

CSS
buttoninput1 {
  opacity: 0.5;
  cursor: not-allowed;
}
HTML
<form>
  <button type="submit" disabled>Отправить</button>
</form>
Используйте псевдокласс `:disabled` для выбора неактивной кнопки (`button`). Установите свойство `opacity` в значение `0.5`.
Заполнить ответами все поля
Результат
Сообщения
Выполнить
Отметить решенным
Показать подсказку

Добавление символа к обязательным полям

Используя псевдоэлемент `::after`, добавьте красную звездочку (*) после текста метки (`label`), связанной с обязательным полем ввода.

CSS
/* Стили для случая, когда label идет ПЕРЕД input */
inputinput1 ~ label::after {
  content: "*";
  color: red;
  margin-left: 3px;
}

/* Если бы label шла ПОСЛЕ input, код был бы таким: */
/*
labelinput1::after {
  content: "*";
  color: red;
  margin-left: 3px;
}
input:required + label::after { ... } 
*/
HTML
<form>
  <label for="reqField">Обязательное поле</label>
  <input type="text" id="reqField" name="reqField" required>
  <br>
  <label for="optField">Необязательное поле</label>
  <input type="text" id="optField" name="optField">
</form>
Сначала выберите обязательное поле (`input:required`). Затем используйте селектор общего родственного элемента (~) или смежного (+) для выбора связанной метки (`label`). После этого примените псевдоэлемент `::after` к метке и установите его `content` в значение `'*'` и `color` в `red`.
Заполнить ответами все поля
Результат
Сообщения
Выполнить
Отметить решенным
Показать подсказку

Стилизация при выборе радиокнопки (фон контейнера)

Имеются две радиокнопки внутри `div` контейнеров. Сделайте так, чтобы фон `div`, содержащего выбранную радиокнопку, становился светло-голубым (`#e0f7fa`).

CSS
input[type="radio"]input1 ~ .indicator {
  background-color: #e0f7fa; /* Светло-голубой */
  border-color: #00acc1; /* Бирюзовый */
}
HTML
<form>
  <div class="radio-option">
    <input type="radio" id="optA" name="myRadio">
    <label for="optA">Вариант A</label>
    <div class="indicator"></div>
  </div>
  <div class="radio-option">
    <input type="radio" id="optB" name="myRadio">
    <label for="optB">Вариант B</label>
    <div class="indicator"></div>
  </div>
</form>

<style>
.radio-option {
  border: 1px solid #ccc;
  padding: 10px;
  margin-bottom: 5px;
  position: relative; /* Для позиционирования индикатора, если нужно */
}
.indicator {
  /* Этот div будет менять фон */
  padding: 5px;
  margin-top: 5px;
  border: 1px dashed transparent;
  transition: background-color 0.3s ease;
}
</style>
Это немного сложнее, так как нужно стилизовать родительский `div` на основе состояния дочерней радиокнопки. Стандартными селекторами (`+`, `~`) это сделать нельзя, если `input` внутри `div`. Однако, если структура позволяет (например, `input` и стилизуемый элемент - соседи), можно использовать `+` или `~`. В данном HTML `div` является родителем. Классический CSS не имеет прямого родительского селектора. Для этого упражнения изменим структуру HTML, чтобы `div` шел *после* `input` и `label`, и воспользуемся селектором `~` или `+`. Выберите `:checked` радиокнопку и с помощью `~` или `+` примените стиль к соседнему `div`.
Заполнить ответами все поля
Результат
Сообщения
Выполнить
Отметить решенным
Показать подсказку

Изменение курсора для неактивных элементов

В форме есть несколько элементов: активное поле, неактивное поле и неактивная кнопка. Установите курсор `not-allowed` (запрещающий) для всех неактивных (`disabled`) элементов формы.

CSS
input1 {
  cursor: not-allowed;
  opacity: 0.6;
}
HTML
<form>
  <label for="activeInput">Активное поле:</label>
  <input type="text" id="activeInput">
  <br>
  <label for="disabledInput">Неактивное поле:</label>
  <input type="text" id="disabledInput" disabled>
  <br>
  <button type="button" disabled>Неактивная кнопка</button>
</form>
Используйте псевдокласс `:disabled` для выбора всех отключенных элементов. Установите для них свойство `cursor` в значение `not-allowed`.
Заполнить ответами все поля
Результат
Сообщения
Выполнить
Отметить решенным
Показать подсказку

Стилизация обязательных и сфокусированных полей

Сделайте так, чтобы обязательное поле ввода (`required`) при получении фокуса (`:focus`) имело тень (`box-shadow`) синего цвета (`0 0 5px dodgerblue`).

CSS
inputinput1input2 {
  outline: none; /* Убираем стандартный outline */
  box-shadow: 0 0 5px dodgerblue;
  border-color: dodgerblue; /* Дополнительно меняем цвет рамки */
}
HTML
<form>
  <label for="reqFocus">Обязательное поле:</label>
  <input type="text" id="reqFocus" name="reqFocus" required>
  <br>
  <label for="optFocus">Необязательное поле:</label>
  <input type="text" id="optFocus" name="optFocus">
</form>
Нужно скомбинировать два псевдокласса: `:required` и `:focus`. Соедините их без пробела (`:required:focus`), чтобы выбрать обязательный элемент, который в данный момент находится в фокусе. Примените свойство `box-shadow`.
Заполнить ответами все поля
Результат
Сообщения
Выполнить
Отметить решенным
Показать подсказку

Показ изображения при выборе чекбокса

Имеется чекбокс и скрытое изображение. Сделайте так, чтобы изображение (элемент `img`) становилось видимым (`display: block`), когда чекбокс выбран.

CSS
input[type="checkbox"]input1 ~ input2 {
  display: block!important;
}
HTML
<form>
  <input type="checkbox" id="showImage" name="showImage">
  <label for="showImage">Показать картинку</label>
  <br>
  <img src="https://naytikurs.ru/img/7.png" alt="Картинка" class="hidden-image" style="display: none; margin-top: 10px; max-width: 100px;">
</form>
Используйте псевдокласс `:checked` для чекбокса и селектор общего родственного элемента (~) для выбора следующего за ним изображения (`img`). Изначально изображение скрыто (`display: none`). Примените `display: block` к изображению, когда чекбокс `:checked`.
Заполнить ответами все поля
Результат
Сообщения
Выполнить
Отметить решенным
Показать подсказку

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

В выпадающем списке (`select`) есть несколько опций (`option`), одна из которых неактивна (`disabled`). Примените стиль `font-style: italic` и `color: #999999` к неактивной опции.

CSS
optioninput1 {
  font-style: italic;
  color: #999999;
}
HTML
<form>
  <label for="choices">Выберите вариант:</label>
  <select id="choices" name="choices">
    <option value="1">Вариант 1</option>
    <option value="2" disabled>Вариант 2 (недоступен)</option>
    <option value="3">Вариант 3</option>
  </select>
</form>
Используйте псевдокласс `:disabled` для выбора неактивного элемента `option`. Установите для него свойства `font-style` и `color`.
Заполнить ответами все поля
Результат
Сообщения
Выполнить
Отметить решенным
Показать подсказку

Комплексная стилизация формы

Примените стили к форме: обязательные поля (`input:required`) должны иметь желтоватый фон (`#fffacd`), неактивные поля (`input:disabled`) - серый фон (`#e0e0e0`) и курсор `not-allowed`, а метка выбранной радиокнопки (`input[type=radio]:checked + label`) - зеленую рамку снизу (`border-bottom: 2px solid green`).

CSS
inputinput1 {
  background-color: #fffacd; /* Желтоватый фон */
}

inputinput2 {
  background-color: #e0e0e0; /* Серый фон */
  cursor: not-allowed;
}

input[type="radio"]input3 + label {
  border-bottom: 2px solid green;
  display: inline-block; /* Чтобы border-bottom был виден */
  padding-bottom: 1px;
}
HTML
<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" disabled>
  <br>
  <div>
    <input type="radio" id="r1" name="r_group">
    <label for="r1">Радио 1</label>
  </div>
  <div>
    <input type="radio" id="r2" name="r_group">
    <label for="r2">Радио 2</label>
  </div>
</form>
Вам нужно написать три отдельных правила CSS, используя псевдоклассы `:required`, `:disabled` и `:checked` в сочетании с нужными селекторами элементов (`input`, `label`) и селектором смежного элемента (`+`).
Заполнить ответами все поля
Результат
Сообщения
Выполнить
Отметить решенным
Показать подсказку
НайтиКурс.Ру