Это из-за уменьшения полей . Поля - это не то, что окружает отдельный элемент, например, отступы. Вместо этого поле определяет расстояние между элементами. Если родительский элемент не имеет полей или отступов (как и элементы div в вашем коде), поля дочерних элементов (h2 и p) определяют расстояние между родительскими элементами, а не дочерними элементами.
В настоящее время следует избегать сворачивания полей, когда у родительских элементов установлен фон, поскольку IE (по крайней мере, до версии 7) не обрабатывает правильно свертываемые поля.
Если вы просто установите некоторые отступы для своих элементов div (похоже, вы должны их иметь в любом случае), поля не будут разрушаться вне их.