いまどき ? いまさら ? clear fix のコード
float によるレイアウトフローをクリアランスする手法として知られる通称 "clear fix"、昔は長いコードを書いていましたが、今ならもっと短くても問題ないです。
しかし、最近見かけたある weblog の記事内では昔から知られる長いコードを利用していたので、日々 CSS を書く皆様はどんな感じにしているのか気になりました。
自分は
element{ /zoom : 1; }
element:after{ content : ''; display : block; clear : both; height:0; }
のようなコードをスニペットにして使い回しています。
昔から知られる clear fix のコードでは content : '.' がありましたが、これは Netscape のための対応です。"." が擬似的に追加されることにより、高さを 0 にしたり、表示を消したりとコードが長くなっていましたが、Netspace に対応しないのならこれらをバッサリなくすことができます。
また、Mac IE をもう対象にしなければいけないケースも少ないでしょう。なので Mac IE 用のコードもバッサリなくせます。
IE 6, 7 は hasLayout を true にすることができればいいので /zoom:1 があれば 6, 7 ともに対応することができます。IE 8 では :before, :after と content プロパティーに対応しているので問題ありません。
いま対応しなくてはいけないような PC 用 Web ブラウザーのことを考慮すれば 4 つのプロパティーを書くだけで対応できます。昔からの clear fix のコードを使っているかたはこの機会にスニペットを更新してみては ?
ちなみに、overflow プロパティーの値を visible 以外にして float のレイアウトフローをクリアランスすることもできますが、この方法はあまり積極的に使わないほうがよさそうです。例えば、Firefox で印刷時に意図しない印刷になってしまうことがあります。Firefox では overflow プロパティーの値が visible 以外の要素内では印刷時に改ページを避けようとするためです。
つまり、overflow:hidden が適用された要素は
- 現在のページに収まらなければ改ページして次のページに表示される
- 改ページ後、そのページ内に収まらなければページに収まらなかった部分は印刷されない
といった流れになり、印刷時におかしな余白があいてしまったりする原因になります。
あと、Takazudo さん曰く、focus したときなどの outline が切れてしまう問題もあるみたいです。

トラックバックURI
http://www.yomotsu.net/wp/wp-trackback.php?p=561
コメント
hirasawaさんからのコメント
2010年3月4日 23:43
印刷時に、visible に戻せば良いので、表現として、 “この方法はあまり積極的に使わないほうがよさそうです。” って書き方は、違和感を感じるかもー。 ボクがclearfixを殆ど使わない側の人間なのでそう感じるだけかもですが、このレベルの人が言う一言は初心者からしたら有無を言わさず使ってはいけないと取られても不思議じゃないかなーとか。コバさんからのコメント
2010年3月5日 10:32
印刷時の件に乗っかっておきますと、スクリーン用は印刷時に読み込まないようにしているので、僕の場合は関係ないですね。 まぁ、overflowは使っていませんがwneoなんとかさんからのコメント
2010年3月5日 11:05
overflowネタに便乗。 overflow:hidden は印刷だけじゃなくFirefoxでカーソルをドラッグしたりとかで文字選択するときに他の要素のテキストと併せて選択出来ないので出来れば避けたい派です。使わざるを得ない場面も多いですが。。hamashunさんからのコメント
2010年3月5日 19:24
overflow: auto; を使った際に、以前に一度だけ、IE8で謎のスクロールバーが出た事がありました。 それから若干及び腰です。 ただ、簡単なサンプル作成とか更新されないペラ1ページの時などは、overflowを使う事が多いです。 それ以外では、「もし何かあったら嫌だから」という理由で、結構古くから使われているコードを使い続けてますねー(たぶん杞憂)。 まあ何であれ、細かな長所短所はあると思うので、好みや状況に応じて使い分けるのが良いのかなーなんて思いました。Takazudoさんからのコメント
2010年3月5日 21:53
謎のスクロールバーがでるのは、もしかしたら、要素を右側に飛びださせた上で、overflow:hiddenしている場合かもしれないです。左側なら出ないのですが(text-indent:-9999px等でも分かるように)、右側だと出るようです。宇都宮ウエブ制作所» ブログアーカイブ » zen-codingにswfobjectなど微妙によく使うものを追加するさんからのコメント
2010年3月13日 14:42
[...] CSSのclearfixのコードなんかも いまどき ? いまさら ? clear fix のコード こちらを参考に書いてみました。 [...]ddよりdtの方が高い定義リスト(dl,dt,dd)を横並びさせる。 « 乱雑モックアップさんからのコメント
2010年5月6日 21:45
[...] fixを短くしました、Dwnoスニペットも変更した。いまどき ? いまさら ? clear fix のコード | ヨモツネット) [...]CSSについて « サウンドエフ 覚え書きさんからのコメント
2010年5月26日 12:00
[...] http://www.yomotsu.net/wp/?p=561 [...]ソゼさんからのコメント
2010年6月1日 15:13
試しに利用させていただいたのですが、Operaでおかしくなりません? marginが空いたり閉じたりしてます。hirasawaさんからのコメント
2010年6月9日 9:59
そういえば、コレ、Opera10 でクリア出来てなかったのか何なのか分からないけど、うまくいかない事有りました。 表示が変だなーと思って、昔からのclearfixにしたらなおったので。ゴブさんからのコメント
2010年6月29日 23:45
マージン相殺が絡んでmarginが適用されたりされなかったりするようです。 Firefoxでclearfixした次の要素にmargin-topを指定すると、clearfixしたものにまでmargin-topが現れました。 (3.0/3.6で確認) Operaではmarginが相殺されてしまいclearfixした次の要素のmargin-topが効きませんでした。 (10.5で確認) どちらもマージン相殺が絡んでいるようなので相殺されない条件例えばclearfixした要素にpadding-bottom:1pxなどとすると、これらの現象は起こらなくなります。 margin-top/bottomを使わないのであれば問題ないかもしれませんが、そうでないなら以下ぐらいが妥当かもしれません。 element:after{ content:”.”; display:block; clear:both; height:0; visibility: hidden; }links for 2010-08-09さんからのコメント
2010年8月10日 5:03
[...] 文字コード解析、変換。 (tags: 文字コード) いまどき ? いまさら ? clear fix のコード | ヨモツネット これはいいっすね。勉強になります。 (tags: clearfix) スタイルシート [...]コメントフォーム