---
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.
toc: true
---

import { getData } from '@libs/data'
import { getSequence } from '@libs/utils'

## 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" code={`<div class="d-flex p-2">I'm a flexbox container!</div>`} />

<Example class="bd-example-flex" code={`<div class="d-inline-flex p-2">I'm an inline flexbox container!</div>`} />

Responsive variations also exist for `.d-flex` and `.d-inline-flex`.

<ul>
{getData('breakpoints').map((breakpoint) => {
  return (
    <Fragment>
      <li><code>.d{breakpoint.abbr}-flex</code></li>
      <li><code>.d{breakpoint.abbr}-inline-flex</code></li>
    </Fragment>
  )
})}
</ul>

## 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" code={`<div class="d-flex flex-row mb-3">
    <div class="p-2">Flex item 1</div>
    <div class="p-2">Flex item 2</div>
    <div class="p-2">Flex item 3</div>
  </div>
  <div class="d-flex flex-row-reverse">
    <div class="p-2">Flex item 1</div>
    <div class="p-2">Flex item 2</div>
    <div class="p-2">Flex item 3</div>
  </div>`} />

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" code={`<div class="d-flex flex-column mb-3">
    <div class="p-2">Flex item 1</div>
    <div class="p-2">Flex item 2</div>
    <div class="p-2">Flex item 3</div>
  </div>
  <div class="d-flex flex-column-reverse">
    <div class="p-2">Flex item 1</div>
    <div class="p-2">Flex item 2</div>
    <div class="p-2">Flex item 3</div>
  </div>`} />

Responsive variations also exist for `flex-direction`.

<ul>
{getData('breakpoints').map((breakpoint) => {
  return (
    <Fragment>
      <li><code>.flex{breakpoint.abbr}-row</code></li>
      <li><code>.flex{breakpoint.abbr}-row-reverse</code></li>
      <li><code>.flex{breakpoint.abbr}-column</code></li>
      <li><code>.flex{breakpoint.abbr}-column-reverse</code></li>
    </Fragment>
  )
})}
</ul>

## 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`.

<div class="bd-example bd-example-flex">
  <div class="d-flex justify-content-start mb-3">
    <div class="p-2 bd-highlight">Justify</div>
    <div class="p-2 bd-highlight">Content</div>
    <div class="p-2 bd-highlight">Start</div>
  </div>
  <div class="d-flex justify-content-end mb-3">
    <div class="p-2 bd-highlight">Justify</div>
    <div class="p-2 bd-highlight">Content</div>
    <div class="p-2 bd-highlight">End</div>
  </div>
  <div class="d-flex justify-content-center mb-3">
    <div class="p-2 bd-highlight">Justify</div>
    <div class="p-2 bd-highlight">Content</div>
    <div class="p-2 bd-highlight">Center</div>
  </div>
  <div class="d-flex justify-content-between mb-3">
    <div class="p-2 bd-highlight">Justify</div>
    <div class="p-2 bd-highlight">Content</div>
    <div class="p-2 bd-highlight">Between</div>
  </div>
  <div class="d-flex justify-content-around mb-3">
    <div class="p-2 bd-highlight">Justify</div>
    <div class="p-2 bd-highlight">Content</div>
    <div class="p-2 bd-highlight">Around</div>
  </div>
  <div class="d-flex justify-content-evenly">
    <div class="p-2 bd-highlight">Justify</div>
    <div class="p-2 bd-highlight">Content</div>
    <div class="p-2 bd-highlight">Evenly</div>
  </div>
</div>

```html
<div class="d-flex justify-content-start">...</div>
<div class="d-flex justify-content-end">...</div>
<div class="d-flex justify-content-center">...</div>
<div class="d-flex justify-content-between">...</div>
<div class="d-flex justify-content-around">...</div>
<div class="d-flex justify-content-evenly">...</div>
```

Responsive variations also exist for `justify-content`.

