Дизайн и стилизация

Состояния и контекстные селекторы

22min

Стили элемента в разных состояниях

Каждый элемент можно стилизовать в разных состояниях — например, при наведении курсора мыши, активном или в фокусе. Это позволяет создавать интересные микро-анимации, которые сделают сайт более живым и динамичным.

Состояние элемента можно добавить на вкладке Дизайн. Для этого откройте выпадающий список в разделе Состояния и выберите нужную опцию.

Document image


Чтобы стилизовать различные состояния элемента, поочерёдно выбирайте состояния из списка.

Например, изменим прозрачность элемента в состоянии «при наведении».

Document image


Если вам нужно добавить состояние для элемента с пользовательским классом, откройте настройки редактирования класса и выберите нужное состояние.

Пример: как стилизовать кнопку при наведении

Видео на YouTube
VK Видео




Контекстные селекторы: стилизация дочерних элементов

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

Для стилизации дочерних элементов используются контекстные селекторы — с их помощью можно задавать стили дочернего элемента в зависимости от состояния родителя.

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

Как стилизовать дочерний элемент в определенном состоянии родительского элемента

1. Добавьте нужное состояние родительскому элементу. Например, «При наведении».

Document image


2. Выберите дочерний элемент. На вкладке Дизайн рядом с настройкой Состояния появится желтая метка Контекст с цифрой 1. Она обозначает, что к дочернему элементу применен один контекстный селектор. 

На холсте будет отображаться желтая метка с названием родительского элемента и его состоянием, в контексте которого определяются стили (Div Block:Hover).

Document image


3. Задайте дочернему элементу нужные стили. Например, измените цвет фона.

Document image


4. Проверьте работу на предварительном просмотре. При наведении на карточку кнопка меняет цвет.

Document image


Готово! У кнопки добавлен контекстный селектор, который будет работать при наведении на карточку.

Удаление состояния у родительского элемента

Если у родительского элементам удалить состояние — то удалятся и все стили, заданные в контексте этого состояния у дочерних элементов.

Уровни вложенности контекстных селекторов

Контекстные селекторы могут иметь неограниченную вложенность, т.к. определяются уровнем вложенности элементов друг в друга. 

Посмотрим на примере контейнера с карточками:

Document image

  • Карточка — дочерний элемент для контейнера. Ее можно стилизовать в контексте контейнера — например, при наведении на контейнер у карточки появится обводка.
  • Кнопка — дочерний элемент сразу двух родителей — контейнера и карточки. Поэтому ее можно стилизовать в двух контекстах. Например, при наведении на контейнер у кнопки можно изменить цвет фона, а при наведении на карточку — добавить обводку.
  • Текст на кнопке — дочерний элемент сразу трех родителей — контейнера, карточки и кнопки. Это значит, что его стили можно менять при наведении на каждый из этих элементов.

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

Пример 1. Стилизация нескольких дочерних элементов у одного родителя

Для любого состояния родительского элемента можно стилизовать несколько дочерних элементов. 

Например, при наведении на карточку можно изменить стили для двух дочерних элементов: для текстового блока — цвет текста и для кнопки — цвет фона. 

При наведении на карточку меняется цвет текста и цвет фона кнопки
При наведении на карточку меняется цвет текста и цвет фона кнопки


Для этого выполните следующие шаги:

1. Выберите карточку и добавьте ей состояние «При наведении»

Document image


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

Document image


3. Выберите кнопку — у нее появится метка контекстного селектора. Задайте кнопке стили, которые сработают при наведении на карточку, — измените цвет фона.

Document image


Готово! Теперь при наведении на карточку меняется цвет в текстовом блоке и цвет фона кнопки.

Пример 2. Стилизация элемента в контексте родителя + собственного состояния

Вы можете менять стили элемента в зависимости от:

  1. Его собственного состояния.
  2. Состояния его родителя.
  3. Комбинации состояния родителя + собственного состояния.

