Tek-Tips is the largest IT community on the Internet today!

Members share and learn making Tek-Tips Forums the best source of peer-reviewed technical information on the Internet!

  • Congratulations gkittelson on being selected by the Tek-Tips community for having the most helpful posts in the forums last week. Way to Go!

height: 100% does not work in FireFox

Status
Not open for further replies.

gnubie

Programmer
Apr 16, 2002
103
US
I cannot get the height: 100% to fill the viewport in FireFox. I've read a lot of solutions to this problem and implemented them, but still NOT working. Tek-Tips is my last resort. I've validated both the HTML and the CSS -- no errors. Here's the code:

Code:
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01//EN"
   "[URL unfurl="true"]http://www.w3.org/TR/html4/strict.dtd"><html>[/URL]
<head>
<meta http-equiv="content-type" content="text/html; charset=windows-1250">
<title>Test FireFox height: 100%</title>
<style type='text/css'>
* html {
  height: 100%;
  margin:0;
  padding: 0;
}
div#container {
  position:absolute;
  top:0px;
  bottom:0px;
  left:0px;
  right:0px;
  width:100%;
  min-height:100%;
  background: black;
  margin: 0;
}
div#banner {
  margin: 0 auto;
  width: 800px;
  background: #FDD863;
  height: 50px;
  border: 1px solid green;
}
div#page {
  margin: 0 auto;
  height: 100%;
  width: 800px;
  border: 1px solid green;
  background: #FDD863;
}
div#links{
  float: left;
  width: 195px;
  height: 100%;
  border: 1px solid red;
}
div#main{
  float: left;
  width: 595px;
  padding-left: 3px;
  padding-right: 3px;
  background: #FDD863;
  border: 1px solid blue;
  height: 100%;
}
body {
  margin:0;
  padding:0;
  height:100%;
  font-family:georgia;
  font-size:12pt;
}

</style>
</head>
<body>
<div id='container'>
<div id='banner'>Banner</div>
<div id='page'>
<div id='links'>Links</div>
<div id='main'>Main

<h2 style='text-align: center'>Test FireFox height: 100%</h2>

<p>Lorem ipsum dolor sit amet, consectetur adipiscing elit. Maecenas sit amet purus nec ligula pellentesque egestas. Morbi ornare lacus et tortor. Etiam non odio vitae quam placerat tempus. Sed interdum, pede eget venenatis suscipit, est urna dapibus dolor, quis molestie leo diam quis ligula. Sed molestie massa a quam. Integer nisl nibh, venenatis sed, pulvinar a, pulvinar imperdiet, metus. Nunc turpis turpis, consectetur in, consectetur non, ornare ac, purus. Nullam faucibus, mi in condimentum semper, diam tortor consequat ante, ut ornare velit lectus aliquam sem. Vestibulum ante ipsum primis in faucibus orci luctus et ultrices posuere cubilia Curae; Sed eget orci quis magna tempus pharetra. Aenean dignissim egestas risus. Nulla massa. Vivamus feugiat odio sagittis nisl. Vestibulum vulputate lacinia sapien. Donec pede. Maecenas et justo vitae enim dictum facilisis.</p>

<p>Suspendisse et lorem vel neque ultricies elementum. Etiam bibendum, nunc nec interdum feugiat, arcu sem dapibus massa, in tempor lectus eros id ligula. Mauris ut est nec libero consequat dapibus. Quisque pede nisi, euismod ut, rhoncus id, feugiat venenatis, massa. Sed sapien mauris, placerat eu, aliquam eget, cursus vitae, libero. Praesent eget libero. Quisque laoreet, ligula non pharetra venenatis, mi elit scelerisque est, sed porta enim tellus at dolor. Aenean pede. Praesent quis mi. Mauris et metus fermentum magna aliquet mattis. Morbi a ligula a ligula imperdiet egestas. Fusce porttitor malesuada massa. Integer placerat nibh ac eros. Cum sociis natoque penatibus et magnis dis parturient montes, nascetur ridiculus mus. Sed vestibulum nibh quis quam. Mauris mi orci, sollicitudin ut, convallis a, placerat nec, ipsum. Nulla facilisi. Pellentesque ut dolor.</p>

<p>Praesent dui urna, dapibus sed, facilisis nec, hendrerit in, mi. Phasellus lacinia, ipsum vitae hendrerit euismod, mi sem ultrices ipsum, nec placerat justo leo convallis ante. Cras non est. Maecenas suscipit libero id purus. In interdum nisi vel nisl. Aliquam condimentum augue feugiat sem. Fusce et sem. Donec quis nisi. Nulla facilisi. Duis vehicula, ligula non mollis iaculis, arcu libero iaculis ante, sit amet tempus pede sem eu elit. Quisque in tellus. Integer rutrum. Integer nec metus vitae urna vehicula mollis. Pellentesque mattis. Ut gravida. Nam ligula. Donec ac neque non lacus venenatis tristique. Praesent cursus lacus ac augue. Nulla vel nibh.</p>
</div> <!-- end 'main' -->
</div> <!-- end 'page' -->
</div> <!-- end 'container' -->

