How to make a div 100% height of the browser window

HtmlCssHeight

Html Problem Overview


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.

Html Solutions


Solution 1 - Html

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: > The viewport-percentage lengths are relative to the size of the initial containing block. When the height or width of the initial containing block is changed, they are scaled accordingly.

These units are vh (viewport height), vw (viewport width), vmin (viewport minimum length) and vmax (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: 1vh is equal to 1% of the viewport's height. That is to say, 100vh is equal to the height of the browser window, regardless of where the element is situated in the DOM tree:

HTML

<div></div>
CSS

div {
    height: 100vh;
}

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 vh and vw.

How is 100vh different from 100%?

Take this layout for example:

<body style="height: 100%">
    <div style="height: 200px">
        <p style="height: 100%; display: block;">Hello, world!</p>
    </div>
</body>

The p tag here is set to 100% height, but because its containing div has 200 pixels height, 100% of 200 pixels becomes 200 pixels, not 100% of the body height. Using 100vh instead means that the p tag will be 100% height of the body regardless of the div height. Take a look at this accompanying JSFiddle to easily see the difference!

Solution 2 - Html

If you want to set the height of a <div> or any element, you should set the height of <body> and <html> to 100% too. Then you can set the height of element with 100% :)

Here is an example:

body, html {
  height: 100%;
}

#right {
  height: 100%;
}

Solution 3 - Html

If you’re able to absolutely position your elements,

position: absolute;
top: 0;
bottom: 0;

would do it.

Solution 4 - Html

You can use the view-port unit in CSS:

HTML:

<div id="my-div">Hello World!</div>

CSS:

#my-div {
    height: 100vh; /* vh stands for view-port height, 1vh is 1% of screen height */
}

Solution 5 - Html

You can use vh in this case which is relative to 1% of the height of the viewport...

That means if you want to cover off the height, just simply use 100vh.

Look at the image below I draw for you here:

How to make a div 100% height of the browser window?

Try the snippet I created for you as below:

.left {
  height: 100vh;
  width: 50%;
  background-color: grey;
  float: left;
}

.right {
  height: 100vh;
  width: 50%;
  background-color: red;
  float: right;
}

<div class="left"></div>
<div class="right"></div>

Solution 6 - Html

All the other solutions, including the top-voted one with vh are sub-optimal when compared to the flex model solution.

With the advent of the CSS flex model, solving the 100% height problem becomes very, very easy: use height: 100%; display: flex on the parent, and flex: 1 on the child elements. They'll automatically take up all the available space in their container.

Note how simple the markup and the CSS are. No table hacks or anything.

The flex model is supported by all major browsers as well as IE11+.

html, body {
  height: 100%;
}
body {
  display: flex;
}

.left, .right {
  flex: 1;
}

.left {
  background: orange;
}

.right {
  background: cyan;
}

left
right

Learn more about the flex model here.

Solution 7 - Html

You don't mention a few important details like:

  • Is the layout fixed width?
  • Are either or both of the columns fixed width?

Here's one possibility:

body,
div {
  margin: 0;
  border: 0 none;
  padding: 0;
}

html,
body,
#wrapper,
#left,
#right {
  height: 100%;
  min-height: 100%;
}

#wrapper {
  margin: 0 auto;
  overflow: hidden;
  width: 960px; // width optional
}

#left {
  background: yellow;
  float: left;
  width: 360px; // width optional but recommended 
}

#right {
  background: grey;
  margin-left: 360px; // must agree with previous width 
}

<html>
<head>
  <title>Example</title>
</head>

<body>
  <div id="wrapper">
    <div id="left">
      Left
    </div>

    <div id="right"></div>
  </div>
</body>

</html>

There are many variations on this depending on which columns need to be fixed and which are liquid. You can do this with absolute positioning too but I've generally found better results (particularly in terms of cross-browser) using floats instead.

Solution 8 - Html

This is what worked for me:

<div style="position:fixed; top:0px; left:0px; bottom:0px; right:0px; background: red;"> </div>

Use position:fixed instead of position:absolute, that way even if you scroll down the division will expand to the end of the screen.

Solution 9 - Html

Here's a fix for the height.

In your CSS use:

#your-object: height: 100vh;

For browser that don't support vh-units, use modernizr.

Add this script (to add detection for vh-units)

