@romger/react-flex-layout
TypeScript icon, indicating that this package has built-in type declarations

1.0.4 • Public • Published

RG React Flex Layout

Компоненты, для flex вёрстки

Установка

npm install rg-react-flex-layout@latest --save

Использование

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

Фрагмент кода приведенный ниже демонстрирует пример использования компонента

<FlexBox className="item-list" rowWrap="space-between center" node="ul">
    <FlexBox alignSelf="flex-end" node="li">item 1</FlexBox>
    <FlexBox id="item-2" node="li">item 2</FlexBox>
    <FlexBox grow="1" node="li">item 3</FlexBox>
    <FlexBox shrink="2" node="li">item 4</FlexBox>
</FlexBox>

В данном примере, в результате будет получен элемент неупорядоченного списка, являющегося flex-контейнером c 4 дочерними flex-элементами. Родительский элемент получает в качестве props следующие свойства:

  • className - задает пользовательский css-класс,
  • rowWrap - определяет позиционирование элементов внутри контейнера,
  • node - создаваемый DOM-узел.

Первый дочерний элемент списка получает свойство alignSelf, задающее индивидуальное значение позиционирования по поперечной оси flex-контейнера, установленное во flex-end. Второй элемент неупорядоченного списка получает в качестве props свойство id задающее уникальный идентификатор DOM-элемента. Третий дочерний элемент содержит свойство grow со значением 1, устанавливающее значение свойства flex-grow равным 1. И наконец последний элемент списка содержит свойство shrink в значении 2, задающее свойство flex-shrink равное 2.

<ul class="rg-layout-row-wrap rg-align-items-space-between-center item-list">
    <li class="rg-align-self-end">item 1</li>
    <li id="item-2">item 2</li>
    <li class="rg-flex-grow-1">item 3</li>
    <li class="rg-flex-shrink-2">item 1</li>
</ul>

В результате преобразования все элементы в получили один или несколько атрибутов классов, за исключением второго элемента списка, получившего атрибут id. Большинство свойств передаваемых компоненту в результате добавляют определенный scc-класс создаваемому DOM-узлу.

Описание свойств передаваемых компоненту в качестве props

Направление осей и перенос содержимого flex-контейнера

Для определения значений направления главной и поперечной осей flex-контейнера используются свойства приведенные ниже, каждое свойство задает компоненту свой css-класс:

  • row - rg-layout-row
  • rowWrap - rg-layout-row-wrap
  • rowRev - rg-layout-row-reverse
  • rowWrapRev - rg-layout-row-wrap-reverse
  • column - rg-layout-column
  • columnWrap - rg-layout-column-wrap
  • columnRev - rg-layout-column-reverse
  • columnWrapRev - rg-layout-column-wrap-reverse

Значения данных свойств, разделенные символом пробела, определяют распределение flex-элементов по осям контейнера. Первое значение распределяет элементы по главной оси, второе по поперечной.

<FlexBox columnWrap="space-between baseline"></FlexBox>

Результат преобразования вместе с описанием полученных css-классов представлен ниже

<div class="rg-layout-column-wrap rg-align-items-space-between-baseline"></div>

.rg-layout-column-wrap {
  display: flex;
  flex-direction: column;
  flex-wrap: wrap;
}

.rg-align-items-space-between-baseline {
  justify-content: space-between;
  align-items: baseline;
}

Значения свойств могут быть указаны в сокращенном варианте.

<FlexBox columnWrap="sb bl"></FlexBox>

Результат будет тем же.

Позиционирование элементов внутри flex-контейнера

