0% found this document useful (0 votes)
562 views

A Complete Guide To Flexbox - CSS-Tricks - CSS-Tricks

This document provides a comprehensive guide to CSS flexbox layout. It includes 11 parts that cover the background, basics and terminology, properties for flex containers and items, examples, tricks, browser support, bugs, and more information on flexbox. The guide explains all the different flexbox properties like display, flex-direction, flex-wrap, flex-flow, and properties for flex items including order, flex-grow, flex-shrink, and flex-basis.
Copyright
© © All Rights Reserved
Available Formats
Download as PDF, TXT or read online on Scribd
0% found this document useful (0 votes)
562 views

A Complete Guide To Flexbox - CSS-Tricks - CSS-Tricks

This document provides a comprehensive guide to CSS flexbox layout. It includes 11 parts that cover the background, basics and terminology, properties for flex containers and items, examples, tricks, browser support, bugs, and more information on flexbox. The guide explains all the different flexbox properties like display, flex-direction, flex-wrap, flex-flow, and properties for flex items including order, flex-grow, flex-shrink, and flex-basis.
Copyright
© © All Rights Reserved
Available Formats
Download as PDF, TXT or read online on Scribd
You are on page 1/ 10

26/11/22, 12:03 A Complete Guide to Flexbox | CSS-Tricks - CSS-Tricks

HOME /
GUIDES /

A Complete Guide to Flexbox


Chris Coyier on
Apr 8, 2013 (Updated on Oct 11, 2022)

Our comprehensive guide to CSS flexbox layout. This complete guide explains
everything about flexbox, focusing on all the different possible properties for the
parent element (the flex container) and the child elements (the flex items). It also
includes history, demos, patterns, and a browser support chart.