// https://github.com/Modernizr/Modernizr/issues/572
// Similar to http://jsfiddle.net/FWeinb/etnYC/
Modernizr.addTest('cssvhunit', function() {
    var bool;
    Modernizr.testStyles("#modernizr { height: 50vh; }", function(elem, rule) {   
        var height = parseInt(window.innerHeight/2,10),
            compStyle = parseInt((window.getComputedStyle ?
                      getComputedStyle(elem, null) :
                      elem.currentStyle)["height"],10);
        
        bool= !!(compStyle == height);
    });
    return bool;
});

Finally use this function to add the height of the viewport to #your-object if the browser doesn't support vh-units:

$(function() {
	if (!Modernizr.cssvhunit) {
		var windowH = $(window).height();
    	$('#your-object').css({'height':($(window).height())+'px'});
	}
});

Solution 10 - Html

Even with all of the answers here, I was surprised to find that none really solved the problem. If I used 100vh height/min-height, the layout broke when the content was longer than a page. If I instead used 100% height/min-height, the layout broke when the content was less than the page height.

The solution I found, which solved both cases, was to combine the top two answers:

html, body, #mydiv {
  height: 100%;
  min-height: 100vh;
}

Solution 11 - Html

100vw = 100% of the width of the viewport.

100vh = 100% of the height of the viewport.

If you want to set the div width or height 100% of browser-window-size you should use:

For width: 100vw

For height: 100vh

Or if you want to set it smaller size, use the CSS calc function. Example:

#example {
    width: calc(100vw - 32px)
}

Solution 12 - Html

Try this - tested:

body {
  min-height: 100%;
}

#right, #left {
  height: 100%;
}

Edit: 2020 update:

You can use vh now:

#right, #left {
  height: 100vh
}

Solution 13 - Html

100% works differently for width and height.

When you specify width: 100%, it means "take up 100% of the available width from the parent element or width of the window."

When you specify height: 100%, it only means "take up 100% of available height from the parent element." This means if you don't specify a height at a top level element, the height of all the children will be either 0 or height of the parent, and that is why you need to set the topmost element to have a min-height of window height.

I always specify the body to have a min-height of 100vh and it makes positioning and calculations easy,

body {
  min-height: 100vh;
}

Solution 14 - Html

A full page is called a 'viewport' and you can design an element according to its viewport in CSS3.

Such units are called viewport-percentage lengths and are relative to the size of the initial containing block.

  • Viewport-Height is called vh. The complete height of a page is 100vh.
  • Viewport-Width is called vw. The complete height of a page is 100vw.
  • There also exist vmin (viewport minimum length) and vmax (viewport maximum length).

So now, your problem can easily be solved by adding the following to your CSS:

.classname-for-right-div /*You could also use an ID*/ { 
  height: 100vh;
}

Here is information about the Viewport-relative lengths

Solution 15 - Html

Add min-height: 100% and don't specify a height (or put it on auto). It totally did the job for me:

.container{    	
	margin: auto;
	background-color: #909090;
	width: 60%;
	padding: none;
	min-height: 100%;
}

Solution 16 - Html

Simplest way is to do it like this.

div {
background: red;
height: 100vh;
}
body {
margin: 0px;
}

<div></div>

Solution 17 - Html

This worked for me:

html, body {
    height: 100%; /* IMPORTANT!!! Stretches viewport to 100% */
}

#wrapper {
    min-height: 100%; /* Minimum height for a modern browser */
    height:auto !important; /* Important rule for a modern browser */
    height:100%; /* Minimum height for Internet Explorer */
    overflow: hidden !important; /* Firefox scroll-bar */
}

Taken from this page.

Solution 18 - Html

Try to set height:100% in html & body

html, 
body {
    height: 100%;
}

And if you want to 2 div height same use or set the parent element display:flex property.

Solution 19 - Html

There are several methods available for setting the height of a <div> to 100%.

Method (A):

html,
body {
  height: 100%;
  min-height: 100%;
}
.div-left {
  height: 100%;
  width: 50%;
  background: green;
}
.div-right {
  height: 100%;
  width: 50%;
  background: gray;
}

<div class="div-left"></div>
<div class="div-right"></div>

Method (B) using vh:

html,
body {
  height: 100%;
  min-height: 100%;
}
.div-left {
  height: 100vh;
  width: 50%;
  background: green;
  float: left;
}
.div-right {
  height: 100vh;
  width: 50%;
  background: gray;
  float: right;
}