Для позиционирования элементов в описанные выше свойства передаются значения отвечающие за размещение элементов вдоль главной и поперечной осей. Полный список данных значений, сокращений и создаваемых ими css-классов приведен ниже

  • start start / start - rg-align-items-start-start
  • start center / start ctr - rg-align-items-start-center
  • start baseline / start bl - rg-align-items-start-baseline
  • start stretch - rg-align-items-start-stretch
  • start end - rg-align-items-start-end
  • space-between start / sb start - rg-align-items-space-between-start
  • space-between center / sb ctr - rg-align-items-space-between-center
  • space-between baseline / sb bl - rg-align-items-space-between-baseline
  • space-between stretch / sb stretch - rg-align-items-space-between-stretch
  • space-between end / sb end - rg-align-items-space-between-end
  • center start / ctr start - rg-align-items-center-start
  • center center / ctr - rg-align-items-center-center
  • center baseline / ctr bl - rg-align-items-center-baseline
  • center stretch / ctr stretch - rg-align-items-center-stretch
  • center end / ctr end - rg-align-items-center-end
  • stretch start - rg-align-items-stretch-start
  • stretch center / stretch ctr - rg-align-items-stretch-center
  • stretch baseline / stretch bl - rg-align-items-stretch-baseline
  • stretch stretch / stretch - rg-align-items-stretch
  • stretch end - rg-align-items-stretch-end
  • space-around start / sa start - rg-align-items-space-around-start
  • space-around center / sa ctr - rg-align-items-space-around-center
  • space-around baseline / sa bl - rg-align-items-space-around-baseline
  • space-around stretch / sa stretch - rg-align-items-space-around-stretch
  • space-around end / sa end - rg-align-items-space-around-end
  • end start - rg-align-items-end-start
  • end center / end ctr - rg-align-items-end-center
  • end baseline / end bl - rg-align-items-end-baseline
  • end stretch - rg-align-items-end-stretch
  • end end / end - rg-align-items-end-end

Индивидуальное позиционирование - свойство alignSelf

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

  • start - rg-align-self-start
  • baseline / bl - rg-align-self-baseline
  • center / ctr - rg-align-self-center
  • stretch - rg-align-self-stretch
  • end - rg-align-self-end

Позиционирование строк из элементов контейнера - свойство contentAlign

По умолчанию, значения свойств отвечающих за направления осей и перенос содержимого flex-контейнера добавляют классы, определяющие размещение элементов вдоль поперечной оси для самих flex-элементов, проще говоря - данные классы будут содержать свойство align-items

<FlexBox columnWrap="space-between baseline"></FlexBox>

<div class="rg-layout-column-wrap rg-align-items-space-between-baseline"></div>

.rg-align-items-space-between-baseline {
  justify-content: space-between;
  align-items: baseline;
}

В случае, если в компонент передано свойство contentAlign со значение true, свойство align-items будет заменено на align-content, позиционирующее содержимое контейнера, занимающее более одной строки.

<FlexBox columnWrap="space-between center" contentAlign={true}></FlexBox>

<div class="rg-layout-column-wrap rg-align-content-space-between-center"></div>

.rg-align-items-space-between-baseline {
  justify-content: space-between;
  align-content: center;
}

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

Полный список значений, используемых в связке со свойством contentAlign, их сокращенных значений, а также создаваемых css-классов представлен ниже

  • start start / start - rg-align-content-start
  • start space-between / start sb - rg-align-content-start-space-between
  • start center / start ctr - rg-align-content-start-center
  • start space-around / start sa - rg-align-content-start-space-around
  • start stretch - rg-align-content-start-stretch
  • start end - rg-align-content-start-end
  • space-between start / sb start - rg-align-content-space-between-start
  • space-between space-between / sb - rg-align-content-space-between
  • space-between center / sb center - rg-align-content-space-between-center
  • space-between space-around / sb sa - rg-align-content-space-between-space-around
  • space-between stretch / sb stretch - rg-align-content-space-between-stretch
  • space-between end / sb end - rg-align-content-space-between-end
  • center start / ctr start - rg-align-content-center-start
  • center space-between / ctr sb - rg-align-content-center-space-between
  • center center / ctr - rg-align-content-center
  • center space-around / ctr sa - rg-align-content-center-space-around
  • center stretch / ctr stretch - rg-align-content-center-stretch
  • center end / ctr end - rg-align-content-center-end
  • stretch start - rg-align-content-stretch-start
  • stretch space-between / stretch sb - rg-align-content-stretch-space-between
  • stretch center / stretch ctr - rg-align-content-stretch-center
  • stretch space-around / stretch sa - rg-align-content-stretch-space-around
  • stretch stretch / stretch - rg-align-content-stretch
  • stretch end - rg-align-content-stretch-end
  • space-around start / sa start - rg-align-content-space-around-start
  • space-around space-between / sa sb - rg-align-content-space-around-space-between
  • space-around center / sa ctr - rg-align-content-space-around-center
  • space-around space-around / sa - rg-align-content-space-around
  • space-around stretch / sa stretch - rg-align-content-space-around-stretch
  • space-around end / sa end - rg-align-content-space-around-end
  • end start - rg-align-content-end-start
  • end space-between / end sb - rg-align-content-end-space-between
  • end center / end ctr - rg-align-content-end-center
  • end space-around / end sa - rg-align-content-end-space-around
  • end stretch - rg-align-content-end-stretch
  • end end / end - rg-align-content-end

