flexLayout
flexLayout располагает дочерние компоненты с помощью CSS-модели Flexbox.
XML-элемент |
|
|---|---|
Java-класс |
|
Основы
В примере показано, как flexDirection, alignItems, justifyContent и flexWrap управляют расположением дочерних компонентов. У flexLayout нет заданных по умолчанию ширины и высоты.
<flexLayout alignItems="CENTER" flexDirection="ROW"
justifyContent="CENTER" flexWrap="WRAP"
classNames="flex-with-gap">
<span text="Span"/>
<textField placeholder="TextField"/>
<button text="Button"/>
<button text="Button"/>
</flexLayout>
Расположение содержимого
Атрибут contentAlignment соответствует CSS-свойству align-content. Он задаёт выравнивание строк внутри flex-контейнера по поперечной оси, когда есть свободное пространство. Его действие похоже на выравнивание отдельных элементов по главной оси с помощью justify-content.
Свойство влияет только на многострочные flex-контейнеры, в которых flex-wrap имеет значение wrap или wrap-reverse. Оно не влияет на однострочный контейнер со значением по умолчанию flex-wrap: nowrap.
|
START
Строки располагаются в начале контейнера.
XML-код
<flexLayout contentAlignment="START"
css="gap: 0.5em; border: 1px solid #ccc;"
width="20em"
minHeight="10em"
flexWrap="WRAP">
<button text="Button" width="9em"/>
<button text="Button" width="9em"/>
<button text="Button" width="9em"/>
</flexLayout>
CENTER
Строки располагаются по центру контейнера.
XML-код
<flexLayout contentAlignment="CENTER"
css="gap: 0.5em; border: 1px solid #ccc;"
width="20em"
minHeight="10em"
flexWrap="WRAP">
<button text="Button" width="9em"/>
<button text="Button" width="9em"/>
<button text="Button" width="9em"/>
</flexLayout>
END
Строки располагаются в конце контейнера.
XML-код
<flexLayout contentAlignment="END"
css="gap: 0.5em; border: 1px solid #ccc;"
width="20em"
minHeight="10em"
flexWrap="WRAP">
<button text="Button" width="9em"/>
<button text="Button" width="9em"/>
<button text="Button" width="9em"/>
</flexLayout>
STRETCH
Строки растягиваются, заполняя доступное пространство по поперечной оси.
XML-код
<flexLayout contentAlignment="STRETCH"
css="gap: 0.5em; border: 1px solid #ccc;"
width="20em" minHeight="10em"
flexWrap="WRAP">
<button text="Button" width="9em" height="AUTO"/>
<button text="Button" width="9em" height="AUTO"/>
<button text="Button" width="9em" height="AUTO"/>
</flexLayout>
SPACE_BETWEEN
Строки распределяются равномерно: первая прижата к началу контейнера, последняя — к концу.
XML-код
<flexLayout contentAlignment="SPACE_BETWEEN"
css="gap: 0.5em; border: 1px solid #ccc;"
width="20em" minHeight="10em"
flexWrap="WRAP">
<button text="Button" width="9em"/>
<button text="Button" width="9em"/>
<button text="Button" width="9em"/>
</flexLayout>
SPACE_AROUND
Строки распределяются равномерно, а отступы в начале и конце равны половине расстояния между строками.
XML-код
<flexLayout contentAlignment="SPACE_AROUND"
css="gap: 0.5em; border: 1px solid #ccc;"
width="20em" minHeight="10em"
flexWrap="WRAP">
<button text="Button" width="9em"/>
<button text="Button" width="9em"/>
<button text="Button" width="9em"/>
</flexLayout>
Расширение компонента
Укажите в expand идентификатор дочернего компонента, чтобы установить для него значение flex-grow, равное 1. Благодаря этому компонент займёт оставшееся пространство по главной оси.
<flexLayout id="flexLayout"
flexDirection="COLUMN"
expand="button"
height="100%"
width="100%">
<button text="Button"/>
<button id="button" text="Button"/>
<button text="Button"/>
</flexLayout>
Расположение flex-элементов
Атрибут flexDirection сопоставляется с CSS-свойством flex-direction. Это свойство определяет направление размещения flex-элементов внутри flex-контейнера, которое определяет главную ось и направление (прямое или обратное).
ROW
Элементы отображаются горизонтально, как строка.
XML-код
<flexLayout flexDirection="ROW"
css="gap: 0.5em">
<button text="Button 1"/>
<button text="Button 2"/>
<button text="Button 3"/>
</flexLayout>
ROW_REVERSE
Элементы отображаются горизонтально, как строка в обратном порядке.
XML-код
<flexLayout flexDirection="ROW_REVERSE"
css="gap: 0.5em">
<button text="Button 1"/>
<button text="Button 2"/>
<button text="Button 3"/>
</flexLayout>
COLUMN
Элементы отображаются вертикально, как столбец.
XML-код
<flexLayout flexDirection="COLUMN">
<button text="Button 1"/>
<button text="Button 2"/>
<button text="Button 3"/>
</flexLayout>
COLUMN_REVERSE
Элементы отображаются вертикально, как столбец в обратном порядке.
XML-код
<flexLayout flexDirection="COLUMN_REVERSE">
<button text="Button 1"/>
<button text="Button 2"/>
<button text="Button 3"/>
</flexLayout>
Перенос flex-элементов
Атрибут flexWrap сопоставляется с CSS-свойством flex-wrap. Он определяет, будут ли flex-элементы располагаться на одной строке или могут переходить на несколько строк. Если разрешен перенос, он также задает направление, в котором строки будут располагаться друг над другом.
NOWRAP
Flex-элементы располагаются в одну строку, что может привести к переполнению flex-контейнера.
XML-код
<flexLayout flexWrap="NOWRAP"
css="gap: 0.5em; border: 1px solid #ccc;"
width="20em">
<button text="Button 1" width="9em"/>
<button text="Button 2" width="9em"/>
<button text="Button 3" width="9em"/>
</flexLayout>
WRAP
Flex-элементы переходят на несколько строк.
XML-код
<flexLayout flexWrap="WRAP"
css="gap: 0.5em; border: 1px solid #ccc;"
width="20em">
<button text="Button 1" width="9em"/>
<button text="Button 2" width="9em"/>
<button text="Button 3" width="9em"/>
</flexLayout>
WRAP_REVERSE
Flex-элементы переходят на несколько строк в обратном порядке.
XML-код
<flexLayout flexWrap="WRAP_REVERSE"
css="gap: 0.5em; border: 1px solid #ccc;"
width="20em">
<button text="Button 1" width="9em"/>
<button text="Button 2" width="9em"/>
<button text="Button 3" width="9em"/>
</flexLayout>
Режим JustifyContent
Атрибут justifyContent соответствует CSS-свойству justify-content. Это свойство определяет, как браузер распределяет пространство между и вокруг элементов контента вдоль главной оси flex-контейнера.
| Значение | Описание |
|---|---|
|
Элементы размещаются в начале контейнера. |
|
Элементы размещаются в центре контейнера. |
|
Элементы размещаются в конце контейнера. |
|
Элементы располагаются с равными интервалами между ними: первый прижат к началу контейнера, последний — к концу. |
|
Элементы равномерно размещаются в линии с равным пространством вокруг них. Обратите внимание, что промежутки в начале и конце равны половине размера пространства между каждым элементом. |
|
Элементы размещаются так, чтобы пространство между любыми двумя элементами (и пространство до краев) было равным. |
Примеры использования приведены в разделе Правила компоновки.
Атрибуты
В Jmix есть множество общих атрибутов, которые выполняют одну и ту же функцию для всех компонентов.
Ниже приведены атрибуты, специфичные для flexLayout.
| Имя | Описание | По умолчанию |
|---|---|---|
Задаёт выравнивание строк flex-контейнера. См. Расположение содержимого. |
|
|
Задаёт идентификатор дочернего компонента, который расширяется и занимает оставшееся пространство. См. Расширение компонента. |
— |
|
Устанавливает свойство контейнера |
|
|
Устанавливает свойство контейнера |
|
|
Устанавливает режим выравнивания содержимого, используемый этим контейнером. Смотрите Режим JustifyContent. |
|
Обработчики
В Jmix существует множество общих обработчиков, которые конфигурируются одинаково для всех компонентов.
Ниже приведены обработчики, специфичные для flexLayout:
| Имя | Описание |
|---|---|
Вызывает событие |
|
Вызывает событие |
|
Вызывает событие |