Div 100% height works on Firefox but not in IE

105,876

Solution 1

I think "works fine in Firefox" is in the Quirks mode rendering only. In the Standard mode rendering, that might not work fine in Firefox too.

percentage depends on "containing block", instead of viewport.

CSS Specification says

The percentage is calculated with respect to the height of the generated box's containing block. If the height of the containing block is not specified explicitly (i.e., it depends on content height), and this element is not absolutely positioned, the value computes to 'auto'.

so

#container { height: auto; }
#container #mainContentsWrapper { height: n%; }
#container #sidebarWrapper { height: n%; }

means

#container { height: auto; }
#container #mainContentsWrapper { height: auto; }
#container #sidebarWrapper { height: auto; }

To stretch to 100% height of viewport, you need to specify the height of the containing block (in this case, it's #container). Moreover, you also need to specify the height to body and html, because initial Containing Block is "UA-dependent".

All you need is...

html, body { height:100%; }
#container { height:100%; }

Solution 2

I've been successful in getting this to work when I set the margins of the container to 0:

#container
{
   margin: 0 px;
}

in addition to all your other styles

Solution 3

Its hard to give you a good answer, without seeing the html that you are actually using.

Are you outputting a doctype / using standards mode rendering? Without actually being able to look into a html repro, that would be my first guess for a html interpretation difference between firefox and internet explorer.

Solution 4

I'm not sure what problem you are solving, but when I have two side by side containers that need to be the same height, I run a little javascript on page load that finds the maximum height of the two and explicitly sets the other to the same height. It seems to me that height: 100% might just mean "make it the size needed to fully contain the content" when what you really want is "make both the size of the largest content."

Note: you'll need to resize them again if anything happens on the page to change their height -- like a validation summary being made visible or a collapsible menu opening.

Solution 5

I've done something very similar to what 'tvanfosson' said, that is, actually using JavaScript to constantly monitor the available height in the window via events like onresize, and use that information to change the container size accordingly (as pixels rather than percentage).

Keep in mind, this does mean a JavaScript dependency, and it isn't as smooth as a CSS solution. You'd also need to ensure that the JavaScript function is capable of correctly returning the window dimensions across all major browsers.

Let us know if one of the previously mentioned CSS solutions work, as it sounds like a better way to fix the problem.

Share:
105,876

Related videos on Youtube

Marcel
Author by

Marcel

Updated on April 15, 2020

Comments

  • Marcel
    Marcel about 4 years

    I have a container div that holds two internal divs; both should take 100% width and 100% height within the container.

    I set both internal divs to 100% height. That works fine in Firefox, however in IE the divs do not stretch to 100% height but only the height of the text inside them.

    The following is a simplified version of my style sheet.

    #container
    {
       height: auto;
       width: 100%;
    }
    
    #container #mainContentsWrapper
    {
       float: left;
    
       height: 100%;
       width: 70%;
       margin: 0;
       padding: 0;
    }
    
    
    #container #sidebarWrapper
    {      
       float: right;
    
       height: 100%;
       width: 29.7%;
       margin: 0;
       padding: 0;
    }
    

    Is there something I am doing wrong? Or any Firefox/IE quirks I am missing out?

  • alemomo
    alemomo about 13 years
    ++ You will spend much less time getting it right with javascript than you will trying to do it with css. I know it's "bad practice" in the IT world to do it this way...but in the business world, "bad practice" is spending 10 hours doing something in css that could be done in 5 mins with javascript.
  • ANeves
    ANeves almost 9 years
    @Mr.JavaScript yes, but with a grain of salt: then you need to think about the window resizing, or collapsible items toggling or... "quick fixes" are often not quick.
  • carlo denaro
    carlo denaro almost 8 years
    great explanation dude