Flexbox Layout
The CSS Flexible Box Model, often referred to as Flexbox, is a way for a container to tells its children how best to fill the available space by altering width, height and order. Flexbox is a one-dimensional layout model, meaning it only handles distribution in one direction at a time, horizontal or vertical. This in contrast to the CSS Grid Layout which is a two dimensional model and able to control both the horizontal and the vertical at the same time.
Flexible Box Container
When using Flexbox most of the settings are controlled by the parent element or the flexible box container. To create a flexible box container, apply the flex
value to the display
property of the desire parent element.
When display: flex
is applied to a parent element, the child elements will no longer display as block elements, and the parent element will now be able to dictate how the children are distributed and aligned.
Flex Direction
When working with Flexbox you must be aware two axes, a main axis and cross axis, and how Flexbox distributes and aligns items along this axes.
The flex-direction
property is used to define which direction of the main axis. The flex-direction
will take 4 valid values:
row
(default) orrow-reverse
: the main axis will run horizontally or the inline directioncolumn
orcolumn-reverse
: the main axis will run vertically or in block direction
flex-direction: row
flex-direction: row-reverse
flex-direction: column
flex-direction: column-reverse
Flex Wrap
By default, children of a flex box container will remain on a single line.
The flex-wrap
property is used to allow children to wrap.
Justify Content
A flexbox container uses the justify-content
property can set how the children are distributed in the available space across the main axis. The justify-content
property will accept the following values:
flex-start
(default): Items are packed on the start of the main axisflex-end
: Items are packed on the end of the main axiscenter
: Item are centered along the main axisspace-around
: Items are evenly distributed in the line with equal space around themspace-between
: Items are evenly distributed in the line; first item is on the start line, last item on the end linespace-evenly
: Items are distributed so that the spacing between any two adjacent alignment subjects, before the first alignment subject, and after the last alignment subject is the same
justify-content: flex-start
justify-content: flex-end
justify-content: center
justify-content: space-around
justify-content: space-between
justify-content: space-evenly
Align Items
The align-items
property defines the default behavior for how children are laid along the cross axis. The align-items
will accept the following properties:
stretch
(default): items are stretched to fill the containerflex-start
: items are placed at the beginning of the cross axis.flex-end
: items are placed at the end of the cross axiscenter
: items are placed at the center of the cross axisbaseline
: items are placed so their baselines align
NOTE
For the following examples, boxes B and D were given additional padding top to better show the differences between the different align-items
values.
align-items: stretch
align-items: flex-start
align-items: flex-end
align-items: center
align-items: baseline
Additional Resources
Below are additional resources for learning Flexbox Layout.
- A Complete Guide to Flexbox (CSS Tricks)
- Flexbox Froggy Game
- Flexbox Defence Game
- Basic Concepts of Flexbox (MDN)
- Flexbox Letters (CodePen)
This YouTube video was created by Steve Griffith.