CSS FlexBox Layout
Join the DZone community and get the full member experience.
Join For FreeToday 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:
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.
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.
To get a gist of what I’m saying, take a look at the below diagram:
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; }
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.
CSS
Property (programming)
Element
Published at DZone with permission of Sagar Ganatra, DZone MVB. See the original article here.
Opinions expressed by DZone contributors are their own.
Trending
-
Getting Started With the YugabyteDB Managed REST API
-
Top 10 Pillars of Zero Trust Networks
-
Implementing a Serverless DevOps Pipeline With AWS Lambda and CodePipeline
-
Operator Overloading in Java
Comments