
Макет flexbox упрощает процесс разработки гибкой и адаптивной структуры макета страницы без использования float или ручного позиционирования. Он позволяет автоматически упорядочивать отзывчивые элементы внутри контейнера в зависимости от размера области просмотра. В этой статье мы узнаем о различных вспомогательных классах, которые Vuetify предоставляет для управления макетом flex-контейнеров с выравниванием, выравниванием, переносом и т. д.
Контейнер Vuetify Flexbox
Применение вспомогательного класса d-flex к элементу устанавливает его display в flex, что превращает его в контейнер flexbox, преобразуя его прямые дочерние элементы во flex-элементы. Как мы увидим позже, мы можем настроить взаимодействие этих дочерних элементов с помощью дополнительных утилит свойств flex.
<template> <v-app> <div class="ma-4"> <v-card class="d-flex pa-2" outlined tile > <div>A flexbox container</div> </v-card> </div> </v-app> </template><script> export default { name: 'App', }; </script>

Встроенный гибкий
Класс d-inline-flex превращает элемент во встроенный контейнер flexbox.
<template> <v-app> <div class="ma-4"> <v-card class="d-inline-flex pa-2" outlined tile > <div>Inline flexbox container</div> </v-card> </div> </v-app> </template><script> export default { name: 'App', }; </script>

Мы также можем настроить утилиты flex для применения только к определенным точкам останова со следующими классами:
d-sm-flexd-sm-inline-flexd-md-flexd-md-inline-flexd-lg-flexd-lg-inline-flexd-xl-flexd-xl-inline-flex
Vuetify Flex Направление
Vuetify предоставляет вспомогательные классы flex для указания направления flex-элементов внутри контейнера. Эти классы изменяют свойство CSS flex-direction элемента. Они есть:
- гибкий ряд
- flex-row-reverse
- flex-колонка
- flex-столбец-обратный
flex-row и flex-row-reverse
Вспомогательный класс flex-row отображает гибкие элементы горизонтально в виде строки. flex-row-reverse делает то же самое, но в обратном порядке:
<template> <v-app> <div class="ma-4"> <v-card class="d-flex flex-row mb-6" color="grey lighten-4" flat tile > <v-card v-for="n in 3" :key="n" class="pa-2" outlined tile > Flex item {{ n }} </v-card> </v-card> <v-card class="d-flex flex-row-reverse" color="grey lighten-4" flat tile > <v-card v-for="n in 3" :key="n" class="pa-2" outlined tile > Flex item {{ n }} </v-card> </v-card> </div> </v-app> </template><script> export default { name: 'App', }; </script>

flex-column и flex-column-reverse
Вспомогательный класс flex-column отображает гибкие элементы вертикально в столбце. flex-column-reverse делает то же самое, но в обратном порядке:
<template> <v-app> <div class="ma-4"> <div class="d-flex flex-column mb-6"> <v-card v-for="n in 3" :key="n" class="pa-2" outlined tile > Flex item {{ n }} </v-card> </div> <div class="d-flex flex-column-reverse"> <v-card v-for="n in 3" :key="n" class="pa-2" outlined tile > Flex item {{ n }} </v-card> </div> </div> </v-app> </template><script> export default { name: 'App', }; </script>

Существуют также адаптивные варианты этих классов, которые устанавливают свойство flex-direction для определенных точек останова.
flex-sm-rowflex-sm-row-reverseflex-sm-columnflex-sm-column-reverseflex-md-rowflex-md-row-reverseflex-md-columnflex-md-column-reverseflex-lg-rowflex-lg-row-reverseflex-lg-columnflex-lg-column-reverseflex-xl-rowflex-xl-row-reverseflex-xl-columnflex-xl-column-reverse
Украсьте с помощью Vuetify
Полное руководство по созданию элегантных веб-приложений с помощью платформы Vuetify Material Design.

