HTML5 Zone is brought to you in partnership with:

My name is Sagar Ganatra and I'm from Bangalore, India. I'm currently employed with Adobe India and I work there as a ColdFusion Engineer. At Adobe, I have worked on various features of ColdFusion and ColdFusion Builder. I'm very much passionate of web technologies and have a very good understanding of jQuery, Flex, HTML5, Java and of course ColdFusion. Sagar H is a DZone MVB and is not an employee of DZone and has posted 38 posts at DZone. You can read more from them at their website. View Full User Profile

CSS FlexBox Layout

08.17.2012
| 3008 views |
  • submit to reddit
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.
Published at DZone with permission of Sagar H Ganatra, author and DZone MVB. (source)

(Note: Opinions expressed in this article and its replies are the opinions of their respective authors and not those of DZone, Inc.)