Divs will expand with the content unless you set a fixed size (height, width or both). Consider:
<div id="foo">
The quick brown fox jumped over the lazy dog. The quick brown fox jumped over the lazy dog.
The quick brown fox jumped over the lazy dog. The quick brown fox jumped over the lazy dog.
The quick brown fox jumped over the lazy dog. The quick brown fox jumped over the lazy dog.
The quick brown fox jumped over the lazy dog. The quick brown fox jumped over the lazy dog.
The quick brown fox jumped over the lazy dog. The quick brown fox jumped over the lazy dog.
</div>
The div will be just big enough to contain all that text. Set a border on the div to make it easy to see:
#foo
{
border: solid 1px red;
}
Now set the width to 25%:
#foo
{
border: solid 1px red;
width: 25%;
}
The div is now 25% of its container, but the height expands to contain the content. If you now set a height that is smaller than the content (say 20px), the div now has a fixed height, but the cotnent doesn't fit, so it overflows (except in IE6, where the div actually expands to fit the content). The CSS overflow property defines how that overflow happens, and yes, if the content is too large then you get scroll bars.
Setting borders on elements is a really good way of seeing where elements are. The IE Developer Toolbar (and FireBug) have options to automatically show borders on elements.