Получите бесплатную копию здесь.
Классы Flex Justify
Мы можем изменить свойство justify-content flex гибкого контейнера с помощью классов flex justify из Vuetify. justify-content изменяет элементы flexbox по оси x или оси y для flex-direction из row или column соответственно. Вспомогательные классы могут установить justify-content в start (браузер по умолчанию), end, center, space-between или space-around. Они есть:
justify-startjustify-endjustify-centerjustify-space-betweenjustify-space-around
<template> <v-app> <div class="ma-4"> <v-card class="d-flex justify-start mb-6" color="grey lighten-4" flat tile > <v-card v-for="n in 3" :key="n" class="pa-2" outlined tile > justify-start </v-card> </v-card><v-card class="d-flex justify-end mb-6" color="grey lighten-4" flat tile > <v-card v-for="n in 3" :key="n" class="pa-2" outlined tile > justify-end </v-card> </v-card><v-card class="d-flex justify-center mb-6" color="grey lighten-4" flat tile > <v-card v-for="n in 3" :key="n" class="pa-2" outlined tile > justify-center </v-card> </v-card><v-card class="d-flex justify-space-between mb-6" color="grey lighten-4" flat tile > <v-card v-for="n in 3" :key="n" class="pa-2" outlined tile > justify-space-between </v-card> </v-card><v-card class="d-flex justify-space-around mb-6" color="grey lighten-4" flat tile > <v-card v-for="n in 3" :key="n" class="pa-2" outlined tile > justify-space-around </v-card> </v-card> </div> </v-app> </template><script> export default { name: 'App', }; </script>

Существуют также адаптивные варианты этих классов, которые устанавливают свойство justify-content для определенных точек останова:
justify-sm-startjustify-sm-endjustify-sm-centerjustify-sm-space-betweenjustify-sm-space-aroundjustify-md-startjustify-md-endjustify-md-centerjustify-md-space-betweenjustify-md-space-aroundjustify-lg-startjustify-lg-endjustify-lg-centerjustify-lg-space-betweenjustify-lg-space-aroundjustify-xl-startjustify-xl-endjustify-xl-centerjustify-xl-space-betweenjustify-xl-space-around
Классы Vuetify Flex Align
У нас также есть служебные классы flex от Vuetify, которые изменяют свойство CSS align-items контейнера flex. align-items изменяет элементы flexbox по оси Y или X для направления flex-направления row или column соответственно. Вспомогательные классы могут установить align-items в start, end, center, baseline или stretch (по умолчанию в браузере). Они есть:
align-startalign-endalign-centeralign-baselinealign-stretch
<template> <v-app> <div class="ma-4"> <v-card class="d-flex align-start mb-6" color="grey lighten-2" flat height="100" tile > <v-card v-for="n in 3" :key="n" class="pa-2" outlined tile > align-start </v-card> </v-card><v-card class="d-flex align-end mb-6" color="grey lighten-2" flat height="100" tile > <v-card v-for="n in 3" :key="n" class="pa-2" outlined tile > align-end </v-card> </v-card><v-card class="d-flex align-center mb-6" color="grey lighten-2" flat height="100" tile > <v-card v-for="n in 3" :key="n" class="pa-2" outlined tile > align-center </v-card> </v-card><v-card class="d-flex align-baseline mb-6" color="grey lighten-2" flat height="100" tile > <v-card v-for="n in 3" :key="n" class="pa-2" outlined tile > align-baseline </v-card> </v-card><v-card class="d-flex align-stretch mb-6" color="grey lighten-2" flat height="100" tile > <v-card v-for="n in 3" :key="n" class="pa-2" outlined tile > align-stretch </v-card> </v-card> </div> </v-app> </template><script> export default { name: 'App', }; </script>

Они также являются адаптивными вариантами этих классов, которые устанавливают свойство align-items для определенных точек останова:
align-sm-startalign-sm-endalign-sm-centeralign-sm-baselinealign-sm-stretchalign-md-startalign-md-endalign-md-centeralign-md-baselinealign-md-stretchalign-lg-startalign-lg-endalign-lg-centeralign-lg-baselinealign-lg-stretchalign-xl-startalign-xl-endalign-xl-centeralign-xl-baselinealign-xl-stretch
Самостоятельные классы Flex Align
Мы используем вспомогательные классы flex align для изменения свойства align-self flex элемента. align-self изменяет элементы flexbox в x-axis или y-axis для flex-direction из row или column соответственно. Вспомогательные классы могут установить align-self в start, end, center, baseline или stretch (по умолчанию в браузере). Они есть:
align-self-startalign-self-endalign-self-centeralign-self-baselinealign-self-stretch
<template> <v-app> <div class="ma-4"> <v-card v-for="j in justify" :key="j" class="d-flex mb-6" color="grey lighten-2" flat height="100" tile > <v-card v-for="n in 3" :key="n" class="pa-2" :class="[n === 2 && `align-self-${j}`]" outlined tile > {{ n === 2 ? 'Aligned flex item' : 'Flex item' }} </v-card> </v-card> </div> </v-app> </template><script> export default { name: 'App', data: () => ({ justify: [ 'start', 'end', 'center', 'baseline', 'auto', 'stretch', ], }), }; </script>

