CSS Flexbox allows us to easily format our HTML like you never knew was possible. With flexbox it is possible to align vertically and horizontally, easily. Like the sound of it? Yeah me too.
It is also fantastic for general layout of your website or app, it is easy to learn, supported well (in all modern browsers) and is great to work with, not to mention it doesn’t take long to get to grips with at all!
Here is a list of the flexbox properties that can be used to position out elements in css:
CSS that can be applied to the container
display: flexbox | inline-flex; flex-direction: row | row-reverse | column | column-reverse; flex-wrap: nowrap | wrap | wrap-reverse; flex-flow: <‘flex-direction’> || <‘flex-wrap’> justify-content: flex-start | flex-end | center | space-between | space-around; align-items: flex-start | flex-end | center | baseline | stretch; align-content: flex-start | flex-end | center | space-between | space-around | stretch;
CSS that can be applied to items/elements in the container
order: <integer>; flex-grow: <number>; /* default 0 */ flex-shrink: <number>; /* default 1 */ flex-basis: <length> | auto; /* default auto */ flex: none | [ <'flex-grow'> <'flex-shrink'>? || <'flex-basis'> ] align-self: auto | flex-start | flex-end | center | baseline | stretch;
So now you have your toolkit but you ask “What do I do with my tools, how do I use these?”, well let me show you.
display: flex; is just to tell your browser hey I would like to use flexbox with this container, please. This will initialize this box as a flex container and apply some default flex properties.
This is what out container looks like without
display: flex; we get the below, the default flex properties are applied causing it to show as such
flex-direction: allows us to control how the items in the container display, do you want them left to right, right to left, top to bottom or bottom to top? you can do all these easily with setting the flex direction of the container.
Flexbox applies row as the default for the direction. Here is what they all look like:
Flexbox by default will try to fit all elements into one row but you can change this with the flex-wrap property, this allows you to set if the elements will spill over or not, there are 3 properties for
flex-wrap: nowrap this is the default and will look to fit everything in one row from left to right.
flex-wrap: wrap this will allow items to go on to create multiple rows and from left to right.
flex-wrap: wrap-reverse allows for items to be on multiple rows but displaying right to left this time.
Flex flow combines the use of
flex-direction into one property, it is used by first setting the direction and then the wrap.
flex-flow: column wrap; is an example if how to use this.
justify-content is a a property to align items in the container along the main axis (this changes depending on how content is displayed). There are multiple options for this and it allows us to fill any empty space on rows but defining how we want to ‘justify’ it.
Here are our options when we justify our content
flex-start | flex-end | center | space-between | space-around;.
Align items allows us to align items along the cross-axis. This allows content to be positioned in many different ways using justify content and align items together.
align-items: flex-start | flex-end | center | baseline | stretch;
This is for aligning items with multiple lines, it is for aligning on the cross-axis and will have no effect on content that is one line.
align-content: flex-start | flex-end | center | space-between | space-around | stretch;
Games and Apps
Flexbox Defense is a web game that teaches flexbox the fun way.
Flexbox Froggy is also a web game that teaches flexbox the fun way.
Flexbox in 5 is a web app that allows you to be able to see how flexbox works with a few simple controls.
Flexyboxes is an app that allows you too see code samples and change parameters to see how flexbox works visually.
Flexbox Patters is a website that shows off loads of flexbox examples