PassFront
  1. PassFront
  2. База знаний
  3. Продвинутые темы

В чем разница между :focus и :focus-within?

Продвинутые темы

`:focus` применяется к самому элементу в фокусе, а `:focus-within` — к элементу, внутри которого (в потомках) есть сфокусированный элемент.

:focus

Стилизует элемент, который сам получил фокус:

input:focus {
  border-color: blue; /* когда поле в фокусе */
}

:focus-within

Стилизует родителя, если фокус находится на нём или любом его потомке:

.form-group:focus-within {
  border-color: blue; /* когда любое поле внутри в фокусе */
}
<div class="form-group"> <!-- подсветится, когда input внутри в фокусе -->
  <label>Email</label>
  <input type="email">
</div>

Главное различие

  • :focus — сам элемент в фокусе.
  • :focus-within — элемент содержит сфокусированный (сам или потомок).

Применение :focus-within

  • Подсветить всю группу поля при фокусе инпута.
  • Раскрыть/подсветить выпадающее меню, пока фокус внутри.
  • Стилизовать контейнер формы при активном поле.
.dropdown:focus-within .menu { display: block; }

Коротко для собеседования

:focus — стиль самого сфокусированного элемента. :focus-within — стиль родителя, когда фокус на нём или его потомке. :focus-within удобен для подсветки группы/контейнера при фокусе вложенного поля или раскрытия меню, пока фокус внутри.

Другие вопросы раздела