REDLINE MAGAZINE | あまり知らないかもしれないclearの話REDLINE MAGAZINEトップページへ

すべてのエントリを見る

あまり知らないかもしれないclearの話

一般的にclearプロパティとは「回りこみを解除する」という解説が多く、100%その通りなのだが、どういう仕組でフロートさせたボックスを解除しているのかについてはあまり触れられてない気がするので今日のネタはそんな話。

私の愛読書「Web標準の教科書」でもこの辺りは詳しく解説されてあったのだが、同著ではclearは先行するフロートされたボックスに隣接するかどうかを定めるプロパティと書かれている。

なんとなくclearプロパティでfloatを解除する仕組が気になって仕様書を調べてみた。

9.5.2 Controlling flow next to floats:
the 'clear' property

以下、どういう仕組なのかの解説、引用・・・

left
The top margin of the generated box is increased enough that the top border edge is below the bottom outer edge of any left-floating boxes that resulted from elements earlier in the source document.
right
The top margin of the generated box is increased enough that the top border edge is below the bottom outer edge of any right-floating boxes that resulted from elements earlier in the source document.
both
The generated box is moved below all floating boxes of earlier elements in the source document.
none
No constraint on the box's position with respect to floats.

要するに、例えばクリアするボックスの上に左フロートさせたボックスがある場合「clear:left;」を適応したボックスはそのボックスの上側にフローとしているボックス分の上マージンを追加して上にある左フロートのボックスよりも必ず下にくるようにしているという仕組らしい。

文章だと分かりにくいので図にするとこんな感じ。

クリア時の様子

んでもって最終的に仕様書では、

When the property is set on floating elements, it results in a modification of the rules for positioning the float. An extra constraint (#10) is added:

* The top outer edge of the float must be below the bottom outer edge of all earlier left-floating boxes (in the case of 'clear: left'), or all earlier right-floating boxes (in the case of 'clear: right'), or both ('clear: both').

こんな感じでclearが使用された際にはfloat9つの掟に1つ追加して10個目の掟が現れると。

ここまで考えた上で今まで制作したサイトのページでclearを使った部分の事を思い出してみた。こういう時、FF、NN、Operaではクリアした時に、仕様書のとおりフロートしてるボックスの高さ分マージンが入って上のボックスとクリアしたボックスがピタっとくっつくわけですが、IEだと妙に余白があるなーと思ってたりしたわけですよ。これはIEさんのいつもの独自解釈と考えていいでしょうか。いいんでしょうね・・・。
>>どんなん?という方のためにサンプル(IEと他FFなどで見比べると・・・はぁ。)

<< 印刷用cssのリンクを属性セレクタで活用する | cssでポップアップネタ >>

トラックバック

このエントリーのトラックバックURL:
http://redline.hippy.jp/cgi/mt/mt-tb.cgi/81

コメント (5)

あけましておめでとうございます。

floatとclearの仕組み面白いですね

IEは上下のマージンを相殺しない扱いになってしまうみたいですね
http://cssbug.at.infoseek.co.jp/detail/winie/b141.html
仕様かバグかは分かりませんが・・・

>ひかるさん、こんにちわ。
あけましておめでとうございます(遅っw)

あーなるほど。やっぱりマージンの相殺が関係してましたかー・・・。これはIEお得意の仕様という名のバグですな(w

情報ありがとうございました~。
んでもって今年も宜しくお願いします。

こんにちは
とても古い記事のようですが

Pタグによって余分に改行されているだけかと
BRタグとSPANタグで指定すれば同じ表示になりますよ。

訂正です

上記のように指定すると、次はSPANタグにて背景色の表示方法に差が出ました

DIVタグに指定してみるとうまくいきましたので、
IEではPタグの場合、マージンの相殺がうまくいってないらしいです。

結局上の人と同じですねorz

>晋さん、コメントありがとうございます。
わざわざ検証してくださってありがとうございます!参考にさせていただきます。
マージンの相殺関係はその部分に絶対背景を置かないといけない場合、特殊なIEだけ時々困るんですが、最近背景とか気にしなくていい場合はIEだけ意図せぬ余白があっても別に閲覧に支障がでるわけでもないし、デザイン的にどうしても許されないってケース以外は放置してます。その余白詰めたいだけにハック使ったり変にマークアップいじるのも余計な事のような気がしてしまって・・・。いろんなブラウザと共存していくのって大変ですね><




※コメント欄に「<」「>」等を含むソースを記載する場合は実体参照に変換してください。

このページの一番上へ

その他の情報など

最近のコメント

PHP オブジェクト指向の勉強
  • Red - 2010.01.08
  • hogepage - 2010.01.21
  • Red - 2010.01.22
  • - 2011.11.27
  • houseiii - 2011.11.27
Fireworks トリミング画像を一括書出 CS4編
  • Iper - 2009.06.27
  • Red - 2009.06.27
  • mala - 2011.11.17
  • Red - 2011.11.18
jQueryでボックスを上下左右中央に簡単配置
overflow を使用したボックス背景のこと
  • - 2007.12.13
  • Red - 2007.12.13
  • - 2007.12.13
  • Red - 2007.12.13
  • hj - 2011.09.23
IE6 → 透過PNG+overflow=混ぜるな危険(追記有)

メッセージを送る

こちらのメッセージ送信フォームは閉鎖させて頂きました。
御用の方は新しい方のブログ にコメント頂くか、 連絡用のフォーム もありますので、そちらからご連絡ください。