Table of contents
Part 1: (#aa-introduction) Background (#aa-background)
Part 2: (#aa-introduction) Basics and terminology (#aa-basics-and-terminology)
Part 3: (#aa-introduction) Flexbox properties (#aa-flexbox-properties)
Part 4: (#aa-introduction) Prefixing Flexbox (#aa-prefixing-flexbox)
Part 5: (#aa-introduction) Examples (#aa-examples)
Part 6: (#aa-introduction) Flexbox tricks (#aa-flexbox-tricks)
Part 7: (#aa-introduction) Browser support (#aa-browser-support)
Part 8: (#aa-introduction) Bugs (#aa-bugs)
Part 9: (#aa-introduction) Related properties (#aa-related-properties)
Part 10: (#aa-introduction) More information (#aa-more-information)
Part 11: More sources (#aa-more-sources)

(#aa-get-the-poster) Get the poster!

Reference this guide a lot? Here’s a high-res image you can print!

https://css-tricks.com/snippets/css/a-guide-to-flexbox/ 1/10
26/11/22, 12:03 A Complete Guide to Flexbox | CSS-Tricks - CSS-Tricks

DOWNLOAD FREE (HTTPS://CSS-TRICKS.COM/WP-CONTENT/UPLOADS/2022/02/CSS-FLEXBOX-POSTER.PNG)

(#aa-background) Background

(#aa-basics-and-terminology) Basics and terminology

(#aa-flexbox-properties) Flexbox properties

(#aa-properties-for-the- (#aa-properties-for-the-
parentflex-container) Properties childrenflex-items) Properties for
for the Parent
the Children

(flex container) (flex items)

(#aa-display) display (#aa-order) order


This defines a flex container; inline or block
depending on the given value. It enables a flex
context for all its direct children.

CSS

.container {

display: flex; /* or inline-flex */

Note that CSS columns have no effect on a flex


container.

(#aa-flex-direction) flex- By default, flex items are laid out in the source
direction order. However, the order property controls

https://css-tricks.com/snippets/css/a-guide-to-flexbox/ 2/10
26/11/22, 12:03 A Complete Guide to Flexbox | CSS-Tricks - CSS-Tricks

the order in which they appear in the flex


container.

CSS
.item {

order: 5; /* default is 0 */

Items with the same order revert to source


This establishes the main-axis, thus defining
order.
the direction flex items are placed in the flex
container. Flexbox is (aside from optional
wrapping) a single-direction layout concept.
Think of flex items as primarily laying out (#aa-flex-grow) flex-grow
either in horizontal rows or vertical columns.

CSS

.container {

flex-direction: row | row-reverse | column | col


}

row (default): left to right in ltr; right to


left in rtl

row-reverse: right to left in ltr; left to This defines the ability for a flex item to grow
right in rtl if necessary. It accepts a unitless value that
column: same as row but top to bottom serves as a proportion. It dictates what

column-reverse: same as row-reverse amount of the available space inside the flex
but bottom to top container the item should take up.

If all items have flex-grow set to 1, the


remaining space in the container will be
(#aa-flex-wrap) flex-wrap distributed equally to all children. If one of
the children has a value of 2, that child would
take up twice as much of the space either one
of the others (or it will try, at least).

CSS

.item {

flex-grow: 4; /* default 0 */

By default, flex items will all try to fit onto one


Negative numbers are invalid.
line. You can change that and allow the items
to wrap as needed with this property.

CSS
.container {
(#aa-flex-shrink) flex-shrink
flex-wrap: nowrap | wrap | wrap-reverse;

} This defines the ability for a flex item to


shrink if necessary.
nowrap (default): all flex items will be on
one line

https://css-tricks.com/snippets/css/a-guide-to-flexbox/ 3/10
26/11/22, 12:03 A Complete Guide to Flexbox | CSS-Tricks - CSS-Tricks

wrap: flex items will wrap onto multiple CSS


.item {

lines, from top to bottom. flex-shrink: 3; /* default 1 */

}
wrap-reverse: flex items will wrap onto
multiple lines from bottom to top.
Negative numbers are invalid.
There are some visual demos of flex-wrap
here (https://css-
tricks.com/almanac/properties/f/flex-wrap/) .
(#aa-flex-basis) flex-basis
This defines the default size of an element
before the remaining space is distributed. It
(#aa-flex-flow) flex-flow can be a length (e.g. 20%, 5rem, etc.) or a
This is a shorthand for the flex-direction keyword. The auto keyword means “look at
and flex-wrap properties, which together my width or height property” (which was
define the flex container’s main and cross temporarily done by the main-size keyword
axes. The default value is row nowrap. until deprecated). The content keyword
means “size it based on the item’s content” –
CSS

.container {
this keyword isn’t well supported yet, so it’s
flex-flow: column wrap;

}
hard to test and harder to know what its
brethren max-content, min-content, and
fit-content do.

CSS
.item {

(#aa-justify-content) justify-
flex-basis: | auto; /* default auto */

content }

If set to 0, the extra space around content isn’t


factored in. If set to auto, the extra space is
distributed based on its flex-grow value. See
this graphic. (http://www.w3.org/TR/css3-
flexbox/images/rel-vs-abs-flex.svg)

(#aa-flex) flex
This is the shorthand for flex-grow, flex-
shrink and flex-basis combined. The
second and third parameters (flex-shrink
and flex-basis) are optional. The default is
0 1 auto, but if you set it with a single
number value, like flex: 5;, that changes
the flex-basis to 0%, so it’s like setting
flex-grow: 5; flex-shrink: 1; flex-
basis: 0%;.

https://css-tricks.com/snippets/css/a-guide-to-flexbox/ 4/10
26/11/22, 12:03 A Complete Guide to Flexbox | CSS-Tricks - CSS-Tricks


.item {

CSS

This defines the alignment along the main flex: none | [ <'flex-grow'> <'flex-shrink'>? |
}
axis. It helps distribute extra free space
leftover when either all the flex items on a line
are inflexible, or are flexible but have reached It is recommended that you use this

their maximum size. It also exerts some shorthand property rather than set the

control over the alignment of items when they individual properties. The shorthand sets the

overflow the line. other values intelligently.

CSS

.container {

justify-content: flex-start | flex-end | center


} (#aa-align-self) align-self

flex-start (default): items are packed


toward the start of the flex-direction.
flex-end: items are packed toward the
end of the flex-direction.
start: items are packed toward the start of
the writing-mode direction.
end: items are packed toward the end of

the writing-mode direction.


This allows the default alignment (or the one
left: items are packed toward left edge of specified by align-items) to be overridden
the container, unless that doesn’t make for individual flex items.
sense with the flex-direction, then it
behaves like start. Please see the align-items explanation to
right: items are packed toward right edge understand the available values.
of the container, unless that doesn’t make
sense with the flex-direction, then it
CSS

.item {

behaves like end. align-self: auto | flex-start | flex-end | cente


}
center: items are centered along the line

space-between: items are evenly


Note that float, clear and vertical-align
distributed in the line; first item is on the
have no effect on a flex item.
start line, last item on the end line
space-around: items are evenly
distributed in the line with equal space
around them. Note that visually the spaces
aren’t equal, since all the items have equal
space on both sides. The first item will
have one unit of space against the
container edge, but two units of space
between the next item because that next
item has its own spacing that applies.
space-evenly: items are distributed so
that the spacing between any two items
(and the space to the edges) is equal.

https://css-tricks.com/snippets/css/a-guide-to-flexbox/ 5/10
26/11/22, 12:03 A Complete Guide to Flexbox | CSS-Tricks - CSS-Tricks

Note that that browser support for these


values is nuanced. For example, space-
between never got support from some
versions of Edge, and start/end/left/right
aren’t in Chrome yet. MDN has detailed
charts (https://developer.mozilla.org/en-
US/docs/Web/CSS/justify-content) . The
safest values are flex-start, flex-end, and
center.

There are also two additional keywords you


can pair with these values: safe and unsafe.
Using safe ensures that however you do this
type of positioning, you can’t push an element
such that it renders off-screen (e.g. off the
top) in such a way the content can’t be
scrolled too (called “data loss”).

(#aa-align-items) align-items

This defines the default behavior for how flex


items are laid out along the cross axis on the
current line. Think of it as the justify-
content version for the cross-axis
(perpendicular to the main-axis).

CSS

.container {

align-items: stretch | flex-start | flex-end | c

https://css-tricks.com/snippets/css/a-guide-to-flexbox/ 6/10
26/11/22, 12:03 A Complete Guide to Flexbox | CSS-Tricks - CSS-Tricks
}

stretch (default): stretch to fill the


container (still respect min-width/max-
width)
flex-start / start / self-start: items
are placed at the start of the cross axis. The
difference between these is subtle, and is
about respecting the flex-direction
rules or the writing-mode rules.
flex-end / end / self-end: items are
placed at the end of the cross axis. The
difference again is subtle and is about
respecting flex-direction rules vs.
writing-mode rules.

center: items are centered in the cross-


axis
baseline: items are aligned such as their
baselines align

The safe and unsafe modifier keywords can


be used in conjunction with all the rest of
these keywords (although note browser
support (https://developer.mozilla.org/en-
US/docs/Web/CSS/align-items) ), and deal
with helping you prevent aligning elements
such that the content becomes inaccessible.

(#aa-align-content) align-
content

https://css-tricks.com/snippets/css/a-guide-to-flexbox/ 7/10
26/11/22, 12:03 A Complete Guide to Flexbox | CSS-Tricks - CSS-Tricks

This aligns a flex container’s lines within


when there is extra space in the cross-axis,
similar to how justify-content aligns
individual items within the main-axis.

Note: This property only takes effect on multi-line


flexible containers, where flex-wrap is set to
either wrap or wrap-reverse). A single-line
Hey!
flexible container (i.e. where flex-wrap is set to its
default value, no-wrap) will not reflect align-
content.

CSS
.container {

align-content: flex-start | flex-end | center |


}

normal (default): items are packed in their


default position as if no value was set.
flex-start / start: items packed to the
start of the container. The (more
supported) flex-start honors the flex-
direction while start honors the
writing-mode direction.

flex-end / end: items packed to the end of


the container. The (more support) flex-
end honors the flex-direction while
end honors the writing-mode direction.
center: items centered in the container

https://css-tricks.com/snippets/css/a-guide-to-flexbox/ 8/10
26/11/22, 12:03 A Complete Guide to Flexbox | CSS-Tricks - CSS-Tricks

space-between: items evenly distributed;


the first line is at the start of the container
while the last one is at the end
space-around: items evenly distributed
with equal space around each line
space-evenly: items are evenly
distributed with equal space around them
stretch: lines stretch to take up the
remaining space

The safe and unsafe modifier keywords can


be used in conjunction with all the rest of
these keywords (although note browser
support (https://developer.mozilla.org/en-
US/docs/Web/CSS/align-items) ), and deal
with helping you prevent aligning elements
such that the content becomes inaccessible.

(#aa-gap-row-gap-column-gap)
gap, row-gap, column-gap

The gap property (https://css-


tricks.com/almanac/properties/g/gap/)
explicitly controls the space between flex
items. It applies that spacing only between
items not on the outer edges.

CSS

.container {

display: flex;

...

gap: 10px;

https://css-tricks.com/snippets/css/a-guide-to-flexbox/ 9/10
26/11/22, 12:03 A Complete Guide to Flexbox | CSS-Tricks - CSS-Tricks
gap: 10px 20px; /* row-gap column gap */

row-gap: 10px;

column-gap: 20px;

The behavior could be thought of as a


minimum gutter, as if the gutter is bigger
somehow (because of something like
justify-content: space-between;) then
the gap will only take effect if that space
would end up smaller.

It is not exclusively for flexbox, gap works in


grid and multi-column layout as well.

(#aa-prefixing-flexbox) Prefixing Flexbox

(#aa-examples) Examples

(#aa-flexbox-tricks) Flexbox tricks!

(#aa-browser-support) Browser support

(#aa-bugs) Bugs

(#aa-related-properties) Related properties

(#aa-more-information) More information

(#aa-more-sources) More sources

https://css-tricks.com/snippets/css/a-guide-to-flexbox/ 10/10

You might also like