2 つのブロック要素を隣り合わせに配置すると、それらのマージンが重なり合うことに長い間気付きました。このようなもの:

両方とも<div>がありますがmargin: 1em、 がと衝突すると、両方のmargin1マージンが重なり合うだけです。ここを参照してください: http://jsfiddle.net/39XmC/margin-bottommargin2margin-top
私が期待していたのは、次のようなものでした。

両方<div>の s は、実際には各余白にスペースを与え、互いの余白に重なりません。
これは、要素をフローティングまたはオーバーフローすることで修正できることを知っています。私の質問:
- [理論的に]なぜこれが起こるのですか? マージンは積み重ねるべきではありませんか?
 - これはブラウザのデフォルトの動作ですか? この動作を持たないプロジェクトに取り組んだことを覚えているからです。