<div class="div-left"></div>
<div class="div-right"></div>

Method (c) using flex box:

html,
body {
  height: 100%;
  min-height: 100%;
}
.wrapper {
  height: 100%;
  min-height: 100%;
  display: flex;
}
.div-left {
  width: 50%;
  background: green;
}
.div-right {
  width: 50%;
  background: gray;
}

<div class="wrapper">
  <div class="div-left"></div>
  <div class="div-right"></div>
</div>

Solution 20 - Html

Here is something that is not exactly like what you had in previous answers, but it could be helpful to some:

body {
  display: flex;
  flex-direction: column;
  height: 100vh;
  margin: 0px;
}

#one {
  background-color: red;
}

#two {
  margin-top: 0px;
  background-color: black;
  color: white;
  overflow-y: scroll;
}

https://jsfiddle.net/newdark/qyxkk558/10/

Solution 21 - Html

Block elements consume the full width of their parent, by default.

This is how they meet their design requirement, which is to stack vertically.

> 9.4.1 Block formatting > contexts > > In a block formatting context, boxes are laid out one after the other, > vertically, beginning at the top of a containing block.

This behavior, however, does not extend to height.

By default, most elements are the height of their content (height: auto).

Unlike with width, you need to specify a height if you want extra space.

Therefore, keep these two things in mind:

  • unless you want full width, you need to define the width of a block element
  • unless you want content height, you need to define the height of an element

.Contact {
  display: flex;     /* full width by default */
  min-height: 100vh; /* use full height of viewport, at a minimum */
}

.left {
  flex: 0 0 60%;
  background-color: tomato;
}

.right {
  flex: 1;
  background-color: pink;
}

body { margin: 0; } /* remove default margins */

<div class="Contact">
  <section class="left">
    <div class="">
      <h1>Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum.</h1>
    </div>
  </section>
  <section class="right">
    <img />
  </section>
</div>

Solution 22 - Html

One of the options is using CSS table. It has great browser support and even works in Internet Explorer 8.

JSFiddle Example

html, body {
  height: 100%;
  margin: 0;
}
.container {
  display: table;
  width: 100%;
  height: 100%;
}
.left, .right {
  display: table-cell;
  width: 50%;
}
.right {
  background: grey;
}

<div class="container">
  <div class="left"></div>
  <div class="right"></div>
</div>

Solution 23 - Html

Just use the "vh" unit instead of "px", which means view-port height.

height: 100vh;

Solution 24 - Html

> Try This Once...

*{
  padding:0;
  margin:0;
}
.parent_div{
  overflow:hidden;
  clear:both;
  color:#fff;
  text-align:center;
}

.left_div {
  float: left;
  height: 100vh;
  width: 50%;
  background-color: blue;

}

.right_div {
  float: right;
  height: 100vh;
  width: 50%;
  background-color: green;

}

<div class=" parent_div">
  <div class="left_div">Left</div>
  <div class="right_div">Right</div>
</div>

Solution 25 - Html

Use FlexBox CSS

Flexbox is a perfect fit for this type of problem. While mostly known for laying out content in the horizontal direction, Flexbox actually works just as well for vertical layout problems. All you have to do is wrap the vertical sections in a flex container and choose which ones you want to expand. They’ll automatically take up all the available space in their container.

Solution 26 - Html

You need to do two things, one is to set the height to 100% which you already did. Second is set the position to absolute. That should do the trick.

html,
body {
  height: 100%;
  min-height: 100%;
  position: absolute;
}

  

Source

Solution 27 - Html

You can use display: flex and height: 100vh

html, body {
  height: 100%;
  margin: 0px;
}
body {
  display: flex;
}

.left, .right {
  flex: 1;
}

.left {
  background: orange;
}

.right {
  background: cyan;
}

<div class="left">left</div>
<div class="right">right</div>

Solution 28 - Html

<!-- 
vw: hundredths of the viewport width.
vh: hundredths of the viewport height.
vmin: hundredths of whichever is smaller, the viewport width or height.
vmax: hundredths of whichever is larger, the viewport width or height.
-->
<div class="wrapper">
  <div class="left">
    Left
  </div>
  <div class="right">
    Right
  </div>
</div>