<ul>
{getData('breakpoints').map((breakpoint) => {
  return (
    <Fragment>
      <li><code>.justify-content{breakpoint.abbr}-start</code></li>
      <li><code>.justify-content{breakpoint.abbr}-end</code></li>
      <li><code>.justify-content{breakpoint.abbr}-center</code></li>
      <li><code>.justify-content{breakpoint.abbr}-between</code></li>
      <li><code>.justify-content{breakpoint.abbr}-around</code></li>
      <li><code>.justify-content{breakpoint.abbr}-evenly</code></li>
    </Fragment>
  )
})}
</ul>

## 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).

<div class="bd-example bd-example-flex">
  <div class="d-flex align-items-start mb-3" style="height: 100px">
    <div class="p-2">Flex item</div>
    <div class="p-2">Flex item</div>
    <div class="p-2">Flex item</div>
  </div>
  <div class="d-flex align-items-end mb-3" style="height: 100px">
    <div class="p-2">Flex item</div>
    <div class="p-2">Flex item</div>
    <div class="p-2">Flex item</div>
  </div>
  <div class="d-flex align-items-center mb-3" style="height: 100px">
    <div class="p-2">Flex item</div>
    <div class="p-2">Flex item</div>
    <div class="p-2">Flex item</div>
  </div>
  <div class="d-flex align-items-baseline mb-3" style="height: 100px">
    <div class="p-2">Flex item</div>
    <div class="p-2">Flex item</div>
    <div class="p-2">Flex item</div>
  </div>
  <div class="d-flex align-items-stretch" style="height: 100px">
    <div class="p-2">Flex item</div>
    <div class="p-2">Flex item</div>
    <div class="p-2">Flex item</div>
  </div>
</div>

```html
<div class="d-flex align-items-start">...</div>
<div class="d-flex align-items-end">...</div>
<div class="d-flex align-items-center">...</div>
<div class="d-flex align-items-baseline">...</div>
<div class="d-flex align-items-stretch">...</div>
```

Responsive variations also exist for `align-items`.

<ul>
{getData('breakpoints').map((breakpoint) => {
  return (
    <Fragment>
      <li><code>.align-items{breakpoint.abbr}-start</code></li>
      <li><code>.align-items{breakpoint.abbr}-end</code></li>
      <li><code>.align-items{breakpoint.abbr}-center</code></li>
      <li><code>.align-items{breakpoint.abbr}-baseline</code></li>
      <li><code>.align-items{breakpoint.abbr}-stretch</code></li>
    </Fragment>
  )
})}
</ul>

## 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).

<div class="bd-example bd-example-flex">
  <div class="d-flex mb-3" style="height: 100px">
    <div class="p-2">Flex item</div>
    <div class="align-self-start p-2">Aligned flex item</div>
    <div class="p-2">Flex item</div>
  </div>
  <div class="d-flex mb-3" style="height: 100px">
    <div class="p-2">Flex item</div>
    <div class="align-self-end p-2">Aligned flex item</div>
    <div class="p-2">Flex item</div>
  </div>
  <div class="d-flex mb-3" style="height: 100px">
    <div class="p-2">Flex item</div>
    <div class="align-self-center p-2">Aligned flex item</div>
    <div class="p-2">Flex item</div>
  </div>
  <div class="d-flex mb-3" style="height: 100px">
    <div class="p-2">Flex item</div>
    <div class="align-self-baseline p-2">Aligned flex item</div>
    <div class="p-2">Flex item</div>
  </div>
  <div class="d-flex" style="height: 100px">
    <div class="p-2">Flex item</div>
    <div class="align-self-stretch p-2">Aligned flex item</div>
    <div class="p-2">Flex item</div>
  </div>
</div>

```html
<div class="align-self-start">Aligned flex item</div>
<div class="align-self-end">Aligned flex item</div>
<div class="align-self-center">Aligned flex item</div>
<div class="align-self-baseline">Aligned flex item</div>
<div class="align-self-stretch">Aligned flex item</div>
```

Responsive variations also exist for `align-self`.

<ul>
{getData('breakpoints').map((breakpoint) => {
  return (
    <Fragment>
      <li><code>.align-self{breakpoint.abbr}-start</code></li>
      <li><code>.align-self{breakpoint.abbr}-end</code></li>
      <li><code>.align-self{breakpoint.abbr}-center</code></li>
      <li><code>.align-self{breakpoint.abbr}-baseline</code></li>
      <li><code>.align-self{breakpoint.abbr}-stretch</code></li>
    </Fragment>
  )
})}
</ul>

