Какие знаешь псевдоклассы
Разбор вопроса «Какие знаешь псевдоклассы» для Frontend Developer: что проверяет интервьюер, ключевые тезисы, практические примеры и частые ошибки.
Вопрос
Какие знаешь псевдоклассы
Профессия
Frontend Developer
Что хочет услышать интервьюер
Интервьюер хочет убедиться, что кандидат понимает, как использовать псевдоклассы для управления стилями элементов в зависимости от их состояния или положения в DOM. Также важно, чтобы кандидат мог привести примеры их практического применения.
Ключевые тезисы
- Псевдоклассы — это селекторы, которые позволяют выбирать элементы в зависимости от их состояния или положения в DOM.
- :hover — применяет стили, когда пользователь наводит курсор на элемент.
- :focus — применяет стили, когда элемент получает фокус (например, при клике или переходе по Tab).
- :active — применяет стили, когда элемент активирован (например, при нажатии на кнопку).
- :first-child и :last-child — выбирают первый или последний элемент внутри родителя.
- :nth-child(n) — позволяет выбирать элементы по их порядковому номеру (например, четные или нечетные).
- :not(selector) — исключает элементы, соответствующие указанному селектору.
- :checked — применяет стили к элементам формы, которые выбраны (например, чекбоксы).
- :disabled — применяет стили к отключенным элементам формы.
- :visited — применяет стили к посещенным ссылкам.
Подробный ответ
Псевдоклассы — это мощный инструмент в CSS, который позволяет выбирать элементы на основе их состояния или положения в DOM. Они начинаются с двоеточия (:), например, :hover, :focus, :active. Эти селекторы помогают создавать интерактивные и доступные интерфейсы, реагируя на действия пользователя. Например, :hover применяет стили при наведении курсора, а :focus — когда элемент получает фокус (например, поле ввода при клике или переходе по Tab).
Некоторые псевдоклассы связаны со структурой DOM. Например, :first-child и :last-child выбирают первый и последний дочерние элементы внутри родителя, а :nth-child(n) позволяет выбирать элементы по их порядковому номеру (например, четные или нечетные). Также полезны псевдоклассы для форм, такие как :checked (для выбранных чекбоксов), :disabled (для отключенных элементов) и :valid/:invalid (для валидации).
Псевдокласс :not() позволяет исключать элементы, соответствующие указанному селектору. Например, можно применить стили ко всем кнопкам, кроме тех, у которых есть класс .disabled. Важно понимать, что :not() можно комбинировать с другими селекторами для более точного выбора элементов.
Некоторые псевдоклассы, такие как :first-of-type и :last-of-type, работают аналогично :first-child и :last-child, но учитывают тип элемента. Например, :first-of-type выберет первый элемент определенного типа (например, первый <p> в родителе), даже если перед ним есть другие элементы другого типа.
Практические примеры
Пример 1
Пример 1: Стилизация кнопки при наведении и активации:
text
button:hover { background-color: #f0f0f0; }
button:active { transform: scale(0.98); }Пример 2
Пример 2: Выбор каждого третьего элемента в списке:
li:nth-child(3n) { color: red; }Пример 3
Пример 3: Стилизация неактивных полей формы:
input:disabled { opacity: 0.5; cursor: not-allowed; }Пример 4
Пример 4: Исключение определенных элементов:
div:not(.exclude) { border: 1px solid #000; }Частые ошибки
- Путаница между :first-child и :first-of-type. Например, :first-child выберет первый элемент только если он является первым ребенком родителя, а :first-of-type выберет первый элемент определенного типа, даже если перед ним есть другие элементы.
- Использование :hover для элементов, которые не могут быть наведены (например, на мобильных устройствах без курсора).
- Неправильное использование :nth-child, например, путаница между :nth-child(2n) (четные элементы) и :nth-child(2n+1) (нечетные элементы).
Связанные темы
- Псевдоэлементы (например, ::before и ::after)
- CSS-селекторы (классы, ID, атрибуты)
- Специфичность в CSS
- Доступность (a11y) и использование псевдоклассов для улучшения UX
Follow-up вопросы
Можешь объяснить разницу между :hover и :focus?
Уровень: basic
:hover срабатывает при наведении курсора, а :focus — когда элемент получает фокус (например, через Tab или клик). Например, кнопка может менять цвет при наведении (:hover) и иметь контур при фокусе (:focus).
Как использовать :nth-child() для выбора каждого третьего элемента?
Уровень: intermediate
Можно указать :nth-child(3n), где 'n' — это счетчик, начиная с 0. Например, li:nth-child(3n) выберет 3-й, 6-й, 9-й элементы и т.д.
Какие псевдоклассы связаны с формами и их состояниями?
Уровень: intermediate
Примеры: :checked (выбранные чекбоксы/радио), :disabled (отключенные поля), :valid/:invalid (валидные/невалидные данные), :required (обязательные поля). Они помогают стилизовать элементы в зависимости от взаимодействия пользователя.
Как работает :not() и можно ли комбинировать его с другими селекторами?
Уровень: advanced
:not() исключает элементы, соответствующие селектору внутри скобок. Например, div:not(.hidden) выберет все div, кроме тех, у которых класс 'hidden'. Можно комбинировать: button:not(:disabled):hover.
Зачем нужны :first-of-type и :last-of-type, если есть :first-child?
Уровень: advanced
:first-child выбирает первый элемент внутри родителя, независимо от типа, а :first-of-type — первый элемент конкретного типа (например, первый <p> среди других тегов). Это полезно в разнородных контейнерах.
Зачем нужны препроцессоры
Разбор вопроса «Зачем нужны препроцессоры» для Frontend Developer: что проверяет интервьюер, ключевые тезисы, практические примеры и частые ошибки.
Какие знаешь способы изоляции стилей
Разбор вопроса «Какие знаешь способы изоляции стилей» для Frontend Developer: что проверяет интервьюер, ключевые тезисы, практические примеры и частые ошибки.