Макет 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-flex
d-sm-inline-flex
d-md-flex
d-md-inline-flex
d-lg-flex
d-lg-inline-flex
d-xl-flex
d-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-row
flex-sm-row-reverse
flex-sm-column
flex-sm-column-reverse
flex-md-row
flex-md-row-reverse
flex-md-column
flex-md-column-reverse
flex-lg-row
flex-lg-row-reverse
flex-lg-column
flex-lg-column-reverse
flex-xl-row
flex-xl-row-reverse
flex-xl-column
flex-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-start
justify-end
justify-center
justify-space-between
justify-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-start
justify-sm-end
justify-sm-center
justify-sm-space-between
justify-sm-space-around
justify-md-start
justify-md-end
justify-md-center
justify-md-space-between
justify-md-space-around
justify-lg-start
justify-lg-end
justify-lg-center
justify-lg-space-between
justify-lg-space-around
justify-xl-start
justify-xl-end
justify-xl-center
justify-xl-space-between
justify-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-start
align-end
align-center
align-baseline
align-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-start
align-sm-end
align-sm-center
align-sm-baseline
align-sm-stretch
align-md-start
align-md-end
align-md-center
align-md-baseline
align-md-stretch
align-lg-start
align-lg-end
align-lg-center
align-lg-baseline
align-lg-stretch
align-xl-start
align-xl-end
align-xl-center
align-xl-baseline
align-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-start
align-self-end
align-self-center
align-self-baseline
align-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-start
align-self-sm-end
align-self-sm-center
align-self-sm-baseline
align-self-sm-auto
align-self-sm-stretch
align-self-md-start
align-self-md-end
align-self-md-center
align-self-md-baseline
align-self-md-auto
align-self-md-stretch
align-self-lg-start
align-self-lg-end
align-self-lg-center
align-self-lg-baseline
align-self-lg-auto
align-self-lg-stretch
align-self-xl-start
align-self-xl-end
align-self-xl-center
align-self-xl-baseline
align-self-xl-auto
align-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-nowrap
flex-wrap
flex-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-nowrap
flex-sm-wrap
flex-sm-wrap-reverse
flex-md-nowrap
flex-md-wrap
flex-md-wrap-reverse
flex-lg-nowrap
flex-lg-wrap
flex-lg-wrap-reverse
flex-xl-nowrap
flex-xl-wrap
flex-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-first
order-0
order-1
order-2
order-3
order-4
order-5
order-6
order-7
order-8
order-9
order-10
order-11
order-12
order-last
Vuetify также предоставляет адаптивные варианты этих классов, которые устанавливают свойство order
для определенных точек останова:
order-sm-first
order-sm-0
order-sm-1
order-sm-2
order-sm-3
order-sm-4
order-sm-5
order-sm-6
order-sm-7
order-sm-8
order-sm-9
order-sm-10
order-sm-11
order-sm-12
order-sm-last
order-md-first
order-md-0
order-md-1
order-md-2
order-md-3
order-md-4
order-md-5
order-md-6
order-md-7
order-md-8
order-md-9
order-md-10
order-md-11
order-md-12
order-md-last
order-lg-first
order-lg-0
order-lg-1
order-lg-2
order-lg-3
order-lg-4
order-lg-5
order-lg-6
order-lg-7
order-lg-8
order-lg-9
order-lg-10
order-lg-11
order-lg-12
order-lg-last
- порядок-xl-первый
order-xl-0
order-xl-1
order-xl-2
order-xl-3
order-xl-4
order-xl-5
order-xl-6
order-xl-7
order-xl-8
order-xl-9
order-xl-10
order-xl-11
order-xl-12
order-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-start
align-content-end
align-content-center
align-content-between
align-content-around
align-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-start
align-sm-content-end
align-sm-content-center
align-sm-content-space-between
align-sm-content-space-around
align-sm-content-stretch
align-md-content-start
align-md-content-end
align-md-content-center
align-md-content-space-between
align-md-content-space-around
align-md-content-stretch
align-lg-content-start
align-lg-content-end
align-lg-content-center
align-lg-content-space-between
align-lg-content-space-around
align-xl-content-start
align-xl-content-end
align-xl-content-center
align-xl-content-space-between
align-xl-content-space-around
align-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-0
flex-grow-1
flex-shrink-0
flex-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-0
flex-sm-grow-1
flex-sm-shrink-0
flex-sm-shrink-1
flex-md-grow-0
flex-md-grow-1
flex-md-shrink-0
flex-md-shrink-1
flex-lg-grow-0
flex-lg-grow-1
flex-lg-shrink-0
flex-lg-shrink-1
flex-xl-grow-0
flex-xl-grow-1
flex-xl-shrink-0
flex-xl-shrink-1
Заключение
Макеты Flexbox позволяют автоматически упорядочивать отзывчивые элементы внутри контейнера в зависимости от размера экрана. Vuetify поставляется с различными служебными классами flexbox для управления макетом flex-контейнеров с выравниванием, выравниванием, переносом и т. д.
Обновлено на: codingbeautydev.com
Получайте новые советы по веб-разработке каждую неделю.