
Эта серия упражнений предназначена для отработки навыков использования псевдоклассов `:not()` и `:empty` в CSS. Вам предстоит работать с готовым HTML-кодом и дополнять CSS-правила, заполняя пропущенные фрагменты. Задания построены по принципу 'от простого к сложному' и помогут вам научиться выбирать элементы, которые НЕ соответствуют определенному селектору (`:not()`), а также находить и стилизовать элементы, не имеющие дочерних узлов или текста (`:empty`). Выполняя задания, вы будете сразу видеть результат своих изменений в окне предпросмотра.
- Модуль 1: Основы CSS
- Селекторы элементов.
- Селекторы классов и идентификаторов.
- Цвет текста и фона.
- Размеры и единицы измерения в CSS.
- Семейство шрифта и базовые свойства текста.
- Стилизация текста (жирный, курсив, подчеркивание).
- Выравнивание и интервалы текста.
- Комбинированные селекторы.
- Псевдоклассы для ссылок.
- Приоритеты стилей и каскадность.
- Наследование в CSS.
- Модуль 2: Блочная модель и позиционирование
- Блочная модель CSS (box model).
- Внутренние отступы (padding).
- Внешние отступы (margin).
- Границы элементов (border).
- Сокращенная запись свойств границ.
- Радиус скругления углов (border-radius).
- Свойство display и его значения.
- Блочные элементы (display: block).
- Строчные элементы (display: inline).
- Строчно-блочные элементы (display: inline-block).
- Скрытие элементов (display: none, visibility: hidden).
- Статичное позиционирование (position: static).
- Относительное позиционирование (position: relative).
- Абсолютное позиционирование (position: absolute).
- Фиксированное позиционирование (position: fixed).
- Липкое позиционирование (position: sticky).
- Свойство z-index и порядок наложения элементов.
- Свойство float и его применение.
- Свойство clear для обтекания.
- Центрирование элементов различными способами.
- Модуль 3: Селекторы CSS продвинутый уровень
- Групповые селекторы.
- Селекторы потомков (descendant selectors).
- Дочерние селекторы (child selectors).
- Соседние селекторы (adjacent sibling selectors).
- Общие сиблинги (general sibling selectors).
- Селекторы атрибутов: точное совпадение.
- Селекторы атрибутов: частичное совпадение.
- Псевдоклассы состояний (:hover, :active, :focus, :visited).
- Псевдоклассы для форм (:checked, :disabled, :required).
- Структурные псевдоклассы (:first-child, :last-child).
- Псевдоклассы :nth-child() и :nth-of-type().
- Псевдоклассы :not() и :empty.
- Псевдоэлементы ::before и ::after.
- Псевдоэлементы ::first-letter и ::first-line.
- Псевдоэлемент ::selection.
- Псевдоэлемент ::placeholder.
- Комбинирование псевдоклассов и псевдоэлементов.
- Создание декоративных элементов с помощью псевдоэлементов.
- Модуль 4: Работа с фоном и визуальными эффектами
- Фоновый цвет (background-color).
- Фоновое изображение (background-image).
- Повторение фона (background-repeat).
- Позиционирование фона (background-position).
- Размер фона (background-size).
- Фиксация фона (background-attachment).
- Сокращенная запись свойств фона.
- Множественные фоновые изображения.
- Линейные градиенты (linear-gradient).
- Радиальные градиенты (radial-gradient).
- Конические градиенты (conic-gradient).
- Тень блока (box-shadow).
- Тень текста (text-shadow).
- Прозрачность (opacity).
- Фильтры (filter: blur, grayscale, etc.).
- Режимы смешивания (mix-blend-mode, background-blend-mode).
- Маски с mask-image.
- Формы с clip-path.
- Модуль 5: Типографика продвинутый уровень
- Межстрочное расстояние (line-height).
- Интервалы между буквами (letter-spacing).
- Интервалы между словами (word-spacing).
- Трансформация текста (text-transform).
- Декорирование текста (text-decoration).
- Перенос слов (word-break, overflow-wrap).
- Управление пробелами (white-space).
- Многоколоночный текст (columns).
- Обрезка текста (text-overflow, ellipsis).
- Вертикальное выравнивание текста (vertical-align).
- Направление текста (direction, writing-mode).
- Веб-шрифты и @font-face.
- Модуль 6: Flexbox
- Введение в Flexbox.
- Включение Flexbox (display: flex).
- Flex-контейнер и flex-direction.
- Выравнивание с justify-content.
- Выравнивание с align-items.
- Выравнивание с align-content.
- Свойство align-self для отдельных элементов.
- Свойство flex-wrap.
- Свойство flex-flow (сокращение для direction и wrap).
- Свойство flex-grow.
- Свойство flex-shrink.
- Свойство flex-basis.
- Сокращенное свойство flex.
- Порядок элементов с order.
- Сложные макеты на Flexbox.
- Вложенные flex-контейнеры.
- Создание адаптивной навигационной панели с Flexbox.
- Модуль 7: CSS Grid Layout
- Введение в Grid Layout.
- Включение Grid Layout (display: grid).
- Создание сетки: grid-template-columns.
- Создание сетки: grid-template-rows.
- Единица измерения fr.
- Функция repeat().
- Промежутки с gap, row-gap, column-gap.
- Размещение элементов: grid-column.
- Размещение элементов: grid-row.
- Сокращенная запись grid-area.
- Именованные линии и области.
- Свойство grid-template-areas.
- Автоматическое размещение элементов.
- Автоматические треки (grid-auto-rows, grid-auto-columns).
- Управление потоком элементов (grid-auto-flow).
- Выравнивание в Grid: justify-items и align-items.
- Выравнивание в Grid: justify-content и align-content.
- Выравнивание отдельного элемента (justify-self, align-self).
- Сложные макеты на Grid.
- Комбинирование Grid и Flexbox.
- Модуль 8: Трансформации и переходы
- Трансформации: translate.
- Трансформации: scale.
- Трансформации: rotate.
- Трансформации: skew.
- Комбинирование трансформаций.
- Точка трансформации с transform-origin.
- 3D-трансформации и перспектива.
- Переходы с transition-property.
- Длительность перехода с transition-duration.
- Функции плавности с transition-timing-function.
- Задержка с transition-delay.
- Сокращенное свойство transition.
- Переходы для нескольких свойств.
- Создание интерактивных элементов с переходами.
- Производительность трансформаций и переходов.
- Модуль 9: Анимации
- Создание keyframes.
- Свойство animation-name.
- Свойство animation-duration.
- Свойство animation-timing-function.
- Свойство animation-delay.
- Свойство animation-iteration-count.
- Свойство animation-direction.
- Свойство animation-fill-mode.
- Свойство animation-play-state.
- Сокращенное свойство animation.
- Множественные анимации.
- Создание сложных анимаций.
- Анимации с использованием переменных.
- Оптимизация производительности анимаций.
- Анимации и доступность.
- Модуль 10: Адаптивный дизайн
- Относительные единицы измерения (%, em, rem).
- Единицы vh и vw.
- Медиа-запросы: основы.
- Медиа-запросы: max-width и min-width.
- Медиа-запросы: ориентация устройства.
- Медиа-запросы: типы устройств и медиа-функции.
- Mobile-first подход.
- Адаптивные изображения.
- Элемент picture и атрибуты srcset/sizes.
- Адаптивная типографика.
- Адаптивная навигация.
- Адаптивные таблицы.
- Адаптивные формы.
- Отзывчивые медиа (видео, iframe).
- Тестирование адаптивности.
- Модуль 11: Формы и CSS
- Базовая стилизация input и button.
- Стилизация textarea.
- Стилизация состояний форм (:focus, :valid, :invalid).
- Стилизация placeholder.
- Кастомизация radio и checkbox с помощью CSS.
- Стилизация select и option.
- Создание кастомных выпадающих списков.
- Стилизация range input.
- Стилизация file input.
- Валидация форм и стилизация сообщений об ошибках.
- Модуль 12: Современные возможности CSS
- Переменные CSS (Custom Properties).
- Область видимости переменных.
- Функция calc().
- Свойство object-fit для изображений.
- Свойство object-position.
- Scroll Snap.
- Контейнерные запросы (Container Queries).
- Подсеточные элементы (Subgrid).
- Логические свойства (logical properties).
- CSS Houdini (введение).
- Feature Queries (@supports).
- Новые селекторы CSS (is(), where(), has()).
- Модуль 13: Практические проекты
- Создание адаптивной навигационной панели.
- Создание карточек товаров.
- Создание слайдера изображений на CSS.
- Создание табов.
- Создание дропдаун-меню.
- Создание галереи изображений с фильтрами.
- Создание анимированных иконок.
- Создание адаптивного лендинга.
- Создание тёмной темы с CSS-переменными.
- Создание анимированных кнопок.
- Создание анимированных форм.
- Создание сетки изображений с hover-эффектами.
- Создание адаптивного футера.
- Создание макета блога на CSS Grid.
- Создание адаптивного дашборда.
- Создание интерактивной формы с анимациями.
- Создание CSS-арта.
Выбор всех, кроме одного класса
В списке элементов есть один элемент с классом 'special'. Используйте псевдокласс :not(), чтобы применить стиль (красный цвет текста) ко всем элементам списка, КРОМЕ элемента с классом 'special'.
ul li:input1(input2) {
color: red;
}
<ul>
<li>Элемент 1</li>
<li class="special">Элемент 2 (особенный)</li>
<li>Элемент 3</li>
<li>Элемент 4</li>
</ul>
Стилизация непустых абзацев
Имеется несколько абзацев, некоторые из них пустые. Сделайте так, чтобы только НЕПУСТЫЕ абзацы получили фоновый цвет `#f0f0f0` и внутренние отступы `10px`. Используйте псевдокласс `:not()` в сочетании с `:empty`.
p:input1(input2) {
background-color: #f0f0f0;
padding: 10px;
}
<p>Это первый абзац с текстом.</p>
<p></p>
<p>Это второй абзац с текстом.</p>
<p> </p> <!-- Считается непустым из-за пробелов -->
<p>Третий абзац.</p>
<p></p>
Скрытие пустых сообщений об ошибках
На странице есть контейнеры для сообщений об ошибках (`<div class='error-message'>`). Некоторые из них могут быть пустыми. Скройте все ПУСТЫЕ контейнеры сообщений об ошибках, используя псевдокласс `:empty`.
input1:input2 {
display: none;
}
<div class="form-group">
<label>Имя:</label>
<input type="text">
<div class="error-message">Поле обязательно для заполнения</div>
</div>
<div class="form-group">
<label>Email:</label>
<input type="email">
<div class="error-message"></div>
</div>
<div class="form-group">
<label>Пароль:</label>
<input type="password">
<div class="error-message"></div>
</div>
Стилизация всех элементов списка, кроме первого
Нужно добавить верхнюю границу (`border-top`) ко всем элементам списка (`<li>`), кроме самого первого. Используйте псевдокласс `:not()` в сочетании с другим псевдоклассом.
ul li:input1(input2) {
border-top: 1px solid #ccc;
padding-top: 5px;
margin-top: 5px;
}
<ul>
<li>Первый пункт</li>
<li>Второй пункт</li>
<li>Третий пункт</li>
<li>Четвертый пункт</li>
</ul>
Выбор неактивных вкладок
Имеется список вкладок, одна из которых имеет класс 'active'. Примените стиль (серый цвет фона) ко всем вкладкам (`<div class='tab'>`), которые НЕ имеют класса 'active'.
.tab:input1(input2) {
background-color: #eee;
border: 1px solid #ccc;
padding: 10px;
margin-bottom: -1px; /* Для прилегания */
}
.tab.active {
background-color: #fff;
border-bottom-color: #fff;
}
<div class="tabs">
<div class="tab">Вкладка 1</div>
<div class="tab active">Вкладка 2</div>
<div class="tab">Вкладка 3</div>
</div>
Стилизация пустых ячеек таблицы
В таблице есть несколько ячеек (`<td>`), некоторые из них пустые. Задайте светло-серый фон (`#f5f5f5`) всем ПУСТЫМ ячейкам таблицы.
table {
width: 100%;
border-collapse: collapse;
}
td {
border: 1px solid #ccc;
padding: 8px;
text-align: center;
}
input1:input2 {
background-color: #f5f5f5;
}
<table>
<tr>
<td>Данные 1</td>
<td></td>
<td>Данные 3</td>
</tr>
<tr>
<td></td>
<td>Данные 5</td>
<td></td>
</tr>
</table>
Исключение полей ввода определенного типа
Нужно применить стиль (добавить рамку) ко всем элементам `<input>`, КРОМЕ тех, у которых тип 'checkbox'. Используйте `:not()` с селектором атрибута.
input:input1(input2) {
border: 2px solid blue;
margin-bottom: 10px;
padding: 5px;
display: block; /* для наглядности */
width: calc(100% - 14px); /* учтем padding и border */
}
<form>
<input type="text" placeholder="Текстовое поле">
<input type="email" placeholder="Email поле">
<input type="checkbox" id="check">
<label for="check">Чекбокс</label>
<input type="password" placeholder="Пароль">
</form>
Стилизация карточек без изображений
Есть несколько карточек (`<div class='card'>`). Некоторые содержат изображение (`<img>`), а некоторые нет. Добавьте фоновый узор (используя `background-image`) только тем карточкам, которые НЕ содержат элемента `<img>`.
.card {
border: 1px solid #ccc;
padding: 15px;
margin-bottom: 15px;
min-height: 100px; /* Для наглядности фона */
}
.card img {
max-width: 50px; /* Ограничим размер картинок */
display: block;
margin-bottom: 10px;
}
.card:input1(input2) {
background-image: url('https://naytikurs.ru/img/7.png'); /* Фоновый узор */
background-repeat: repeat;
}
<div class="card">
<img src="https://naytikurs.ru/img/1.png" alt="Image 1">
<p>Карточка с картинкой</p>
</div>
<div class="card">
<p>Карточка без картинки</p>
</div>
<div class="card">
<p>Еще одна карточка без картинки</p>
</div>
<div class="card">
<img src="https://naytikurs.ru/img/2.png" alt="Image 2">
<p>Другая карточка с картинкой</p>
</div>
Выделение непустых и неактивных элементов
В списке есть элементы (`<div class='item'>`), некоторые из них пустые, а один имеет класс 'active'. Примените стиль (зеленую рамку слева) ко всем элементам, которые одновременно НЕ являются пустыми и НЕ имеют класс 'active'.
.item:input1(input2):input3(input4) {
border-left: 5px solid green;
padding-left: 10px;
margin-bottom: 5px;
min-height: 20px; /* Для видимости пустых */
background-color: #f9f9f9; /* Фон для всех */
}
.item.active {
font-weight: bold;
}
<div class="list">
<div class="item">Элемент 1</div>
<div class="item active">Элемент 2 (активный)</div>
<div class="item"></div>
<div class="item">Элемент 3</div>
<div class="item"></div>
</div>
Исключение нескольких классов
Нужно стилизовать все параграфы (`<p>`), кроме тех, что имеют класс 'warning' или класс 'info'. Используйте один псевдокласс `:not()` со списком селекторов.
p:input1(input2) {
text-decoration: underline;
}
.warning {
color: orange;
}
.info {
color: blue;
}
<p>Обычный параграф.</p>
<p class="warning">Предупреждение!</p>
<p>Еще один обычный параграф.</p>
<p class="info">Информация.</p>
<p>Последний обычный параграф.</p>
Стилизация непустых блоков предупреждений
Есть блоки с классом `alert`. Некоторые из них пустые. Нужно добавить иконку (фоновое изображение) и отступ слева только НЕПУСТЫМ блокам `alert`. Пустые блоки должны остаться без изменений.
.alert {
border: 1px solid #f0c0c0;
margin-bottom: 10px;
min-height: 20px; /* Чтобы пустые были видны */
padding: 10px;
background-color: #f9eaea;
}
.alert:input1(input2) {
padding-left: 35px;
background-image: url('https://naytikurs.ru/img/8.png');
background-repeat: no-repeat;
background-position: 10px center;
background-size: 16px 16px;
}
<div class="alert">Важное сообщение!</div>
<div class="alert"></div>
<div class="alert">Еще одно сообщение.</div>
<div class="alert"></div>
Исключение последнего элемента из непустых
В списке есть элементы, некоторые пустые. Нужно добавить нижнюю границу всем НЕПУСТЫМ элементам списка (`<li>`), КРОМЕ последнего НЕПУСТОГО элемента.
ul li {
padding: 5px 0;
min-height: 1em; /* Для видимости пустых */
}
ul li:input1(input2):input3(input4) {
border: 1px dashed blue;
}
<ul>
<li>Элемент 1</li>
<li></li>
<li>Элемент 2</li>
<li>Элемент 3</li>
<li></li>
</ul>