Skip to content

Вложенные элементы

Блок часто состоит из нескольких частей: у кнопки есть иконка и текст, у карточки — заголовок и тело. Такие части объявляются директивой @element внутри блока.

ecss
@block Button {
  @param --variant Variant;

  display: inline-flex;
  align-items: center;
  gap: 8px;

  @element Icon {
    width: 1em;
    height: 1em;
  }

  @element Text {
    font-weight: 600;
  }
}

Имя элемента — в PascalCase и уникально в пределах блока. У элементов нет своих @param — они оформляют части блока, а состояние задаётся параметрами самого блока.

Элементы как суб-компоненты

В сгенерированном компоненте элементы доступны как вложенные компоненты через точку:

tsx
import { EButton } from './Button.ecss';

<EButton as="button" params={{ variant: 'primary' }}>
  <EButton.Icon>★</EButton.Icon>
  <EButton.Text>Нажми меня</EButton.Text>
</EButton>;

Суб-компоненты поддерживают проп as (по умолчанию <div>), но не принимают params.

Стили элемента в зависимости от блока

Элемент можно стилизовать по параметрам блока — для этого @element помещают внутрь @if или вложенного правила:

ecss
@block Button {
  @param --variant Variant;

  @if (--variant == "primary") {
    @element Icon {
      color: #fff;
    }
  }
}

Что дальше?