</body>
</html>
 
Your error is here:
Code:
* html {
...
}
This is a hack selector for IE, because IE is the only browser that can actually find an element based on this selector. This literally says: html element that is within any element. Since html element never resides inside any other element, this selector will never find any matching elements.

Removing the * should make it work.

To make you understand better. 100% height always refers to the height of the container. If the height of the container is not specified, it defaults to auto: meaning, as high as all the content within the element. If you want to have any element within the page to be 100% high, you have to make sure that html and body are both 100% high.

However, your code seems to be unnecessary convoluted. What is the significance of using absolute positioning for the #container. This may only cause you problems in the future.

I would also like to warn you that 100% height will always stay 100% of the viewport. If your text extends beyond that, the text will spill out of its container.

[small]Do something about world cancer today: Comprehensive cancer control information at PACT[/small]
 
Thanks so much for your response. Yes the code was convoluted from every desperate attempt to fix the problem.

Below is a cleaner version of the code that is closer, but still doesn't expand to 100%. Assistance is still needed.

Code:
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01//EN"
   "[URL unfurl="true"]http://www.w3.org/TR/html4/strict.dtd"><html>[/URL]
<head>
<meta http-equiv="content-type" content="text/html; charset=windows-1250">
<title>Test FireFox height: 100%</title>
<style type='text/css'>
html {
  height: 100%;
  margin:0;
  padding: 0;
}
body {
  margin:0;
  padding:0;
  height:100%;
  font-family:georgia;
  font-size:12pt;
}
div#container {
  width:100%;
  min-height:100%;
  background: black;
  margin: 0;
}
div#banner {
  margin: 0 auto;
  width: 800px;
  height: 50px;
  border: 1px solid green;
  background: #FDD863;
}
div#page {
  margin: 0 auto;
  height: 100%;
  width: 800px;
  border: 1px solid blue;
/*  background: #FDD863; */
}
div#links {
  float: left;
  width: 100px;
  height: 100%;
  border: 1px solid red;
  background: #FDD863;
}
div#main{
  float: left;
  width: 686px;
  height: 100%;
  padding: 5px;
  border: 1px solid green;
  background: #FDD863;
}

</style>
</head>
<body>
<div id='container'>
<div id='banner'>Banner</div>
<div id='page'>
<div id='links'>Links</div>
<div id='main'>Main

<h2 style='text-align: center'>Test FireFox height: 100%</h2>

<p>Lorem ipsum dolor sit amet, consectetur adipiscing elit. Maecenas sit amet purus nec ligula pellentesque egestas. Morbi ornare lacus et tortor. Etiam non odio vitae quam placerat tempus. Sed interdum, pede eget venenatis suscipit, est urna dapibus dolor, quis molestie leo diam quis ligula. Sed molestie massa a quam. Integer nisl nibh, venenatis sed, pulvinar a, pulvinar imperdiet, metus. Nunc turpis turpis, consectetur in, consectetur non, ornare ac, purus. Nullam faucibus, mi in condimentum semper, diam tortor consequat ante, ut ornare velit lectus aliquam sem. Vestibulum ante ipsum primis in faucibus orci luctus et ultrices posuere cubilia Curae; Sed eget orci quis magna tempus pharetra. Aenean dignissim egestas risus. Nulla massa. Vivamus feugiat odio sagittis nisl. Vestibulum vulputate lacinia sapien. Donec pede. Maecenas et justo vitae enim dictum facilisis.1</p>

<p>Suspendisse et lorem vel neque ultricies elementum. Etiam bibendum, nunc nec interdum feugiat, arcu sem dapibus massa, in tempor lectus eros id ligula. Mauris ut est nec libero consequat dapibus. Quisque pede nisi, euismod ut, rhoncus id, feugiat venenatis, massa. Sed sapien mauris, placerat eu, aliquam eget, cursus vitae, libero. Praesent eget libero. Quisque laoreet, ligula non pharetra venenatis, mi elit scelerisque est, sed porta enim tellus at dolor. Aenean pede. Praesent quis mi. Mauris et metus fermentum magna aliquet mattis. Morbi a ligula a ligula imperdiet egestas. Fusce porttitor malesuada massa. Integer placerat nibh ac eros. Cum sociis natoque penatibus et magnis dis parturient montes, nascetur ridiculus mus. Sed vestibulum nibh quis quam. Mauris mi orci, sollicitudin ut, convallis a, placerat nec, ipsum. Nulla facilisi. Pellentesque ut dolor.2</p>