Например, при использовании третьего варианта можно сделать такие эффекты для кнопки: 

  • При наведении на карточку (родительский элемент) меняется цвет фона кнопки — (как в Примере 1).
Document image

  • При наведении на саму кнопку — у нее дополнительно добавляется обводка. 
Document image


Для этого выполните следующие шаги:

1. Первые шаги — как в Примере 1. На этом этапе вы добавите стилизацию кнопки в контексте карточки.

2. Далее нужно работать с состоянием самой кнопки. Добавьте кнопке состояние «При наведении».

Document image


3. Задайте кнопке стили, которые сработают при наведении на нее, — добавьте границы.

Document image


Готово! Для кнопки работают эффекты при наведении на карточку и на саму кнопку.

Пример 3. Стилизация элемента в контексте нескольких родительских элементов

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

Например, сделаем следующие эффекты:

  • При наведении на карточку меняется цвет фона кнопки (как в Примере 1).
Document image

  • При наведении на кнопку у нее появляется обводка (как в Примере 2) и дополнительно меняется цвет текста внутри нее.
Document image


Для этого выполните следующие шаги:

1. Первые шаги — как в Примере 2. На этом этапе вы добавите стилизацию кнопки в контексте карточки + самой кнопки.

2. Далее нужно работать с текстом на кнопке. Выберите текстовый элемент внутри кнопки. У него появится метка 2 Контекст (двойной контекст), а на холсте — метки двух родительских элементов, от состояния которых будут зависеть стили текстового элемента (карточки и кнопки).

Document image


Задайте тексту стили, которые сработают при наведении на кнопку, — измените цвет текста.

Document image


Готово! Для текста внутри кнопки работают два контекстных селектора — его стили меняются при наведении на карточку и на кнопку.

Другие примеры использования контекстных селекторов

Вы можете использовать контекстные селекторы для реализации множества вариантов микро-анимаций. Можно сделать эффекты появления или скрытия элементов, изменения их размеров, перемещения и другие.

Вот два примера реализации:

1. При наведении на карточку — появление на ней ранее скрытых элементов.

Например, при наведении на карточку с товаром можно показать дополнительную информацию и кнопку, а при наведении на кнопку — изменить ее цвет.

Document image


Это можно сделать, добавив дополнительному блоку контекстный селектор, который срабатывает при наведении на карточку. Для эффекта появления блока используются свойства непрозрачности и движения.

2. Создание тултипов.

Вы можете сделать блок с подсказкой, которая появляется при наведении на иконку.

Document image


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

Подробнее о том, как реализовать эти примеры, можно посмотреть в нашем стриме на Youtube.

Плавные переходы при изменении состояний

Чтобы при изменении состояния стили менялись плавно, нужно использовать настройку Переходы. Для этого:

1. Для выбранного состояния добавьте свойство Переходы в разделе Внешний вид.

Document image


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

Document image


В чем разница между использованием контекстных селекторов и анимаций

Контекстные селекторы и анимации — это два способа для создания интерактивных эффектов. Но между ними есть отличия:

  • Эффекты. Контекстные селекторы дают возможность изменять любые css-свойства элементов — например, размер, цвет фона и текста, границы, тени и другие. Анимации позволяют делать ограниченный набор эффектов — изменение размера, наклона, масштабирования, непрозрачности, а также движение и поворот.
  • Возможность использования. Контекстные селекторы работают только для вложенных друг в друга элементов. Анимации можно настроить для любых элементов на странице.
  • Триггеры анимации. Контекстные селекторы используются только для состояний элементов (при наведении, активный, в фокусе). Анимации можно использовать для создания эффектов при клике, при появлении элемента и при скролле страницы.
  • Скорость работы сайта. Контекстные селекторы работают на чистом css, а анимации используют скрипты. Поэтому применяя контекстные селекторы, вы получите более компактный код — в результате сайт будет загружаться быстрее, чем при использовании анимаций.