From c1d5a801b4bc66e3866f815be00e11d1b20d3539 Mon Sep 17 00:00:00 2001 From: Daniel Baumann Date: Sat, 24 Jun 2023 14:44:36 +0200 Subject: Adding upstream version 5.3.0+dfsg. Signed-off-by: Daniel Baumann --- site/content/docs/5.3/utilities/flex.md | 664 ++++++++++++++++++++++++++++++++ 1 file changed, 664 insertions(+) create mode 100644 site/content/docs/5.3/utilities/flex.md (limited to 'site/content/docs/5.3/utilities/flex.md') diff --git a/site/content/docs/5.3/utilities/flex.md b/site/content/docs/5.3/utilities/flex.md new file mode 100644 index 0000000..d0a92e5 --- /dev/null +++ b/site/content/docs/5.3/utilities/flex.md @@ -0,0 +1,664 @@ +--- +layout: docs +title: Flex +description: Quickly manage the layout, alignment, and sizing of grid columns, navigation, components, and more with a full suite of responsive flexbox utilities. For more complex implementations, custom CSS may be necessary. +group: utilities +toc: true +--- + +## Enable flex behaviors + +Apply `display` utilities to create a flexbox container and transform **direct children elements** into flex items. Flex containers and items are able to be modified further with additional flex properties. + +{{< example class="bd-example-flex" >}} +
I'm a flexbox container!
+{{< /example >}} + +{{< example class="bd-example-flex" >}} +
I'm an inline flexbox container!
+{{< /example >}} + +Responsive variations also exist for `.d-flex` and `.d-inline-flex`. + +{{< markdown >}} +{{< flex.inline >}} +{{- range $.Site.Data.breakpoints }} +- `.d{{ .abbr }}-flex` +- `.d{{ .abbr }}-inline-flex` +{{- end -}} +{{< /flex.inline >}} +{{< /markdown >}} + +## Direction + +Set the direction of flex items in a flex container with direction utilities. In most cases you can omit the horizontal class here as the browser default is `row`. However, you may encounter situations where you needed to explicitly set this value (like responsive layouts). + +Use `.flex-row` to set a horizontal direction (the browser default), or `.flex-row-reverse` to start the horizontal direction from the opposite side. + +{{< example class="bd-example-flex" >}} +
+
Flex item 1
+
Flex item 2
+
Flex item 3
+
+
+
Flex item 1
+
Flex item 2
+
Flex item 3
+
+{{< /example >}} + +Use `.flex-column` to set a vertical direction, or `.flex-column-reverse` to start the vertical direction from the opposite side. + +{{< example class="bd-example-flex" >}} +
+
Flex item 1
+
Flex item 2
+
Flex item 3
+
+
+
Flex item 1
+
Flex item 2
+
Flex item 3
+
+{{< /example >}} + +Responsive variations also exist for `flex-direction`. + +{{< markdown >}} +{{< flex.inline >}} +{{- range $.Site.Data.breakpoints }} +- `.flex{{ .abbr }}-row` +- `.flex{{ .abbr }}-row-reverse` +- `.flex{{ .abbr }}-column` +- `.flex{{ .abbr }}-column-reverse` +{{- end -}} +{{< /flex.inline >}} +{{< /markdown >}} + +## Justify content + +Use `justify-content` utilities on flexbox containers to change the alignment of flex items on the main axis (the x-axis to start, y-axis if `flex-direction: column`). Choose from `start` (browser default), `end`, `center`, `between`, `around`, or `evenly`. + +
+
+
Justify
+
Content
+
Start
+
+
+
Justify
+
Content
+
End
+
+
+
Justify
+
Content
+
Center
+
+
+
Justify
+
Content
+
Between
+
+
+
Justify
+
Content
+
Around
+
+
+
Justify
+
Content
+
Evenly
+
+
+ +```html +
...
+
...
+
...
+
...
+
...
+
...
+``` + +Responsive variations also exist for `justify-content`. + +{{< markdown >}} +{{< flex.inline >}} +{{- range $.Site.Data.breakpoints }} +- `.justify-content{{ .abbr }}-start` +- `.justify-content{{ .abbr }}-end` +- `.justify-content{{ .abbr }}-center` +- `.justify-content{{ .abbr }}-between` +- `.justify-content{{ .abbr }}-around` +- `.justify-content{{ .abbr }}-evenly` +{{- end -}} +{{< /flex.inline >}} +{{< /markdown >}} + +## Align items + +Use `align-items` utilities on flexbox containers to change the alignment of flex items on the cross axis (the y-axis to start, x-axis if `flex-direction: column`). Choose from `start`, `end`, `center`, `baseline`, or `stretch` (browser default). + +
+
+
Flex item
+
Flex item
+
Flex item
+
+
+
Flex item
+
Flex item
+
Flex item
+
+
+
Flex item
+
Flex item
+
Flex item
+
+
+
Flex item
+
Flex item
+
Flex item
+
+
+
Flex item
+
Flex item
+
Flex item
+
+
+ +```html +
...
+
...
+
...
+
...
+
...
+``` + +Responsive variations also exist for `align-items`. + +{{< markdown >}} +{{< flex.inline >}} +{{- range $.Site.Data.breakpoints }} +- `.align-items{{ .abbr }}-start` +- `.align-items{{ .abbr }}-end` +- `.align-items{{ .abbr }}-center` +- `.align-items{{ .abbr }}-baseline` +- `.align-items{{ .abbr }}-stretch` +{{- end -}} +{{< /flex.inline >}} +{{< /markdown >}} + +## Align self + +Use `align-self` utilities on flexbox items to individually change their alignment on the cross axis (the y-axis to start, x-axis if `flex-direction: column`). Choose from the same options as `align-items`: `start`, `end`, `center`, `baseline`, or `stretch` (browser default). + +
+
+
Flex item
+
Aligned flex item
+
Flex item
+
+
+
Flex item
+
Aligned flex item
+
Flex item
+
+
+
Flex item
+
Aligned flex item
+
Flex item
+
+
+
Flex item
+
Aligned flex item
+
Flex item
+
+
+
Flex item
+
Aligned flex item
+
Flex item
+
+
+ +```html +
Aligned flex item
+
Aligned flex item
+
Aligned flex item
+
Aligned flex item
+
Aligned flex item
+``` + +Responsive variations also exist for `align-self`. + +{{< markdown >}} +{{< flex.inline >}} +{{- range $.Site.Data.breakpoints }} +- `.align-self{{ .abbr }}-start` +- `.align-self{{ .abbr }}-end` +- `.align-self{{ .abbr }}-center` +- `.align-self{{ .abbr }}-baseline` +- `.align-self{{ .abbr }}-stretch` +{{- end -}} +{{< /flex.inline >}} +{{< /markdown >}} + +## Fill + +Use the `.flex-fill` class on a series of sibling elements to force them into widths equal to their content (or equal widths if their content does not surpass their border-boxes) while taking up all available horizontal space. + +{{< example class="bd-example-flex" >}} +
+
Flex item with a lot of content
+
Flex item
+
Flex item
+
+{{< /example >}} + +Responsive variations also exist for `flex-fill`. + +{{< markdown >}} +{{< flex.inline >}} +{{- range $.Site.Data.breakpoints }} +- `.flex{{ .abbr }}-fill` +{{- end -}} +{{< /flex.inline >}} +{{< /markdown >}} + +## Grow and shrink + +Use `.flex-grow-*` utilities to toggle a flex item's ability to grow to fill available space. In the example below, the `.flex-grow-1` elements uses all available space it can, while allowing the remaining two flex items their necessary space. + +{{< example class="bd-example-flex" >}} +
+
Flex item
+
Flex item
+
Third flex item
+
+{{< /example >}} + +Use `.flex-shrink-*` utilities to toggle a flex item's ability to shrink if necessary. In the example below, the second flex item with `.flex-shrink-1` is forced to wrap its contents to a new line, "shrinking" to allow more space for the previous flex item with `.w-100`. + +{{< example class="bd-example-flex" >}} +
+
Flex item
+
Flex item
+
+{{< /example >}} + +Responsive variations also exist for `flex-grow` and `flex-shrink`. + +{{< markdown >}} +{{< flex.inline >}} +{{- range $.Site.Data.breakpoints }} +- `.flex{{ .abbr }}-{grow|shrink}-0` +- `.flex{{ .abbr }}-{grow|shrink}-1` +{{- end -}} +{{< /flex.inline >}} +{{< /markdown >}} + +## Auto margins + +Flexbox can do some pretty awesome things when you mix flex alignments with auto margins. Shown below are three examples of controlling flex items via auto margins: default (no auto margin), pushing two items to the right (`.me-auto`), and pushing two items to the left (`.ms-auto`). + +{{< example class="bd-example-flex" >}} +
+
Flex item
+
Flex item
+
Flex item
+
+ +
+
Flex item
+
Flex item
+
Flex item
+
+ +
+
Flex item
+
Flex item
+
Flex item
+
+{{< /example >}} + +### With align-items + +Vertically move one flex item to the top or bottom of a container by mixing `align-items`, `flex-direction: column`, and `margin-top: auto` or `margin-bottom: auto`. + +{{< example class="bd-example-flex" >}} +
+
Flex item
+
Flex item
+
Flex item
+
+ +
+
Flex item
+
Flex item
+
Flex item
+
+{{< /example >}} + +## Wrap + +Change how flex items wrap in a flex container. Choose from no wrapping at all (the browser default) with `.flex-nowrap`, wrapping with `.flex-wrap`, or reverse wrapping with `.flex-wrap-reverse`. + +
+
+
Flex item
+
Flex item
+
Flex item
+
Flex item
+
Flex item
+
+
+ +```html +
+ ... +
+``` + +
+
+
Flex item 1
+
Flex item 2
+
Flex item 3
+
Flex item 4
+
Flex item 5
+
Flex item 6
+
Flex item 7
+
Flex item 8
+
Flex item 9
+
Flex item 10
+
Flex item 11
+
Flex item 12
+
Flex item 13
+
Flex item 14
+
+
+ +```html +
+ ... +
+``` + +
+
+
Flex item 1
+
Flex item 2
+
Flex item 3
+
Flex item 4
+
Flex item 5
+
Flex item 6
+
Flex item 7
+
Flex item 8
+
Flex item 9
+
Flex item 10
+
Flex item 11
+
Flex item 12
+
Flex item 13
+
Flex item 14
+
+
+ +```html +
+ ... +
+``` + + +Responsive variations also exist for `flex-wrap`. + +{{< markdown >}} +{{< flex.inline >}} +{{- range $.Site.Data.breakpoints }} +- `.flex{{ .abbr }}-nowrap` +- `.flex{{ .abbr }}-wrap` +- `.flex{{ .abbr }}-wrap-reverse` +{{- end -}} +{{< /flex.inline >}} +{{< /markdown >}} + +## Order + +Change the _visual_ order of specific flex items with a handful of `order` utilities. We only provide options for making an item first or last, as well as a reset to use the DOM order. As `order` takes any integer value from 0 to 5, add custom CSS for any additional values needed. + +{{< example class="bd-example-flex" >}} +
+
First flex item
+
Second flex item
+
Third flex item
+
+{{< /example >}} + +Responsive variations also exist for `order`. + +{{< markdown >}} +{{< flex.inline >}} +{{- range $bp := $.Site.Data.breakpoints -}} +{{- range (seq 0 5) }} +- `.order{{ $bp.abbr }}-{{ . }}` +{{- end -}} +{{- end -}} +{{< /flex.inline >}} +{{< /markdown >}} + +Additionally there are also responsive `.order-first` and `.order-last` classes that change the `order` of an element by applying `order: -1` and `order: 6`, respectively. + +{{< markdown >}} +{{< flex.inline >}} +{{- range $bp := $.Site.Data.breakpoints -}} +{{- range (slice "first" "last") }} +- `.order{{ $bp.abbr }}-{{ . }}` +{{- end -}} +{{- end -}} +{{< /flex.inline >}} +{{< /markdown >}} + +## Align content + +Use `align-content` utilities on flexbox containers to align flex items _together_ on the cross axis. Choose from `start` (browser default), `end`, `center`, `between`, `around`, or `stretch`. To demonstrate these utilities, we've enforced `flex-wrap: wrap` and increased the number of flex items. + +**Heads up!** This property has no effect on single rows of flex items. + +
+
+
Flex item
+
Flex item
+
Flex item
+
Flex item
+
Flex item
+
Flex item
+
Flex item
+
Flex item
+
Flex item
+
Flex item
+
Flex item
+
Flex item
+
Flex item
+
Flex item
+
Flex item
+
+
+ +```html +
+ ... +
+``` + +
+
+
Flex item
+
Flex item
+
Flex item
+
Flex item
+
Flex item
+
Flex item
+
Flex item
+
Flex item
+
Flex item
+
Flex item
+
Flex item
+
Flex item
+
Flex item
+
Flex item
+
Flex item
+
+
+ +```html +
...
+``` + +
+
+
Flex item
+
Flex item
+
Flex item
+
Flex item
+
Flex item
+
Flex item
+
Flex item
+
Flex item
+
Flex item
+
Flex item
+
Flex item
+
Flex item
+
Flex item
+
Flex item
+
Flex item
+
+
+ +```html +
...
+``` + +
+
+
Flex item
+
Flex item
+
Flex item
+
Flex item
+
Flex item
+
Flex item
+
Flex item
+
Flex item
+
Flex item
+
Flex item
+
Flex item
+
Flex item
+
Flex item
+
Flex item
+
Flex item
+
+
+ +```html +
...
+``` + +
+
+
Flex item
+
Flex item
+
Flex item
+
Flex item
+
Flex item
+
Flex item
+
Flex item
+
Flex item
+
Flex item
+
Flex item
+
Flex item
+
Flex item
+
Flex item
+
Flex item
+
Flex item
+
+
+ +```html +
...
+``` + +
+
+
Flex item
+
Flex item
+
Flex item
+
Flex item
+
Flex item
+
Flex item
+
Flex item
+
Flex item
+
Flex item
+
Flex item
+
Flex item
+
Flex item
+
Flex item
+
Flex item
+
Flex item
+
+
+ +```html +
...
+``` + +Responsive variations also exist for `align-content`. + +{{< markdown >}} +{{< flex.inline >}} +{{- range $.Site.Data.breakpoints }} +- `.align-content{{ .abbr }}-start` +- `.align-content{{ .abbr }}-end` +- `.align-content{{ .abbr }}-center` +- `.align-content{{ .abbr }}-between` +- `.align-content{{ .abbr }}-around` +- `.align-content{{ .abbr }}-stretch` +{{- end -}} +{{< /flex.inline >}} +{{< /markdown >}} + +## Media object + +Looking to replicate the [media object component](https://getbootstrap.com/docs/4.6/components/media-object/) from Bootstrap 4? Recreate it in no time with a few flex utilities that allow even more flexibility and customization than before. + +{{< example >}} +
+
+ {{< placeholder width="100" height="100" color="#999" background="#e5e5e5" text="Image" >}} +
+
+ This is some content from a media component. You can replace this with any content and adjust it as needed. +
+
+{{< /example >}} + +And say you want to vertically center the content next to the image: + +{{< example >}} +
+
+ {{< placeholder width="100" height="100" color="#999" background="#e5e5e5" text="Image" >}} +
+
+ This is some content from a media component. You can replace this with any content and adjust it as needed. +
+
+{{< /example >}} + +## CSS + +### Sass utilities API + +Flexbox utilities are declared in our utilities API in `scss/_utilities.scss`. [Learn how to use the utilities API.]({{< docsref "/utilities/api#using-the-api" >}}) + +{{< scss-docs name="utils-flex" file="scss/_utilities.scss" >}} -- cgit v1.2.3