CSS Flexbox
1
2
3
4
5
6
7
8
CSS Flexbox Layout Module
Before the Flexbox Layout module, there were four layout modes:
- Block, for sections in a webpage
- Inline, for text
- Table, for two-dimensional table data
- Positioned, for explicit position of an element
The Flexible Box Layout Module, makes it easier to design flexible responsive layout structure without using float or positioning.
Browser Support
The flexbox properties are supported in all modern browsers.
29.0 | 11.0 | 22.0 | 10 | 48 |
Flexbox Elements
To start using the Flexbox model, you need to first define a flex container.
1
2
3
The element above represents a flex container (the blue area) with three flex items.
Example
A flex container with three flex items:
<div
class="flex-container">
<div>1</div>
<div>2</div>
<div>3</div>
</div>
Parent Element (Container)
The flex container becomes flexible by setting the display
property to flex:
Example
.flex-container {
display: flex;
}
The flex container properties are:
The flex-direction Property
The flex-direction
property defines in which direction the container
wants to stack the flex items.
1
2
3
Example
The column value stacks the flex items vertically (from top to bottom):
.flex-container {
display: flex;
flex-direction: column;
}
Example
The column-reverse value stacks the flex items vertically (but from bottom to top):
.flex-container {
display: flex;
flex-direction: column-reverse;
}
Example
The row value stacks the flex items horizontally (from left to right):
.flex-container {
display: flex;
flex-direction: row;
}
Example
The row-reverse value stacks the flex items horizontally (but from right to left):
.flex-container {
display: flex;
flex-direction: row-reverse;
}
The flex-wrap Property
The flex-wrap
property specifies whether the
flex items should wrap or not.
The examples below have 12 flex items, to better demonstrate the
flex-wrap
property.
1
2
3
4
5
6
7
8
9
10
11
12
Example
The wrap value specifies that the flex items will wrap if necessary:
.flex-container {
display: flex;
flex-wrap: wrap;
}
Example
The nowrap value specifies that the flex items will not wrap (this is default):
.flex-container {
display: flex;
flex-wrap: nowrap;
}
Example
The wrap-reverse value specifies that the flexible items will wrap if necessary, in reverse order:
.flex-container {
display: flex;
flex-wrap: wrap-reverse;
}
The flex-flow Property
The flex-flow
property is a shorthand property for setting both the
flex-direction
and
flex-wrap
properties.
The justify-content Property
The justify-content
property is used to
align the flex items:
1
2
3
Example
The center value aligns the flex items at the center of the container:
.flex-container {
display: flex;
justify-content: center;
}
Example
The flex-start value aligns the flex items at the beginning of the container (this is default):
.flex-container {
display: flex;
justify-content: flex-start;
}
Example
The flex-end value aligns the flex items at the end of the container:
.flex-container {
display: flex;
justify-content: flex-end;
}
Example
The space-around value displays the flex items with space before, between, and after the lines:
.flex-container {
display: flex;
justify-content: space-around;
}
Example
The space-between value displays the flex items with space between the lines:
.flex-container {
display: flex;
justify-content: space-between;
}
The align-items Property
The align-items
property is used to align the
flex items vertically.
1
2
3
In these examples we use a 200 pixels high container, to better demonstrate the
align-items
property.
Example
The center value aligns the flex items in the middle of the container:
.flex-container {
display: flex;
height: 200px;
align-items: center;
}
Example
The flex-start value aligns the flex items at the top of the container:
.flex-container {
display: flex;
height: 200px;
align-items: flex-start;
}
Example
The flex-end value aligns the flex items at the bottom of the container:
.flex-container {
display: flex;
height: 200px;
align-items: flex-end;
}
Example
The stretch value stretches the flex items to fill the container (this is default):
.flex-container {
display: flex;
height: 200px;
align-items: stretch;
}
Example
The baseline value aligns the flex items such as their baselines aligns:
.flex-container {
display: flex;
height: 200px;
align-items: baseline;
}
Note: the example uses different font-size to demonstrate that the items gets aligned by the text baseline:
1
2
3
The align-content Property
The align-content
property is used to align the flex lines.
1
2
3
4
5
6
7
8
9
10
11
12
In these examples we use a 600 pixels high container, with the flex-wrap property set to wrap, to better demonstrate the align-content
property.
Example
The space-between value displays the flex lines with equal space between them:
.flex-container {
display: flex;
height: 600px;
flex-wrap: wrap;
align-content: space-between;
}
Example
The space-around value displays the flex lines with space before, between, and after them:
.flex-container {
display: flex;
height: 600px;
flex-wrap: wrap;
align-content: space-around;
}
Example
The stretch value stretches the flex lines to take up the remaining space (this is default):
.flex-container {
display: flex;
height: 600px;
flex-wrap: wrap;
align-content: stretch;
}
Example
The center value displays display the flex lines in the middle of the container:
.flex-container {
display: flex;
height: 600px;
flex-wrap: wrap;
align-content: center;
}
Example
The flex-start value displays the flex lines at the start of the container:
.flex-container {
display: flex;
height: 600px;
flex-wrap: wrap;
align-content: flex-start;
}
Example
The flex-end value displays the flex lines at the end of the container:
.flex-container {
display: flex;
height: 600px;
flex-wrap: wrap;
align-content: flex-end;
}
Perfect Centering
In the following example we will solve a very common style problem: perfect centering.
SOLUTION: Set both the justify-content
and align-items
properties to
center, and the flex item will be perfectly centered:
Example
.flex-container {
display: flex;
height: 300px;
justify-content:
center;
align-items: center;
}
Child Elements (Items)
The direct child elements of a flex container automatically becomes flexible (flex) items.
1
2
3
4
The element above represents four blue flex items inside a grey flex container.
Example
<div class="flex-container">
<div>1</div>
<div>2</div>
<div>3</div>
<div>4</div>
</div>
The flex item properties are:
The order Property
The order
property specifies the order of
the flex items.
1
2
3
4
The first flex item in the code does not have to appear as the first item in the layout.
The order value must be a number, default value is 0.
Example
The order property can change the order of the flex items:
<div class="flex-container">
<div style="order: 3">1</div>
<div style="order: 2">2</div>
<div style="order: 4">3</div>
<div style="order: 1">4</div>
</div>
The flex-grow Property
The flex-grow
property specifies how much a flex item will grow relative to the rest of the flex items.
1
2
3
The value must be a number, default value is 0.
Example
Make the third flex item grow eight times faster than the other flex items:
<div class="flex-container">
<div style="flex-grow: 1">1</div>
<div style="flex-grow: 1">2</div>
<div style="flex-grow:
8">3</div>
</div>
The flex-shrink Property
The flex-shrink
property specifies how much a flex item will shrink relative to the rest of the flex items.
1
2
3
4
5
6
7
8
9
10
The value must be a number, default value is 1.
Example
Do not let the third flex item shrink as much as the other flex items:
<div class="flex-container">
<div>1</div>
<div>2</div>
<div style="flex-shrink:
0">3</div>
<div>4</div>
<div>5</div>
<div>6</div>
<div>7</div>
<div>8</div>
<div>9</div>
<div>10</div>
</div>
The flex-basis Property
The flex-basis
property specifies the initial length of a flex item.
1
2
3
4
Example
Set the initial length of the third flex item to 200 pixels:
<div class="flex-container">
<div>1</div>
<div>2</div>
<div style="flex-basis: 200px">3</div>
<div>4</div>
</div>
The flex Property
The flex
property is a shorthand property for the
flex-grow
, flex-shrink
, and flex-basis
properties.
Example
Make the third flex item not growable (0), not shrinkable (0), and with an initial length of 200 pixels:
<div class="flex-container">
<div>1</div>
<div>2</div>
<div style="flex:
0 0 200px">3</div>
<div>4</div>
</div>
The align-self Property
The align-self
property specifies the
alignment for the selected item inside the flexible container.
The align-self
property overrides the default alignment set by the
container's align-items
property.
1
2
3
4
In these examples we use a 200 pixels high container, to better demonstrate the
align-self
property:
Example
Align the third flex item in the middle of the container:
<div class="flex-container">
<div>1</div>
<div>2</div>
<div style="align-self:
center">3</div>
<div>4</div>
</div>
Example
Align the second flex item at the top of the container, and the third flex item at the bottom of the container:
<div class="flex-container">
<div>1</div>
<div style="align-self:
flex-start">2</div>
<div style="align-self:
flex-end">3</div>
<div>4</div>
</div>
Responsive Image Gallery using Flexbox
Use flexbox to create a responsive image gallery that varies between four, two or full-width images, depending on screen size:
Try it Yourself »Responsive Website using Flexbox
Use flexbox to create a responsive website, containing a flexible navigation bar and flexible content:
Try it Yourself »CSS Flexbox Properties
The following table lists the CSS properties used with flexbox:
Property | Description |
---|---|
display | Specifies the type of box used for an HTML element |
flex-direction | Specifies the direction of the flexible items inside a flex container |
justify-content | Horizontally aligns the flex items when the items do not use all available space on the main-axis |
align-items | Vertically aligns the flex items when the items do not use all available space on the cross-axis |
flex-wrap | Specifies whether the flex items should wrap or not, if there is not enough room for them on one flex line |
align-content | Modifies the behavior of the flex-wrap property. It is similar to align-items, but instead of aligning flex items, it aligns flex lines |
flex-flow | A shorthand property for flex-direction and flex-wrap |
order | Specifies the order of a flexible item relative to the rest of the flex items inside the same container |
align-self | Used on flex items. Overrides the container's align-items property |
flex | A shorthand property for the flex-grow, flex-shrink, and the flex-basis properties |