I have a layout with two columns - a left div and a right div.
The right div has a grey background-color, and I need it to expand vertically depending on the height of the user's browser window. Right now the background-color ends at the last piece of content in that div.
I've tried height:100%, min-height:100%;, etc.
Best Solution
There are a couple of CSS 3 measurement units called:
Viewport-Percentage (or Viewport-Relative) Lengths
What are Viewport-Percentage Lengths?
From the linked W3 Candidate Recommendation above:
These units are
vh(viewport height),vw(viewport width),vmin(viewport minimum length) andvmax(viewport maximum length).How can this be used to make a divider fill the height of the browser?
For this question, we can make use of
vh:1vhis equal to 1% of the viewport's height. That is to say,100vhis equal to the height of the browser window, regardless of where the element is situated in the DOM tree:HTML
CSS
This is literally all that's needed. Here is a JSFiddle example of this in use.
What browsers support these new units?
This is currently supported on all up-to-date major browsers apart from Opera Mini. Check out Can I use... for further support.
How can this be used with multiple columns?
In the case of the question at hand, featuring a left and a right divider, here is a JSFiddle example showing a two-column layout involving both
vhandvw.How is
100vhdifferent from100%?Take this layout for example:
The
ptag here is set to 100% height, but because its containingdivhas 200 pixels height, 100% of 200 pixels becomes 200 pixels, not 100% of thebodyheight. Using100vhinstead means that theptag will be 100% height of thebodyregardless of thedivheight. Take a look at this accompanying JSFiddle to easily see the difference!