Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

CSS 100% Height, and then Scroll DIV not page

Tags:

html

css

scroll

Okay so I haven't been able to find a question with an answer yet, so I decided to make my own.

I am trying to create a 100% fluid layout, which technically I have done. http://stickystudios.ca/sandbox/stickyplanner/layout/index2.php

BUT, what I want to do now, is to make the page 100% in HEIGHT... But I don't want the page to scroll I want the inner DIV to scroll.

So I believe in short I want it to detect the height of the viewport screen, go 100%, and then IF content is longer then the screen, scroll the specific DIV, NOT the page.

I hope this makes sense.

Thanks in advance. Justin

like image 635
Justin Avatar asked Apr 28 '10 16:04

Justin


People also ask

How do I force a div to scroll?

Set the overflow-x:hidden; and overflow-y:auto; that will automatically hide the horizontal scroll bar and present only vertical scrollbar. Here the scroll div will be vertically scrollable.

What does height 100% do CSS?

height: 100% gives the element 100% height of its parent container. height: auto means the element height will depend upon the height of its children.

How do I get the scroll height of a div?

To get the height of the scroll bar the offsetHeight of div is subtracted from the clientHeight of div. OffsetHeight = Height of an element + Scrollbar Height. ClientHeight = Height of an element. Height of scrollbar = offsetHeight – clientHeight.

What is scrolling overflow?

overflow: scrollSetting the value to scroll , the overflow is clipped and a scrollbar is added to scroll inside the box. Note that this will add a scrollbar both horizontally and vertically (even if you do not need it): You can use the overflow property when you want to have better control of the layout.


3 Answers

<html>   <body style="overflow:hidden;">     <div style="overflow:auto; position:absolute; top: 0; left:0; right:0; bottom:0">     </div>   </body> </html> 

That should do it for a simple case

I believe this will work for your case

<html>   <body style="overflow:hidden;">       <div id="header" style="overflow:hidden; position:absolute; top:0; left:0; height:50px;"></div>       <div id="leftNav" style="overflow:auto; position:absolute; top:50px; left:0; right:200px; bottom:50px;"></div>       <div id="mainContent" style="overflow:auto; position:absolute; top:50px; left: 200px; right:0; bottom:50px;"></div>       <div id="footer" style="overflow:hidden; position:absolute; bottom:0; left:0; height:50px"></div>   </body> </html> 

this example will give you a static header and footer and allow the navigator and content area to be scrollable.

like image 159
John Hartsock Avatar answered Sep 29 '22 17:09

John Hartsock


This is a different way to do this with all abs panels, it will fail on IE6, but I can provide the workaround CSS for IE6 if that is a requirement:

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN" "http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd"> <html xmlns="http://www.w3.org/1999/xhtml"> <head>  <title>Fluid Layout</title>  <meta http-equiv="content-type" content="application/xhtml+xml; charset=UTF-8" />  <style rel="stylesheet" type="text/css">     body { background-color:black; margin:0px; padding:0px; }     .pageBox { position:absolute; top:20px; left:20px; right:20px; bottom:20px; min-width:200px}     .headerBox { position:absolute; width:100%; height:50px; background-color:#333; }     .contentBox { position:absolute; width:100%; top:52px; bottom:32px; background-color:blue; }     .footerBox { position:absolute; width:100%; height:30px; background-color:#ccc; bottom:0px; }             .contentBoxLeft { position:absolute; width:20%; height:100%; background-color:#b6b6b6; }     .contentBoxRight { position:absolute; width:80%; left:20%; height:100%; background-color:white; }         .contentBoxLeft,     .contentBoxRight { overflow:auto; overflow-x:hidden; }  </style>  </head> <body>&nbsp;     <div class="pageBox">         <div class="headerBox">Header</div>         <div class="contentBox">             <div class="contentBoxLeft">ContentLeft asdf asdf adsf assf</div>             <div class="contentBoxRight">ContentRight asdf asdfa dasf asdf asdfd asfasd fdasfasdf dasfsad fdasfds<br /><br />asdfsad ff asdf asdfasd</div>         </div>         <div class="footerBox">Footer</div>     </div> </body> </html> 
like image 41
David Avatar answered Sep 29 '22 17:09

David


make overflow:auto for the div

like image 42
Mahesh Velaga Avatar answered Sep 29 '22 19:09

Mahesh Velaga