То, что вы видите, это один из случаев незнакомца margin collapsing.
Если родители и дети являются блочными элементами и нет ничего (набивки, границы и т.д.), отделяя их вертикальные поля, тогда эти поля рухнут. Свернутые поля - это когда два соседних поля не добавляются (как и следовало ожидать), но вместо этого отображается большее из двух. В случае родительский-ребенок развалившийся край заканчивается вне родителя. Вы можете прочитать более подробную информацию в разделе Родительский и первый/последний ребенок в приведенной выше ссылке.
Установка родительского элемента в inline-block
или float:left;
Ввод его или ряд других вещей (см. Ссылку для более полного списка) приведет к поломке полей. Это приводит к поведению, к которому мы привыкли: маржа ребенка появится внутри родителя, добавив к его общей высоте, и поле родителя также будет отображаться.
Это действительно сложный пример. Почему бы вам не удалить 90 процентов кода, который не является частью проблемы? –