Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Expanding the parent container with 100% height to account for floated content

Tags:

I'm struggling with a client project. All of my divs have no absolute positioning, height:100% for html, body, and container divs, and yet the static-content stops short of its contents (at 910px).

I can change the overflow property to auto, and the background will continue down to the end of the content, but it adds a scroll bar, and the bottom border of the static-content div stays in the same place (at 910px).

UPDATE: Development link was no longer valid, so I removed it. Suffice to say that Animuson's thorough explanation is the valuable part of this thread, and solved the problem of containers not expanding to match their content. – Ty

like image 839
Ty Morton Avatar asked Feb 25 '12 18:02

Ty Morton


People also ask

How do I make my Div take 100% height of parent DIV?

container div has two parent elements: the <body> and the <html> element. And we all know that the default value of the height property is auto , so if we also set the height of <body> and <html> elements to 100%, the resulting height of the container div becomes equal the 100% height of the browser window.

How do I make DIVS always fit in my parent div?

For width it's easy, simply remove the width: 100% rule. By default, the div will stretch to fit the parent container. Height is not quite so simple. You could do something like the equal height column trick.


1 Answers

You used the wrong overflow-y property for clearing, and you should set a min-height instead of a regular height. Try this:

#static-content {     background-color: #FFFFFF;     margin: 0 auto;     min-height: 100%; /* Set to minimum height so overflow doesn't get hidden */     overflow-y: hidden; /* HIDE overflow; I know, it doesn't make much sense */     position: relative;     width: 960px; } 

Floating Content by Itself

Given this green box which has a padding of 20px (for visibility), notice how a single red box floated to the left will expand past the boundary of its parent box. This is because floating content doesn't actually take up any "space" in the visual area. All other elements will expand underneath it, and only text will wrap around it.

Example 1

Clearing Floated Content in the Parent

In order to counter this and make the green box completely encompass the area of its child red box, we can add overflow: hidden to its styles. This will expand the box down far enough.

Example 2

Expanding the Parent to 100% Height

You might think that just adding height: 100% is the simplest way to make it expand to where it needs to be.However, the height property specifies an absolute height. Since the content which is floated does not actually take up any vertical space, our overflow: hidden property will cut off all the content that goes past the parent's height.

Example 3

Using a Minimum Height Instead

Since we want it to expand to at least a 100% height, we can use the min-height property to force it there and still maintain the "automatic" height needed to make the parent green box fully encompass the child red box, letting it push past the 100% only when it needs too.

Example 4

How You Were Set Up

All elements, by default, are set to overflow: visible so that property didn't really change anything. The only difference you had between this and the first example I provided was that you had a height: 100% set on the element. So the parent was expanding to 100% height but still not encompassing the full height of its child red box.

Example 5

like image 50
animuson Avatar answered Oct 20 '22 03:10

animuson