ロデの気まぐれコラムー -2ページ目

ロデの気まぐれコラムー

へっぽこWeb屋の駆け足ドラマー。
音楽・映画・お笑い・こどもなど、すごく気まぐれです。

前回の続きです!

前の記事
簡単そうで覚える事の多い、クセ者floatの話 1日目
簡単そうで覚える事の多い、クセ者floatの話 2日目

floatを覚える上で重要な事がもうひとつあります。
今日はこんなボックスを作りましょう!

$ロデの気まぐれコラムー

割とよく見ますよね。
画像があって、
回り込んでテキスト。
親のboxには紫の背景色が入ってます。


まず前回の要領で組んでみます。

html
<div id="box">
<img src="hashibiro" width="127" height="130">
<div class="text">
<p>ハシビロコウ</p>
<p>ハシビロコウは、<br>上野動物園などで見ることが<br>できます。</p>
</div>
</div>


css
#box {width:320px; background-color:#6666cc;}
img {float:left; margin:15px;}
#box .text {float:right;width:160px; margin-top:15px; font-size:12px; color:#ffffcc;}
#box .text p{font-family:'メイリオ',Meiryo,'MS Pゴシック',sans-serif;
font-size:14px; font-weight:bold;}


大箱の親div 、imgはfloatさせて、テキストを子divで囲ってfloatさせました。

floatさせたら横幅入れるんでしたよね。
あとはフォントの設定も入れました。

では見てみましょう。

IE
$ロデの気まぐれコラムー

firefox
$ロデの気まぐれコラムー

ありゃりゃ、背景が変です。ieでは途中で切れて、firefoxでは全く出ません


実は大箱の高さは、floatした場合の小箱の高さを含んでくれないんです。
floatさせるって事は、浮いてる状態なんですね。
だから、大箱には何もない状態になっちゃってるんです。
あっちなみにieが背景ちょっと出てるのは、ieの挙動の方がバグです。
背景が出ないほうが正しいです。
ややこしいよね・・

この辺の解釈は難しいので、自分も間違ってるかもしれません。とにかく、floatさせたら、最後は解除したboxをもう一つ入れないといけないんです。


で、解除するにはclearを使います。
clear:bothを使えば、box内の全部のfloatが解除されるので、普通に高さが認識されます。

基本は、大箱の中にfloatさせた小箱を並べた場合、clearさせたboxで終わらせるのが決まりです。
図でいうとこんな感じ。
$ロデの気まぐれコラムー

でも、今回作ろうとしてるものはfloatさせた小箱2つで完結しちゃいますよね。

無理やり、
みたいに、空div作っちゃう事も実はありますが、コンテンツが何もないのに空div作るのは良くないです。ソースも汚くなります。

そこで、どうしてもfloatさせた小箱を並べた状態で大箱divを閉じたい場合に使う呪文があります。

それが「clearfix」です。
原理を説明すると、結構長くなります。知っておいて欲しいっちゃ欲しいですが、めんどくさいので説明は省きます。(それでも知りたい!って方はググってください)

これを一度cssに書きこめば、classで呼び出してすぐに使うことができます。
.clearfix {width:100%;}
.clearfix:after{
content: "";
display: block;
clear: both;}

floatさせたdivで終わらせたい場合、親divにこのクラスclearfixを指定しましょう。

ソースです。
<div id="box clearfix">
<img src="a.gif" width="130" height="130">
<div id="migi"><p>ハシビロコウ</p>ハシビロコウは、<br>上野動物園などで見ることが<br>できます。</div>
</div>


直りましたよね。背景の画像だけでなく、margin-bottomを親divに指定した場合などもclearfixしないと反映されません。

floatさせたdivの挙動がおかしい場合は、clearの問題をまず考えましょう。
また、float関連のバグもめちゃくちゃ多いので、プレビューしたブラウザとfloatの関係は調べておいて損はないです。


後半めんどくなってしまいましたが、floatの解説は以上でございます。

【関連】Mr.カラー C46 クリアー (透明)