Watch a 3 minute video introduction with live demos you can view source on.

Table of Contents

The first step in any flexbox layout is to create a flex container. To do that, set the display property to flex. In Safari, you will still have to use the -webkit prefix.

Watch a 3 minute video introduction to flexbox with live demos you can view source on.

Flex items are the children of a flex container. They are positioned along a main axis and a cross axis. The main axis is horizontal by default, so the items flow into a row. You can flip the main axis by setting flex-direction to column, it's set to row by default.

Watch a 3 minute video on flexbox containers with live demos you can view source on.

No Prefixes Prefixes copy /*On the flex container*/ .flexcontainer { display: flex; flex-direction: row; } /*On the flex container*/ .flexcontainer { display: -webkit-flex; display: flex; -webkit-flex-direction: row; flex-direction: row; }

Watch a 3 minute video on flexbox containers with live demos you can view source on.

How you move flex items to the top depends on the orientation of the main axis. If it's vertical, you set justify-content. If it's horizontal, you set align-items.

Watch a 3 minute video on flexbox containers with live demos you can view source on.

Moving items to the left or right also depends on the orientation of the main axis. If flex-direction is set to row, then you set justify-content, otherwise if it's set to column you set align-items

Watch a 3 minute video on flexbox containers with live demos you can view source on.

Watch a 3 minute video on flexbox containers with live demos you can view source on.

Vertical and horizontal centering within a flexcontainer is trivial. Just set justify-content and/or align-items to center. Again, it depends on the orientation of the main axis, so whether flex-direction is set to row or column.

Watch a 3 minute video on flexbox containers with live demos you can view source on.

You can define how an individual flex item grows and shrinks relative to other flex items in the container. To do this set the flex property on each flex item you want to grow or shrink.

Watch a 3 minute video on how the flex items grow and shrink with interactive demos.

No Prefixes Prefixes copy .bigitem { /* This will be twice as */ /* big as the small item. */ flex: 2 0 0; } .smallitem { flex: 1 0 0; } .bigitem { -webkit-flex: 2 0 0; flex: 2 0 0; } .smallitem { -webkit-flex: 1 0 0; flex: 1 0 0; }

Watch a 3 minute video on how flex-wrap property works with interactive demos.

No Prefixes Prefixes copy /* On the flex container */ .flexcontainer { display: flex; align-items: center; justify-content: center; /* You can set flex-wrap and flex-direction individually */ flex-direction: row; flex-wrap: wrap; /* Or do it all in one line with flex flow */ flex-flow: row wrap; /* tweak where items line up on the row valid values are: flex-start, flex-end, space-between, space-around, stretch */ align-content: flex-end; } /* On the flex container */ .flexcontainer { display: -webkit-flex; display: flex; -webkit-align-items: center; align-items: center; -webkit-justify-content: center; justify-content: center; -webkit-flex-direction: row; flex-direction: row; -webkit-flex-wrap: wrap; flex-wrap: wrap; -webkit-flex-flow: row wrap; flex-flow: row wrap; space-around, stretch */ -webkit-align-content: flex-end; align-content: flex-end; }

Watch a 3 minute video on how flex-wrap property works with interactive demos.

No Prefixes Prefixes copy .flexcontainer { display: flex; align-items: center; justify-content: center; flex-flow: column wrap; align-content: stretch; } .flexcontainer { display: -webkit-flex; display: flex; -webkit-align-items: center; align-items: center; -webkit-justify-content: center; justify-content: center; -webkit-flex-flow: column wrap; flex-flow: column wrap; -webkit-align-content: stretch; align-content: stretch; }

The align-content property gives you options for distributing the space around wrapped rows or columns. The options are flex-start, flex-end, space-between, space-around and stretch. To simply remove the space around wrapped columns, set align-content to center.

Watch a 3 minute video on properties like align-content with interactive demos.

No Prefixes Prefixes copy .flexcontainer { display: flex; align-items: center; justify-content: center; flex-flow: column wrap; align-content: center; } .flexcontainer { display: -webkit-flex; display: flex; -webkit-align-items: center; align-items: center; -webkit-justify-content: center; justify-content: center; -webkit-flex-flow: column wrap; flex-flow: column wrap; -webkit-align-content: center; align-content: center; }

You can control the align-items value for individual elements with align-self. You can also use margins to move individual elements up or down or left of right. e.g. on a column layout you can move an individual flex item all the way to the left of the container by setting margin-right: auto.

Watch a 3 minute video introduction to flexbox with live demos you can view source on.

No Prefixes Prefixes copy /* On the flex item to pin */ .left { align-self: flex-start; } .right { margin-left: auto; } /* On the flex item to pin */ .left { align-self: flex-start; } .right { margin-left: auto; }