Over a million developers have joined DZone.

CSS FlexBox Layout

DZone's Guide to

CSS FlexBox Layout

· Web Dev Zone ·
Free Resource

Access over 20 APIs and mobile SDKs, up to 250k transactions free with no credit card required

Today I was trying to understand the FlexBox layout introduced in CSS and was impressed with what a few CSS properties can do to help you solve layout issues. The standard itself has gone through some iterations, but I believe the current one is stabilised and is not likely to change completely. Anyway, the layout proposed here helps you align the elements in the DOM tree horizontally and vertically. It also helps you reorder these elements.

To get a gist of what I’m saying, take a look at the below diagram:

Aligning using flexbox.

I have created three elements that are then placed inside a container. Now, there are different ways in which I may want to align these elements; for instance, I want these elements to be centered vertically but aligned to the right horizontally. I can use the float property and try to achieve that. But say if I want these elements to be aligned such that it is equally spaced horizontally, then I might have to add a few more properties and achieve the layout. Instead I can use new properties ‘justify-content’ and ‘align-items’ to achieve this layout. The ‘justify-content’ property is used to align the elements in the container horizontally and it can take the values – ‘center’, ‘flex-start’, ‘flex-end’, ‘space-between’ and ‘space-around’. Similarly, the property ‘align-items’ can be used to align the elements vertically, and it can take the values ‘center’, ‘flex-start’, ‘flex-end’, ‘baseline’ and ‘stretch’. Also, one needs to set the display property to flex.
#box {
        display: -webkit-flex;
display: -moz-flex;
display: flex;
-webkit-justify-content: center;
-moz-justify-content: center;
justify-content: center;
-webkit-align-items: center;
-moz-align-items: center;	
align-items: center;
-webkit-flex-direction: row;
-moz-flex-direction: row;
flex-direction: row;

view raw gistfile1.css This Gist brought to you by GitHub.
There is another property called ‘flex-direction’. That allows you to change a row to a column, i.e. the elements would be aligned vertically. It is also possible to reverse the direction, i.e. the last element in the container would appear first in the list. This property can take the values – ‘row’, ‘row-reverse’, ‘column’ and ‘column-reverse’. As observed in the above code block these properties are vendor specific and hence they are prefixed accordingly.

I thought of creating and inserting images into this post, but instead I have created a demo page where you can see these properties in action:

As of now these properties are supported only on Chrome 21+ and not available in any other browser.

#1 for location developers in quality, price and choice, switch to HERE.


Published at DZone with permission of

Opinions expressed by DZone contributors are their own.

{{ parent.title || parent.header.title}}

{{ parent.tldr }}

{{ parent.urlSource.name }}