# Element query

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

Для библиотеки также нужен JS механизм для автоматического добавления классов-идентификаторов текущего размера.

В стандартную сборку модуль не включен!

В @dermis/dermis этого модуля нет. Так как используется далеко не всегда, и для его работы нужна дополнительная JS библиотека.

Поэтому в случае потребности использования его нужно устанавливать отдельно. И подключать перед dermis пакетом:

@import '@dermis/eq'
@import '@dermis/dermis'

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

Контрольные точки изменения размеров стандартизированы до: xs, sm, md, lg, xl. Это базовый вариант, с размерами опредененности еще пока нет - скорее всего нужно будет дорабатывать, но пока так.

Изменить значения стандартных контрольных точек можно в переменных $eq-size-{size}.

Значения контрольных точек доступны в виде css custom properties: --eq-size-{size}.

# Миксины

API крайне схоже с mq пакетом. Но есть основное отличие. Это переменная $base, которую нужно передавать миксинам для описания контейнера относительно размера которого будет происходить адаптация.

Для использования контейнерных выражений разработанные именованные миксины: +eq-{size} и +eq-till-{size}.

# Базовые

# +eq($size, $sign, $base: null)

Это самый базовый миксин, который используется всеми остальными. Нужно указать размер контейнера, знак-идентификатор обрыва(больше >, меньше <, итп.), и нзвание контейнера относительно которого нужно применять размер.

# +eq-{size}($base: null)

Используется для задания кодовым блокам ограничение на использование только при размере контейнера большего чем size.

Пример:

.block
  some: default-value

  +eq-sm // Изменение корневого элемента не требует указания base
    some: small-value

  &__
    &element
      +eq-sm('.block ')
        other: small-value

      +eq-md($base: '.block ') // Или передавать именованную переменную(безопаснее)
        other: medium-value

Результат:

.block { some: default-value; }
.u-eq--gte390.block { some: small-value; }
.u-eq--gte390.block .block__element { other: small-value; }
.u-eq--gte520.block .block__element { other: medium-value; }

# +eq-till-{size}($base: null)

Используется для задания блокам ограничение на использование только при размере контейнера меньшего чем size. И вообще приставка -till- означает "до" и механизмы с ее использованием не рекомендуется, так как это не mobile-first вариант разработки.

# Адаптеры

API также идентичен с mq пакетом.

Для настройки работы адаптеров существует две константы:

  • $EQ_INCLUDE_XS: false !default - Устанавливает адаптерам потребность в адаптации к малым контейнерам.
  • $EQ_INCLUDE_XL: false !default - Устанавливает адаптерам потребность в адаптации к крупным контейнерам.

Адаптеры применяют переданный код ко всем вариантам размеров экранов: xs, sm, md, lg, xl.

# +eq-adaptive($base: null, $separator: '-', $with-initial: true)

Применяется для адаптации блока в mobile-first виде. $with-initial параметр определяет есть-ли у элемента стандартное поведение без применения контейнерных выражений или нет.

Пример:

.block
  &--modifier
    +eq-adaptive
      color: green

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

Что-то типа:

.block--modifier { color: green }
.u-eq--gte390.block--modifier-esm { color: green }
.u-eq--gte520.block--modifier-emd { color: green }
.u-eq--gte780.block--modifier-elg { color: green }

# +eq-adaptive-till($base: null, $separator: '-till-', $with-initial: true)

Механизм аналогичен действию +eq-adaptive, только применяет не mobile-first max-width правила.

Пример:

.block
  &__element
    &--changed
      +eq-adaptive-till('.block ')
        color: green

Результат:

.block__element--changed { color: green }
.u-eq--lt390.block .block__element--changed-till-esm { color: green }
.u-eq--lt520.block .block__element--changed-till-emd { color: green }
.u-eq--lt780.block .block__element--changed-till-elg { color: green }

# +eq-both-adaptive($with-initial: true)

Этот миксин применяет сразу оба вышеизложеных адаптеров.

# Произвольные размеры

Для добавления произвольного размера нужно добавить примерно такой код:

$eq-size-2xl: 1300px
$eq-size-map: ('2xl': $eq-size-2xl)
// Ниже порядок размеров.
// Он нужен для верного порядка применения выражений.
// Естественно, что нужно указать всех  в списке.
$eq-size-order: 'xs' 'sm' 'md' 'lg' 'xl' '2xl'

Миксины не будут созданы автоматически, поэтому если они будут нужны - придется их добавить вручную:

@mixin eq-2xl($base: null)
  +eq(map-get($eq-size-map, '2xl'), 'gte', $base: $base)
    @content

@mixin eq-till-2xl($base: null)
  +eq(map-get($eq-size-map, '2xl'), 'lt', $base: $base)
    @content

Все миксины-адаптеры автоматически подхватят все размеры перечисленные в $eq-size-order.