Vuetify также предоставляет адаптивные варианты этих классов, которые устанавливают свойство align-self для определенных точек останова:
align-self-sm-startalign-self-sm-endalign-self-sm-centeralign-self-sm-baselinealign-self-sm-autoalign-self-sm-stretchalign-self-md-startalign-self-md-endalign-self-md-centeralign-self-md-baselinealign-self-md-autoalign-self-md-stretchalign-self-lg-startalign-self-lg-endalign-self-lg-centeralign-self-lg-baselinealign-self-lg-autoalign-self-lg-stretchalign-self-xl-startalign-self-xl-endalign-self-xl-centeralign-self-xl-baselinealign-self-xl-autoalign-self-xl-stretch
Автоматические поля
Мы можем применить один из вспомогательных классов маржи из Vuetify к контейнеру flex, чтобы управлять позиционированием flex-элементов по оси x или оси y для направления flex row или column соответственно.
<template> <v-app> <div class="ma-4"> <v-card class="d-flex mb-6" color="grey lighten-2" flat tile > <v-card v-for="n in 3" :key="n" class="pa-2" outlined tile > Flex item </v-card> </v-card><v-card class="d-flex mb-6" color="grey lighten-2" flat tile > <v-card v-for="n in 3" :key="n" :class="n === 1 && 'mr-auto'" class="pa-2" outlined tile > Flex item </v-card> </v-card><v-card class="d-flex mb-6" color="grey lighten-2" flat tile > <v-card v-for="n in 3" :key="n" :class="n === 3 && 'ml-auto'" class="pa-2" outlined tile > Flex item </v-card> </v-card> </div> </v-app> </template><script> export default { name: 'App', }; </script>

Использование align-items
Если мы установим flex-direction в column и укажем значение для align-items, мы можем использовать вспомогательный класс mb-auto или mt-auto для настройки позиционирования flex-элемента:
<template> <v-app> <div class="ma-4"> <v-card class="d-flex align-start flex-column mb-6" color="grey lighten-2" flat tile height="200" > <v-card v-for="n in 3" :key="n" :class="n === 1 && 'mb-auto'" class="pa-2" outlined tile > Flex item </v-card> </v-card> <v-card class="d-flex align-end flex-column" color="grey lighten-2" flat tile height="200" > <v-card v-for="n in 3" :key="n" :class="n === 3 && 'mt-auto'" class="pa-2" outlined tile > Flex item </v-card> </v-card> </div> </v-app> </template><script> export default { name: 'App', }; </script>

Классы Vuetify Flex Wrap
По умолчанию класс d-flex не обеспечивает перенос (он ведет себя аналогично установке flex-wrap в nowrap). Мы можем изменить это, применив к контейнеру один из вспомогательных классов flex-wrap. Классы:
flex-nowrapflex-wrapflex-wrap-reverse
flex-nowrap
flex-nowrap указывает, что элементы не должны переноситься.
<template> <v-app> <div class="ma-4"> <v-card class="d-flex flex-nowrap py-3" color="grey lighten-2" flat tile width="125" > <v-card v-for="n in 5" :key="n" class="pa-2" outlined tile > Flex item </v-card> </v-card> </div> </v-app> </template><script> export default { name: 'App', }; </script>

flex-wrap
flex-wrap делает перенос элементов при необходимости.
<template> <v-app> <div class="ma-4"> <v-card class="d-flex flex-wrap" color="grey lighten-2" flat tile > <v-card v-for="n in 20" :key="n" class="pa-2" outlined tile > Flex item {{ n }} </v-card> </v-card> </div> </v-app> </template><script> export default { name: 'App', }; </script>