## 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" code={`<div class="d-flex">
    <div class="p-2 flex-fill">Flex item with a lot of content</div>
    <div class="p-2 flex-fill">Flex item</div>
    <div class="p-2 flex-fill">Flex item</div>
  </div>`} />

Responsive variations also exist for `flex-fill`.

<ul>
{getData('breakpoints').map((breakpoint) => {
  return (
    <li><code>.flex{breakpoint.abbr}-fill</code></li>
  )
})}
</ul>

## 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" code={`<div class="d-flex">
    <div class="p-2 flex-grow-1">Flex item</div>
    <div class="p-2">Flex item</div>
    <div class="p-2">Third flex item</div>
  </div>`} />

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" code={`<div class="d-flex">
    <div class="p-2 w-100">Flex item</div>
    <div class="p-2 flex-shrink-1">Flex item</div>
  </div>`} />

Responsive variations also exist for `flex-grow` and `flex-shrink`.

<ul>
{getData('breakpoints').map((breakpoint) => {
  return (
    <Fragment>
      <li><code>.flex{breakpoint.abbr}-{'{'}grow|shrink{'}'}-0</code></li>
      <li><code>.flex{breakpoint.abbr}-{'{'}grow|shrink{'}'}-1</code></li>
    </Fragment>
  )
})}
</ul>

## 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" code={`<div class="d-flex mb-3">
    <div class="p-2">Flex item</div>
    <div class="p-2">Flex item</div>
    <div class="p-2">Flex item</div>
  </div>

  <div class="d-flex mb-3">
    <div class="me-auto p-2">Flex item</div>
    <div class="p-2">Flex item</div>
    <div class="p-2">Flex item</div>
  </div>

  <div class="d-flex mb-3">
    <div class="p-2">Flex item</div>
    <div class="p-2">Flex item</div>
    <div class="ms-auto p-2">Flex item</div>
  </div>`} />

### 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" code={`<div class="d-flex align-items-start flex-column mb-3" style="height: 200px;">
    <div class="mb-auto p-2">Flex item</div>
    <div class="p-2">Flex item</div>
    <div class="p-2">Flex item</div>
  </div>

  <div class="d-flex align-items-end flex-column mb-3" style="height: 200px;">
    <div class="p-2">Flex item</div>
    <div class="p-2">Flex item</div>
    <div class="mt-auto p-2">Flex item</div>
  </div>`} />

## 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`.

<div class="bd-example bd-example-flex">
  <div class="d-flex flex-nowrap" style="width: 8rem;">
    <div class="p-2">Flex item</div>
    <div class="p-2">Flex item</div>
    <div class="p-2">Flex item</div>
    <div class="p-2">Flex item</div>
    <div class="p-2">Flex item</div>
  </div>
</div>

```html
<div class="d-flex flex-nowrap">
  ...
</div>
```

<div class="bd-example bd-example-flex">
  <div class="d-flex flex-wrap">
    <div class="p-2">Flex item 1</div>
    <div class="p-2">Flex item 2</div>
    <div class="p-2">Flex item 3</div>
    <div class="p-2">Flex item 4</div>
    <div class="p-2">Flex item 5</div>
    <div class="p-2">Flex item 6</div>
    <div class="p-2">Flex item 7</div>
    <div class="p-2">Flex item 8</div>
    <div class="p-2">Flex item 9</div>
    <div class="p-2">Flex item 10</div>
    <div class="p-2">Flex item 11</div>
    <div class="p-2">Flex item 12</div>
    <div class="p-2">Flex item 13</div>
    <div class="p-2">Flex item 14</div>
  </div>
</div>

```html
<div class="d-flex flex-wrap">
  ...
</div>
```

