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 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:
I have created three elements which 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 be 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 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.
There is another property called ‘flex-direction’ which 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 a 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.