<p>Praesent dui urna, dapibus sed, facilisis nec, hendrerit in, mi. Phasellus lacinia, ipsum vitae hendrerit euismod, mi sem ultrices ipsum, nec placerat justo leo convallis ante. Cras non est. Maecenas suscipit libero id purus. In interdum nisi vel nisl. Aliquam condimentum augue feugiat sem. Fusce et sem. Donec quis nisi. Nulla facilisi. Duis vehicula, ligula non mollis iaculis, arcu libero iaculis ante, sit amet tempus pede sem eu elit. Quisque in tellus. Integer rutrum. Integer nec metus vitae urna vehicula mollis. Pellentesque mattis. Ut gravida. Nam ligula. Donec ac neque non lacus venenatis tristique. Praesent cursus lacus ac augue. Nulla vel nibh.3</p>

<p>Praesent dui urna, dapibus sed, facilisis nec, hendrerit in, mi. Phasellus lacinia, ipsum vitae hendrerit euismod, mi sem ultrices ipsum, nec placerat justo leo convallis ante. Cras non est. Maecenas suscipit libero id purus. In interdum nisi vel nisl. Aliquam condimentum augue feugiat sem. Fusce et sem. Donec quis nisi. Nulla facilisi. Duis vehicula, ligula non mollis iaculis, arcu libero iaculis ante, sit amet tempus pede sem eu elit. Quisque in tellus. Integer rutrum. Integer nec metus vitae urna vehicula mollis. Pellentesque mattis. Ut gravida. Nam ligula. Donec ac neque non lacus venenatis tristique. Praesent cursus lacus ac augue. Nulla vel nibh.4</p>

<p>Praesent dui urna, dapibus sed, facilisis nec, hendrerit in, mi. Phasellus lacinia, ipsum vitae hendrerit euismod, mi sem ultrices ipsum, nec placerat justo leo convallis ante. Cras non est. Maecenas suscipit libero id purus. In interdum nisi vel nisl. Aliquam condimentum augue feugiat sem. Fusce et sem. Donec quis nisi. Nulla facilisi. Duis vehicula, ligula non mollis iaculis, arcu libero iaculis ante, sit amet tempus pede sem eu elit. Quisque in tellus. Integer rutrum. Integer nec metus vitae urna vehicula mollis. Pellentesque mattis. Ut gravida. Nam ligula. Donec ac neque non lacus venenatis tristique. Praesent cursus lacus ac augue. Nulla vel nibh.5</p>
<p>Praesent dui urna, dapibus sed, facilisis nec, hendrerit in, mi. Phasellus lacinia, ipsum vitae hendrerit euismod, mi sem ultrices ipsum, nec placerat justo leo convallis ante. Cras non est. Maecenas suscipit libero id purus. In interdum nisi vel nisl. Aliquam condimentum augue feugiat sem. Fusce et sem. Donec quis nisi. Nulla facilisi. Duis vehicula, ligula non mollis iaculis, arcu libero iaculis ante, sit amet tempus pede sem eu elit. Quisque in tellus. Integer rutrum. Integer nec metus vitae urna vehicula mollis. Pellentesque mattis. Ut gravida. Nam ligula. Donec ac neque non lacus venenatis tristique. Praesent cursus lacus ac augue. Nulla vel nibh.6</p>
</div> <!-- end 'main' -->
</div> <!-- end 'page' -->
</div> <!-- end 'container' -->

</body>
</html>
 
Unfortunately, what you're trying will be difficult to achieve for a few reasons:

1. min-height works differently to height in a way that it does not provide child elements with definite height, which would enable these child elements to work with percentage height. In short, for this particular element, it means height 100% or more, but for child elements it means auto.

2. Your top banner is 50px in height, your main is 100%. That means that normally, your main will be hanging 50px over the bottom edge. This is actually what your code is telling it to do.

3. If you restrict height and width on most of your elements, there is a good chance your content will spill out of them.


There are ways to achieve what you're doing. The header would have to be positioned absolutely and main would have to have a dummy placeholder element for the header. Main column would have to have additional elements that would just hold the height at 100%. Footer again would have to be absolutely positioned (else it would fall off the screen).

While it is possible, I think it is not smart to do it. On a page with little content and on a large screen, having a footer way down does not look nice. Really, I do not understand the fascination of having a footer at the bottom of the screen. A footer that naturally follows the end of the text is much more pleasing to the eye. How would you like to have extra 70 pages in a book, just because the novel you read only had 130 pages and all books were done with 200 pages?

[small]Do something about world cancer today: Comprehensive cancer control information at PACT[/small]
 
Status
Not open for further replies.

Part and Inventory Search

Sponsor

Back
Top