<div class="bd-example bd-example-flex">
  <div class="d-flex flex-wrap-reverse">
    <div class="p-2">Flex item 1</div>
    <div class="p-2">Flex item 2</div>
    <div class="p-2">Flex item 3</div>
    <div class="p-2">Flex item 4</div>
    <div class="p-2">Flex item 5</div>
    <div class="p-2">Flex item 6</div>
    <div class="p-2">Flex item 7</div>
    <div class="p-2">Flex item 8</div>
    <div class="p-2">Flex item 9</div>
    <div class="p-2">Flex item 10</div>
    <div class="p-2">Flex item 11</div>
    <div class="p-2">Flex item 12</div>
    <div class="p-2">Flex item 13</div>
    <div class="p-2">Flex item 14</div>
  </div>
</div>

```html
<div class="d-flex flex-wrap-reverse">
  ...
</div>
```


Responsive variations also exist for `flex-wrap`.

<ul>
{getData('breakpoints').map((breakpoint) => {
  return (
    <Fragment>
      <li><code>.flex{breakpoint.abbr}-nowrap</code></li>
      <li><code>.flex{breakpoint.abbr}-wrap</code></li>
      <li><code>.flex{breakpoint.abbr}-wrap-reverse</code></li>
    </Fragment>
  )
})}
</ul>

## 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" code={`<div class="d-flex flex-nowrap">
    <div class="order-3 p-2">First flex item</div>
    <div class="order-2 p-2">Second flex item</div>
    <div class="order-1 p-2">Third flex item</div>
  </div>`} />

Responsive variations also exist for `order`.

<ul>
{getData('breakpoints').map((breakpoint) => getSequence(0, 5).map((value) => {
  return (
    <li><code>.order{breakpoint.abbr}-{value}</code></li>
  )
}))}
</ul>

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.

<ul>
{getData('breakpoints').map((breakpoint) => ['first', 'last'].map((value) => {
  return (
    <li><code>.order{breakpoint.abbr}-{value}</code></li>
  )
}))}
</ul>

## 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.

<div class="bd-example bd-example-flex">
  <div class="d-flex align-content-start flex-wrap mb-3" style="height: 200px">
    <div class="p-2">Flex item</div>
    <div class="p-2">Flex item</div>
    <div class="p-2">Flex item</div>
    <div class="p-2">Flex item</div>
    <div class="p-2">Flex item</div>
    <div class="p-2">Flex item</div>
    <div class="p-2">Flex item</div>
    <div class="p-2">Flex item</div>
    <div class="p-2">Flex item</div>
    <div class="p-2">Flex item</div>
    <div class="p-2">Flex item</div>
    <div class="p-2">Flex item</div>
    <div class="p-2">Flex item</div>
    <div class="p-2">Flex item</div>
    <div class="p-2">Flex item</div>
  </div>
</div>

```html
<div class="d-flex align-content-start flex-wrap">
  ...
