Это не потому, что элемент имеет фон или границу, которую он полностью расширяет с помощью родителя, а потому, что это блочный элемент. Фон или рамка просто позволяют увидеть, насколько велик элемент на самом деле.
Ширина по умолчанию на самом деле не "100%", а "auto". Практическое отличие состоит в том, что элемент, включающий границы, использует 100% ширины вместо ширины, за исключением того, что границы становятся 100% ширины (делая ширину, включая границы, шире, чем его родительский элемент).
Если вы не хотите, чтобы элемент использовал доступную ширину, вы можете сделать его плавающим элементом. Тогда он будет приспосабливаться к своему содержанию.
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<title>Test</title>
<style type="text/css">
#test1 {
float: left;
border:1px solid #ccc;
background-color: #ddd;
}
#test2 {
float: left;
clear: both;
border:1px solid #000;
background-color: #ccf;
}
</style>
</head>
<body>
<div id="test1">
Test information!
</div>
<div id="test2">
Test information!
</div>
</body>
</html>