すべての div が同じ幅のように見えます。スタックしたい列の周りに含まれる列 div を作成しないのはなぜですか?
<div class="col1">
<div class="a"></div>
<div class="e"></div>
<div class="i"></div>
</div>
<div class="col2">
<div class="b"></div>
<div class="f"></div>
<div class="k"></div>
</div>
<div class="col3">
<div class="c"></div>
<div class="g"></div>
<div class="l"></div>
</div>
<div class="col4">
<div class="d"></div>
<div class="h"></div>
<div class="m"></div>
</div>
各列を左にフロートすると、幅と高さが既に指定されているように見える内部 div が適切な位置に収まります。列はコンテナーの左にフロートされるだけなので、列に同じクラスを与えることもできます。