</div>
```

<div class="bd-example bd-example-flex">
  <div class="d-flex align-content-end flex-wrap mb-3" style="height: 200px">
    <div class="p-2">Flex item</div>
    <div class="p-2">Flex item</div>
    <div class="p-2">Flex item</div>
    <div class="p-2">Flex item</div>
    <div class="p-2">Flex item</div>
    <div class="p-2">Flex item</div>
    <div class="p-2">Flex item</div>
    <div class="p-2">Flex item</div>
    <div class="p-2">Flex item</div>
    <div class="p-2">Flex item</div>
    <div class="p-2">Flex item</div>
    <div class="p-2">Flex item</div>
    <div class="p-2">Flex item</div>
    <div class="p-2">Flex item</div>
    <div class="p-2">Flex item</div>
  </div>
</div>

```html
<div class="d-flex align-content-end flex-wrap">...</div>
```

<div class="bd-example bd-example-flex">
  <div class="d-flex align-content-center flex-wrap mb-3" style="height: 200px">
    <div class="p-2">Flex item</div>
    <div class="p-2">Flex item</div>
    <div class="p-2">Flex item</div>
    <div class="p-2">Flex item</div>
    <div class="p-2">Flex item</div>
    <div class="p-2">Flex item</div>
    <div class="p-2">Flex item</div>
    <div class="p-2">Flex item</div>
    <div class="p-2">Flex item</div>
    <div class="p-2">Flex item</div>
    <div class="p-2">Flex item</div>
    <div class="p-2">Flex item</div>
    <div class="p-2">Flex item</div>
    <div class="p-2">Flex item</div>
    <div class="p-2">Flex item</div>
  </div>
</div>

```html
<div class="d-flex align-content-center flex-wrap">...</div>
```

<div class="bd-example bd-example-flex">
  <div class="d-flex align-content-between flex-wrap mb-3" style="height: 200px">
    <div class="p-2">Flex item</div>
    <div class="p-2">Flex item</div>
    <div class="p-2">Flex item</div>
    <div class="p-2">Flex item</div>
    <div class="p-2">Flex item</div>
    <div class="p-2">Flex item</div>
    <div class="p-2">Flex item</div>
    <div class="p-2">Flex item</div>
    <div class="p-2">Flex item</div>
    <div class="p-2">Flex item</div>
    <div class="p-2">Flex item</div>
    <div class="p-2">Flex item</div>
    <div class="p-2">Flex item</div>
    <div class="p-2">Flex item</div>
    <div class="p-2">Flex item</div>
  </div>
</div>

```html
<div class="d-flex align-content-between flex-wrap">...</div>
```

<div class="bd-example bd-example-flex">
  <div class="d-flex align-content-around flex-wrap mb-3" style="height: 200px">
    <div class="p-2">Flex item</div>
    <div class="p-2">Flex item</div>
    <div class="p-2">Flex item</div>
    <div class="p-2">Flex item</div>
    <div class="p-2">Flex item</div>
    <div class="p-2">Flex item</div>
    <div class="p-2">Flex item</div>
    <div class="p-2">Flex item</div>
    <div class="p-2">Flex item</div>
    <div class="p-2">Flex item</div>
    <div class="p-2">Flex item</div>
    <div class="p-2">Flex item</div>
    <div class="p-2">Flex item</div>
    <div class="p-2">Flex item</div>
    <div class="p-2">Flex item</div>
  </div>
</div>

```html
<div class="d-flex align-content-around flex-wrap">...</div>
```

<div class="bd-example bd-example-flex">
  <div class="d-flex align-content-stretch flex-wrap mb-3" style="height: 200px">
    <div class="p-2">Flex item</div>
    <div class="p-2">Flex item</div>
    <div class="p-2">Flex item</div>
    <div class="p-2">Flex item</div>
    <div class="p-2">Flex item</div>
    <div class="p-2">Flex item</div>
    <div class="p-2">Flex item</div>
    <div class="p-2">Flex item</div>
    <div class="p-2">Flex item</div>
    <div class="p-2">Flex item</div>
    <div class="p-2">Flex item</div>
    <div class="p-2">Flex item</div>
    <div class="p-2">Flex item</div>
    <div class="p-2">Flex item</div>
    <div class="p-2">Flex item</div>
  </div>
</div>

```html
<div class="d-flex align-content-stretch flex-wrap">...</div>
```

Responsive variations also exist for `align-content`.

<ul>
{getData('breakpoints').map((breakpoint) => {
  return (
    <Fragment>
      <li><code>.align-content{breakpoint.abbr}-start</code></li>
      <li><code>.align-content{breakpoint.abbr}-end</code></li>
      <li><code>.align-content{breakpoint.abbr}-center</code></li>
      <li><code>.align-content{breakpoint.abbr}-between</code></li>
      <li><code>.align-content{breakpoint.abbr}-around</code></li>
      <li><code>.align-content{breakpoint.abbr}-stretch</code></li>
    </Fragment>
  )
})}
</ul>

## 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 code={`<div class="d-flex">
    <div class="flex-shrink-0">
      <Placeholder width="100" height="100" color="#999" background="#e5e5e5" text="Image" />
    </div>
    <div class="flex-grow-1 ms-3">
      This is some content from a media component. You can replace this with any content and adjust it as needed.
    </div>
  </div>`} />

And say you want to vertically center the content next to the image:

<Example code={`<div class="d-flex align-items-center">
    <div class="flex-shrink-0">
      <Placeholder width="100" height="100" color="#999" background="#e5e5e5" text="Image" />
    </div>
    <div class="flex-grow-1 ms-3">
      This is some content from a media component. You can replace this with any content and adjust it as needed.
    </div>
  </div>`} />

## 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]])

<ScssDocs name="utils-flex" file="scss/_utilities.scss" />