flex-wrap-reverse
flex-wrap-reverse указывает, что flex-элементы будут переноситься при необходимости в обратном порядке.
<template> <v-app> <div class="ma-4"> <v-card class="d-flex flex-wrap-reverse" color="grey lighten-2" flat tile > <v-card v-for="n in 20" :key="n" class="pa-2" outlined tile > Flex item {{ n }} </v-card> </v-card> </div> </v-app> </template><script> export default { name: 'App', }; </script>

Vuetify также предоставляет адаптивные варианты этих классов для установки свойства flex-wrap для определенных точек останова:
flex-sm-nowrapflex-sm-wrapflex-sm-wrap-reverseflex-md-nowrapflex-md-wrapflex-md-wrap-reverseflex-lg-nowrapflex-lg-wrapflex-lg-wrap-reverseflex-xl-nowrapflex-xl-wrapflex-xl-wrap-reverse
Классы заказов Vuetify Flex
Мы можем использовать один из служебных классов flex order, чтобы настроить визуальный порядок элементов flexbox в их контейнере.
<template> <v-app> <div class="ma-4"> <v-card class="d-flex flex-wrap" color="grey lighten-2" flat tile > <v-card class="order-2 pa-2" outlined tile > First flex item </v-card> <v-card class="order-3 pa-2" outlined tile > Second flex item </v-card> <v-card class="order-1 pa-2" outlined tile > Third flex item </v-card> </v-card> </div> </v-app> </template><script> export default { name: 'App', }; </script>

Эти классы устанавливают свойство order flex контейнера. Они есть:
order-firstorder-0order-1order-2order-3order-4order-5order-6order-7order-8order-9order-10order-11order-12order-last
Vuetify также предоставляет адаптивные варианты этих классов, которые устанавливают свойство order для определенных точек останова:
order-sm-firstorder-sm-0order-sm-1order-sm-2order-sm-3order-sm-4order-sm-5order-sm-6order-sm-7order-sm-8order-sm-9order-sm-10order-sm-11order-sm-12order-sm-lastorder-md-firstorder-md-0order-md-1order-md-2order-md-3order-md-4order-md-5order-md-6order-md-7order-md-8order-md-9order-md-10order-md-11order-md-12order-md-lastorder-lg-firstorder-lg-0order-lg-1order-lg-2order-lg-3order-lg-4order-lg-5order-lg-6order-lg-7order-lg-8order-lg-9order-lg-10order-lg-11order-lg-12order-lg-last- порядок-xl-первый
order-xl-0order-xl-1order-xl-2order-xl-3order-xl-4order-xl-5order-xl-6order-xl-7order-xl-8order-xl-9order-xl-10order-xl-11order-xl-12order-xl-last
Vuetify Flex Align Content
Vuetify предоставляет классы содержимого flex align, которые мы можем использовать для установки свойства CSS align-content контейнера flex. align-content изменяет элементы flexbox по оси x или оси y для направления flex-направления row или column соответственно. Вспомогательные классы могут установить align-content в start (браузер по умолчанию), end, center, between, around или stretch. Они есть:
align-content-startalign-content-endalign-content-centeralign-content-betweenalign-content-aroundalign-content-stretch
align-content-start
<template> <v-app> <div class="ma-4"> <v-card class="d-flex align-content-start flex-wrap" color="grey lighten-2" flat tile min-height="200" > <v-card v-for="n in 20" :key="n" class="pa-2" outlined tile > Flex item </v-card> </v-card> </div> </v-app> </template><script> export default { name: 'App', }; </script>

align-content-end
<template> <v-app> <div class="ma-4"> <v-card class="d-flex align-content-end flex-wrap" color="grey lighten-2" flat tile min-height="200" > <v-card v-for="n in 20" :key="n" class="pa-2" outlined tile > Flex item </v-card> </v-card> </div> </v-app> </template><script> export default { name: 'App', }; </script>

