content/snippets/css/s/flexbox-cheatsheet.md
---
title: Flexbox Cheat Sheet
type: cheatsheet
language: css
tags: [layout,flexbox,cheatsheet]
cover: frames
excerpt: Flexbox allows you to create fluid layouts easily. If you are constantly looking up how it works, this handy cheatsheet is all you need.
dateModified: 2021-06-12
---
## Container
- `display: flex` or `display: inline-flex`: creates a flex context (or an inline flex context) for direct children of this element
- `flex-direction` determines the main and cross axis for the container, valid values are:
- `row` (default): horizontal, in the direction of writing (left to right for English)
- `row-reverse`: horizontal, in the opposite direction of writing (right to left for English)
- `column`: vertical, top to bottom
- `column-reverse`: vertical, bottom to top
- `flex-wrap` determines if flex items will try to fit in one line, valid values are:
- `nowrap` (default): all flex items will be on one line
- `wrap`: flex items will wrap onto multiple lines, top to bottom
- `wrap-reverse`: flex items will wrap onto multiple lines, bottom to top
- `flex-flow`: shorthand combining `flex-direction` and `flex-wrap`
- Formal syntax: `flex-flow: <'flex-direction'> || <'flex-wrap'>`
- `justify-content` defines the alignment along the main axis, valid values are:
- `flex-start` (default): pack flex items from the start
- `flex-end`: pack flex items from the end
- `start`: pack items from the start
- `end`: pack items from the end
- `left`: pack items from the left
- `right`: pack items from the right
- `center`: pack items around the center
- `space-around`: distribute items evenly with equal space around them
- `space-between`: distribute items evenly with equal space between them
- `space-evenly`: distribute items evenly, ensuring equal space between any two items
- `stretch`: distribute items evenly, stretching auto-sized items to fit the container
- `align-items` defines the alignment along the cross axis, valid values are:
- `flex-start` (default): pack flex items from the start
- `flex-end`: pack flex items from the end
- `start`: pack items from the start
- `end`: pack items from the end
- `center`: pack items around the center
- `baseline`: align items based on their baselines
- `stretch`: stretch items to fill the container
- `align-content` defines the alignment of extra space along the cross axis, valid values are:
- `flex-start` (default): pack flex items from the start
- `flex-end`: pack flex items from the end
- `start`: pack items from the start
- `end`: pack items from the end
- `center`: pack items around the center
- `space-around`: distribute items evenly with equal space around them
- `space-between`: distribute items evenly with equal space between them
- `space-evenly`: distribute items evenly, ensuring equal space between any two items
- `stretch`: distribute items evenly, stretching auto-sized items to fit the container
![Diagram of Flexbox properties](./illustrations/flexbox-diagram.svg)
## Items
- `flex-grow` determines how much the item can grow if necessary
- Accepts a single positive number (unitless), default value is `0`
- Specifies how much of the remaining space in the flex container should be assigned to the item
- The remaining space is the size of the flex container minus the size of all flex items' sizes together
- If all items have the same `flex-grow`, all items will receive an equal share of the remaining space
- If not all items have the same `flex-grow`, the remaining space is distributed according to the ratio defined by these values
- `flex-shrink` determines how much the items can shrink if necessary
- Accepts a single positive number (unitless), default value is `1`
- If the size of all flex items is larger than the flex container, items shrink to fit according to `flex-shrink`
- `flex-basis` determines the initial size of a flex item before the remaining space is distributed
- Can use any valid `width` value, intrinsic size values, `auto` (default) or `content`
- `auto` means "look at my `width` or `height` property", whereas `content` is used for automatic sizing
- `flex`: shorthand combining `flex-grow`, `flex-shrink` and `flex-basis`
- Formal syntax: `flex: none | [ <'flex-grow'> <'flex-shrink'>? || <'flex-basis'> ]`
- `align-self` allows the item to override the default `align-items` specified by the container
- Valid values are the same as those of the `align-items` property in the container
- `order` determines the ordering of the item
- Accepts an integer value
- Items in a container are sorted by ascending `order` value and then by their source code order
- Might cause accessibility issues if used incorrectly