float の解除と margin の相殺


HTML と CSS を書いていて行き詰まる所は大抵 float 関係と margin 関係です。今日も float を解除した後の margin が効かないハマリに遭遇した。具体的には、height を指定した container で float している奴らを囲んでいる (いつもの手法) にもかかわらず、後続するエレメントの margin-top が全く効かないというもの。会社で 1 番目か 2 番目に CSS に詳しい人に聞いたらあっさり解決でした。なんと、まあ、根本的な原因は typo でしたが……。

また、高さが不定な float 野郎達の流れを解除しつつ margin-top を指定するには、後続する空の div に clear 要素を書けばよいとのこと。どうやら、clear と margin-top は同時に指定しない方が良いらしい。ふむふむ。

さらに、CSS に詳しい人から学んだ恐るべき margin の仕様。私、margin の collapse (相殺) を完全にナメておりました。上下に隣接した div と div の間の margin を指定するとき「今日は top と bottom どっちに書こうかな」などと思っておりましたが (いい加減な……)、値が同じであれば相殺されるので、両方に書いても文法上は OK なんですね。いつも、一方方向の margin でレイアウトしがち……。

最後に、脳天を直撃したのが border や padding の有無で margin の相殺が変わるということ。ズガーン。CSS レイアウトをテストするために 1px の border を書いただけで、微妙に見た目が崩れる原因はこれだったのか。と納得。

CSS はまだまだ学ぶべき事が多いなー。

カテゴリー: CSS   パーマリンク

コメントをどうぞ

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です

*

次のHTML タグと属性が使えます: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>