.wrapper {
  display: -webkit-box;
  display: -ms-flexbox;
  display: flex;
  -ms-flex-wrap: wrap;
  flex-wrap: wrap;
  height: 100vh; // Height window (vh)
}
.wrapper .left{
  width: 80%; // Width optional, but recommended
}
.wrapper .right{
  width: 20%; // Width optional, but recommended
  background-color: #dd1f26;
}

Solution 29 - Html

Actually what worked for me best was using the vh property.

In my React application I wanted the div to match the page high even when resized. I tried height: 100%;, overflow-y: auto;, but none of them worked when setting height:(your percent)vh; it worked as intended.

Note: if you are using padding, round corners, etc., make sure to subtract those values from your vh property percent or it adds extra height and make scroll bars appear. Here's my sample:

.frame {
  background-color: rgb(33, 2, 211);
  height: 96vh;
  padding: 1% 3% 2% 3%;
  border: 1px solid rgb(212, 248, 203);
  border-radius: 10px;
  display: grid;
  grid-gap: 5px;
  grid-template-columns: repeat(6, 1fr);
  grid-template-rows: 50px 100px minmax(50px, 1fr) minmax(50px, 1fr) minmax(50px, 1fr);
}

Solution 30 - Html

Now use height:100vh; for fixed window Height

<style>
 .header-top{height:100vh; background:#000; color:#fff;display:flex;align-items:center;padding:10px; justify-content: space-around;}
 .header-top ul{list-style:none;padding:0; margin:0;display:flex;align-items:center;  }
 .header-top ul li{padding:0px 10px;}
</style>
   <div class="header-top">
       <div class="logo">Hello</div>
       <ul>
          <li>Menu</li>
          <li>About Us</li>
         <li>Contact US</li>
         <li>Login</li>
     </ul>
  </div>

Solution 31 - Html

Try the following CSS:

html {
    min-height: 100%;
    margin: 0;
    padding: 0;
}

body {
    height: 100%;
}

#right {
    min-height: 100%;
}

Solution 32 - Html

if you set html and body height to 100% so it will cover whole page and if you set any particular div minimum height to 100% so it will cover whole window like this:

CSS

html,body{
 height:100%;
}

div#some-div{
min-height:100%;

}

REMEMBER

> This will only work if div's direct parent is body, as percentage always inherited from the direct parent and by doing above css code you are telling to div that inherit the height 100% from direct parent (body) and makes it your min-height: 100%

Another way

simply put div height to 100vh,its mean 100 viewport height

CSS

div#some-div{
 height:100vh

}

Solution 33 - Html

> This stuff will resize height of content automatically according to > your browser. I hope this will work for you. Just try this example > given below.

You have to set up only height:100%.

html,body {
  height: 100%;
  margin: 0;
}
.content {
  height: 100%;
  min-height: 100%;
  position: relative;
}
.content-left {
  height: auto;
  min-height: 100%;
  float: left;
  background: #ddd;
  width: 50%;
  position: relative;
}

#one {
  background: url(http://cloud.niklausgerber.com/1a2n2I3J1h0M/red.png) center center no-repeat scroll  #aaa;
  width: 50%;
  position: relative;
  float: left;
}

#two {
 background: url(http://cloud.niklausgerber.com/1b0r2D2Z1y0J/dark-red.png) center center no-repeat scroll #520E24;
  width: 50%;
  float: left;
  position: relative;
  overflow-y: scroll;
}

<div class='content' id='one'></div>
<div class='content-left' id='two'></div>

Solution 34 - Html

If you use position: absolute; and jQuery, you could use

$("#mydiv").css("height", $(document).height() + "px");

Solution 35 - Html

Easiest:

html,
body {
  height: 100%;
  min-height: 100%;
}
body {
  position: relative;
  background: purple;
  margin: 0;
  padding: 0;
}
.fullheight {
  display: block;
  position: relative;
  background: red;
  height: 100%;
  width: 300px;
}

<html class="">

<body>
  <div class="fullheight">
    This is full height.
  </div>
</body>

</html>

Solution 36 - Html

You can use the following CSS to make a div 100% of the height of the browser window:

display: block;
position: relative;
bottom: 0;
height: 100%;

Solution 37 - Html

Stupidly easy solution which supports cross-domain and also supports browser re-size.