align-content-center
<template> <v-app> <div class="ma-4"> <v-card class="d-flex align-content-center flex-wrap" color="grey lighten-2" flat tile min-height="200" > <v-card v-for="n in 20" :key="n" class="pa-2" outlined tile > Flex item </v-card> </v-card> </div> </v-app> </template><script> export default { name: 'App', }; </script>

align-content-space-between
<template> <v-app> <div class="ma-4"> <v-card class="d-flex align-content-space-between flex-wrap" color="grey lighten-2" flat tile min-height="200" > <v-card v-for="n in 20" :key="n" class="pa-2" outlined tile > Flex item </v-card> </v-card> </div> </v-app> </template><script> export default { name: 'App', }; </script>

align-content-space-around
<template> <v-app> <div class="ma-4"> <v-card class="d-flex align-content-space-around flex-wrap" color="grey lighten-2" flat tile min-height="200" > <v-card v-for="n in 20" :key="n" class="pa-2" outlined tile > Flex item </v-card> </v-card> </div> </v-app> </template><script> export default { name: 'App', }; </script>

Существуют также адаптивные варианты этих классов, которые устанавливают свойство align-content для определенных точек останова:
align-sm-content-startalign-sm-content-endalign-sm-content-centeralign-sm-content-space-betweenalign-sm-content-space-aroundalign-sm-content-stretchalign-md-content-startalign-md-content-endalign-md-content-centeralign-md-content-space-betweenalign-md-content-space-aroundalign-md-content-stretchalign-lg-content-startalign-lg-content-endalign-lg-content-centeralign-lg-content-space-betweenalign-lg-content-space-aroundalign-xl-content-startalign-xl-content-endalign-xl-content-centeralign-xl-content-space-betweenalign-xl-content-space-aroundalign-xl-content-stretch
Классы Vuetify Flex Grow и Shrink
Vuetify также поставляется со вспомогательными классами, которые устанавливают flex-grow и flex-shrink контейнера flexbox. Эти служебные классы имеют форму flex-{condition}-{value}, где condition может быть либо grow, либо shrink, а value может быть либо 0, либо 1. Условие grow позволяет элементу увеличиваться, чтобы заполнить доступное пространство, в то время как shrink позволяет элементу уменьшаться только до места, необходимого для его содержимого, если в его контейнере недостаточно места. Значение 0 предотвратит возникновение условия, а 1 позволит. Классы:
flex-grow-0flex-grow-1flex-shrink-0flex-shrink-1
<template> <v-app> <div class="ma-4"> <v-container class="grey lighten-5"> <v-row no-gutters style="flex-wrap: nowrap" > <v-col cols="2" class="flex-grow-0 flex-shrink-0" > <v-card class="pa-2" outlined tile > I'm 2 column wide </v-card> </v-col> <v-col cols="1" style="min-width: 100px; max-width: 100%" class="flex-grow-1 flex-shrink-0" > <v-card class="pa-2" outlined tile > I'm 1 column wide and I grow to take all the space </v-card> </v-col> <v-col cols="5" style="min-width: 100px" class="flex-grow-0 flex-shrink-1" > <v-card class="pa-2" outlined tile > I'm 5 column wide and I shrink if there's not enough space </v-card> </v-col> </v-row> </v-container> </div> </v-app> </template><script> export default { name: 'App', }; </script>

Существуют также адаптивные варианты этих классов, которые устанавливают свойства flex-grow и flex-shrink для определенных точек останова:
flex-sm-grow-0flex-sm-grow-1flex-sm-shrink-0flex-sm-shrink-1flex-md-grow-0flex-md-grow-1flex-md-shrink-0flex-md-shrink-1flex-lg-grow-0flex-lg-grow-1flex-lg-shrink-0flex-lg-shrink-1flex-xl-grow-0flex-xl-grow-1flex-xl-shrink-0flex-xl-shrink-1
Заключение
Макеты Flexbox позволяют автоматически упорядочивать отзывчивые элементы внутри контейнера в зависимости от размера экрана. Vuetify поставляется с различными служебными классами flexbox для управления макетом flex-контейнеров с выравниванием, выравниванием, переносом и т. д.
Обновлено на: codingbeautydev.com
Получайте новые советы по веб-разработке каждую неделю.
