Это поведение, как оно определено в блочной модели CSS:
8.3.1 Сжимающиеся поля
В этой спецификации выражение
Снижение полей означает, что
прилегающие поля (без подкладки или
пограничные зоны отделяют их) от двух или
больше ящиков (которые могут быть рядом с одним
другой или вложенный) объединить в
единичное поле.
В CSS2 горизонтальные поля никогда
разрушаться.
Вертикальные поля могут упасть между
определенные поля:
- Два или более смежных вертикальных поля блоков блоков в нормальном потоке рушатся. Результирующая ширина поля - это максимальная ширина смежных полей. В случае отрицательных полей абсолютный максимум отрицательных соседних полей вычитается из максимума положительных соседних полей. Если нет положительных полей, абсолютный максимум отрицательных соседних полей вычитается из нуля.
- Вертикальные поля между плавающим и любым другим ящиком не разрушаются.
- Поля абсолютно и относительно расположенных ящиков не разрушаются.
http://www.w3.org/TR/CSS2/box.html
Основанием для этого может быть то, что если вы устанавливаете (вертикальное) поле для чего-либо, вы просто хотите убедиться, что между границей или заполнением этого элемента и границей или заполнением остается хотя бы такое большое пространство следующий элемент (например, два абзаца).
Если вы хотите, чтобы поле содержалось в div (то есть, чтобы div расширялся), вам нужно установить отступ или границу в верхней и нижней части div.