<div style="height: 100vh;">
   <iframe src="..." width="100%" height="80%"></iframe>
</div>

Adjust the iframe height property as required (leave the div height property at 100vh).

Why 80%? In my real-world scenario I have a header inside the div, before the iframe, which consumes some vertical space - so I set the iframe to use 80% instead of 100% (otherwise it would be the height of the containing div, but start after the header, and overflow out the bottom of the div).

Solution 38 - Html

Even though this solution is done with jQuery I though it may be useful for anyone doing columns to fit the screen size.

For columns starting at the top of the page, this solution is the simplest.

body,html{
  height:100%;
}

div#right{
  height:100%
}

For columns that are not starting at the top of the page (for example: if they are starting below the header).

<script>
	 $(document).ready(function () {
	 	var column_height = $("body").height();
	 	column_height = column_height - 100; // 100 is the header height
	 	column_height = column_height + "px";
     	$("#column").css("height",column_height);
    });
</script>

First method applies the body height to it and the columns as well, which means that is starting_pixels + height100%.

The second method gets the height of page shown to the user by getting the height of the body and then subtracts the header size to know how much height is left to display the column.

Attributions

All content for this solution is sourced from the original question on Stackoverflow.

The content on this page is licensed under the Attribution-ShareAlike 4.0 International (CC BY-SA 4.0) license.

Content TypeOriginal AuthorOriginal Content on Stackoverflow
QuestionmikeView Question on Stackoverflow
Solution 1 - HtmlJames DonnellyView Answer on Stackoverflow
Solution 2 - HtmlAriona RianView Answer on Stackoverflow
Solution 3 - HtmlTinisterView Answer on Stackoverflow
Solution 4 - HtmlMrGeekView Answer on Stackoverflow
Solution 5 - HtmlAlirezaView Answer on Stackoverflow
Solution 6 - HtmlAirenView Answer on Stackoverflow
Solution 7 - HtmlcletusView Answer on Stackoverflow
Solution 8 - HtmlMajdaView Answer on Stackoverflow
Solution 9 - HtmlJonas SandstedtView Answer on Stackoverflow
Solution 10 - HtmlmachineghostView Answer on Stackoverflow
Solution 11 - HtmlРусланView Answer on Stackoverflow
Solution 12 - HtmllukaszkupsView Answer on Stackoverflow
Solution 13 - HtmlDinesh PandiyanView Answer on Stackoverflow
Solution 14 - HtmlSK-the-LearnerView Answer on Stackoverflow
Solution 15 - HtmlRemus SimionView Answer on Stackoverflow
Solution 16 - HtmlEMILOView Answer on Stackoverflow
Solution 17 - HtmltestingView Answer on Stackoverflow
Solution 18 - HtmlMohammed JavedView Answer on Stackoverflow
Solution 19 - HtmlSantosh KhalseView Answer on Stackoverflow
Solution 20 - Htmlnewdark-itView Answer on Stackoverflow
Solution 21 - HtmlMichael BenjaminView Answer on Stackoverflow
Solution 22 - HtmlStickersView Answer on Stackoverflow
Solution 23 - HtmlkhalifehView Answer on Stackoverflow
Solution 24 - HtmlSunil R.View Answer on Stackoverflow
Solution 25 - Htmlrobross0606View Answer on Stackoverflow
Solution 26 - HtmlPrabhakar UndurthiView Answer on Stackoverflow
Solution 27 - HtmlThuc NguyenView Answer on Stackoverflow
Solution 28 - HtmlRamNiwas SharmaView Answer on Stackoverflow
Solution 29 - HtmlJimmyFlashView Answer on Stackoverflow
Solution 30 - HtmlPriya MaheshwariView Answer on Stackoverflow
Solution 31 - HtmlProblemChildView Answer on Stackoverflow
Solution 32 - HtmlSunderam DubeyView Answer on Stackoverflow
Solution 33 - HtmlRudraView Answer on Stackoverflow
Solution 34 - HtmlJohn Smith OptionalView Answer on Stackoverflow
Solution 35 - HtmlTony SmithView Answer on Stackoverflow
Solution 36 - Htmlmohammad nazariView Answer on Stackoverflow
Solution 37 - HtmlyoucantryreachingmeView Answer on Stackoverflow
Solution 38 - HtmlzurfyxView Answer on Stackoverflow