通常、floatさせている画像やボックスなどがある場合何らかの形でclearするか、その親要素にfloatを指定しないと、親要素からはみ出してしまいます。
コレはCSS2.0の仕様なんで正しい表示なんですが、どうしても親要素にfloatなどが使えず、やむなくclear:bothをbrなりdivにクラス指定して解決してたりって事があったかと思います。
IEの場合はwidth、もしくはheightを指定する事で解決できますが、コレはバグなんで他のモダンブラウザでは解決できません。
ソコでかなり便利に使えるテクニックが、clearfix。
使い方は、clearしたい親要素に下記のように記述。
div:after {
content: ".";
display: block;
visibility: hidden;
height: 0.1px;
font-size: 0.1em;
line-height: 0;
clear: both;
}
IE7はコレに対応していないので、IE7用に、
div {
display: inline-block;
}
と指定するか、IE独自拡張のzoomを使っても回避できます。
div {
zoom: 100%;
}
:after擬似要素を利用してclearします。
コレ考えた人頭いいなーと思います。
とてもボクじゃ考え付かない...
そういえばclearfixとは直接関係が無いですが、height:1%を使いIE対策としてはみ出さないようにしたり、peek-a-booバグ対策でheightを指定している場合、IE7だとその辺修正されているので、場合によってはIE7だけすんごい事になっているかも知れません。
heightの使い方には留意した方が良さそうです。
---- こっから続き
07/04/01追記:
clearfixがハックなのかどうなのか?
っていうトークをしてて、
ボクは「仕様通りの事をしてても、特定のブラウザを意図した表示にさせる方法」みたいなのをハックとして読んでて、
相手は「仕様通りの事に関してはハックというのはおかしいんじゃないか?」
と意見がズレてました。
まぁどっちでもいいんすけど、一応clearfixに関してはハックという言葉ははずしておきました。
そうなると子セレクタを利用したってのは、ぜんぜんハックでもなんでもないんですよね。
ボクの場合は、IE6に言う事をきかせる手法という感じなんでそういってますが。
まぁ子セレクタに関してのエントリーは、自分でも別にハックじゃないよなーとか思ったりしながら書いてました。
お近くの人と議論になった際には、「どっちでもええやん」か「確かにそうですよね」辺りでいいかなぁと。
いまさらカテゴリを移動するにも適所が見つからないので、このままでいきます。
Track Back [2]
Clearfix
内部要素に浮動ボックスを含んだ親要素のボックスは、浮動ボックスに応じて高さの拡大はしません※1。浮動ボックスの高さに応じて親要素のボックスを拡大するには、2つの方法が...
by cubeLabo PHP,Javascript,Web標準などWeb制作覚書|2007年11月26日(月)
clearfix
通常、floatさせている画像やボックスなどがある場合何らかの形でclearする...
by ホームページ制作のためのリンク集|2008年09月25日(木)











comment [5]
1 - 通りすがり さん
>clearして上げるか
上げる…「してあげる」のことでしょうか
それとも私の知識が物足りないだけ?
2007年5月 3日 21:34
2 - hira@管理人 さん
あ、どうもです。
ボクがおバカさんなんで、あまり気にしないで下さい。
ありがとうございました。
2007年5月 3日 21:43
3 - チョットチョット さん
IEのバグはホント、アドレナリンが湧き出ますね。
clearfixですが、他ハックとかも使っていろいろしてましたが・・・・
背景画像を使って、入れ子を3つ連続でしましたが、
表示は案の定×
これなるべくシンプルにしたいと、
XHTMLに単純に<br clear="all">を入れる事で
解決してしまいました。
何じゃ~これ。
2007年7月11日 21:09
4 - CSS楽しい人 さん
clearするのを目的に<br />を入れるのは「XHTML」の構造上、不要なタグなので、あんまり良くない。と聞きました。
できるだけCSS側で処理を行いましょう。
2007年8月24日 00:34
5 - たc さん
衝撃!
これまで散々を使ってました!
もう使わなくていいとは
無知でした。
今までのソースが恥ずかしい・・。
ありがとうございます!
2007年9月 5日 11:41