Свойства grow и shrink

Свойства grow и shrink, применяемые к элементам flex-контейнера, создают классы rg-flex-grow-# и rg-flex-shrink-# соответственно, где # - значение в диапазоне от 0 до 12 включительно.

<FlexBox grow="1" shrink="0">item</FlexBox>

Пример, описанный выше в результате будет преобразован в следующий html-код

<div class="rg-flex-grow-1 rg-flex-shrink-0">item</div>

Остальные свойства компонента

className - имя пользовательского класса, добавляемого DOM-узлу, необязательный параметр

<FlexBox className="custom-class">helloWorld</FlexBox>

<section class="custom-class">helloWorld</section>

id - уникальный идентификатор присваиваемый DOM-узлу, необязательный параметр

<FlexBox id="custom-id">helloWorld</FlexBox>

<section id="custom-id">helloWorld</section>

style - css-стили, передаваемые компоненту в качестве строки или объекта, преобразовываемые в inline-стили DOM-узла, необязательный параметр

let styles = {
    padding: '24px';
}

<FlexBox style={styles}>item</FlexBox>

<div style="padding: 24px">item</div>

node - задает тип создаваемого DOM-узла. Необязательный параметр, принимающий в качестве значения строку с названием html тега. Элемент по умолчанию - div

<FlexBox node="section">helloWorld</FlexBox>

<section>helloWorld</section>

onClick - функция обработчик клика по компоненту, необязательный параметр

<FlexBox onClick={() => console.log('click')}>helloWorld</FlexBox>

flex - необязательное свойство задающее класс flex-grow-1, применяется к элементам flex-контейнера

<FlexBox flex={true}>helloWorld</FlexBox>

<div class="flex-grow-1">helloWorld</div>

.flex-grow-1 {
  flex-grow: 1;
}

Лог изменений

2.0.6

  • noShrinkWrap теперь не перезаписывает shrink у детей

2.0.5

  • Убрали по-умолчанию shrink = 0, добавили пропс noShrinkWrap, если noShrinkWrap=true, то всем дочерним элементам проставляется shrink=0

2.0.4

  • По-умолчанию проставляется shrink = 0

2.0.3

  • Добавлена возможность добавления target и rel на элемент.

2.0.2

  • Добавлена возможность добавления href на элемент.

2.0.1

  • Исправлена ошибка в использовании свойства flex-wrap. Свойства и классы приведены в соответствие верному значению, используемому по умолчанию - nowrap. Для переноса контента теперь используются свойства rowWrap, rowWrapRev, columnWrap, columnWrapRev.

2.0.0

  • Компонент переименован во FlexBox. Свойство node задает значение DOM-элемента.
  • Удалено свойство wrap. Теперь оно является неотъемлемой часть свойств задающих направление осей flex-контейнера.
  • Компонент более не строится на базе inline-стилей. Все css-свойства задаются классами.
  • Компонент расширен и теперь предоставляет все возможные сочетания позиционирования и выравнивания, доступные во FlexBox layout.
  • Добавлена возможность передавать значения свойств grow и shrink отличные от 0 и 1. Новый диапазон поддерживаемых значений - от 0 до 12 включительно.
  • Добавлено свойство alignSelf задающее индивидуальное выравнивание flex-элемента по поперечной оси.
  • Добавлен функционал использования свойств позиционирования контента по поперечной оси контейнера - свойство contentAlign
  • Сохранена частичная совместимость с предыдущей версией. Для использования новых функций необходимо выполнить следующие действия:
    • переименовать все вызовы компонента из FlexDiv во FlexBox;
    • заменить свойство flex-shrink на shrink, заменить значение свойства.
    • удалить свойство wrap и заменить значение свойств row и column на соответствующие значения из нового функционала компонента, в случае необходимости переноса элементов на новую строку контейнера. По умолчанию свойство flex-wrap имеет значение nowrap.

Лицензия

Код и документация выпущены под лицензией MIT

Readme

Keywords

none

Package Sidebar

Install

npm i @romger/react-flex-layout

Weekly Downloads

3

Version

1.0.4

License

MIT

Unpacked Size

66.2 kB

Total Files

13

Last publish

Collaborators

  • white-soft