Square DIV where height is equal to viewport
I need to create a DIV where width=height
, and height=100%
of the viewport (which, obviously, is variable).
In other words, a perfectly square DIV that calculates it's dimensions based on the height of the viewport. Elements within that DIV will take their dimensions as percentages of the parent-DIV's height & width.
It seems to me like this should be simple to do in CSS, but I've gotten stuck with it! Any pointers would be much appreciated.
Solution 1:
There is a neat trick using pure css that i stumbled upon:
#square {
width: 100%;
height: 0;
padding-bottom: 100%;
}
Hope that helps.
http://blog.brianjohnsondesign.com/2013/maintain-aspect-ratio-for-html-element-using-only-css-in-a-responsive-design/
Solution 2:
CSS only solution : vh
units
To make the element resize according to the height of the viewport you can use vh units :
vh : 1/100th of the height of the viewport. [source MDN]
Example:
body{margin:0;}
div{
background:gold;
height:100vh;
width:100vh;
}
<div></div>
Fiddle DEMO
This will make the width and height of the element equal to the height of the viewport.
Bowser support for vh units is IE9+. More info here
Solution 3:
You can do this with jquery (or pure javascript if you prefer).
With jquery:
<div id="square">
</div>
$(document).ready(function(){
var height = $(window).height();
$('#square').css('height', height);
$('#square').css('width', height);
});