メリークリスマスリボン

初級ブログカスタマイズなどweb系知識メモ、Illustratorで作った無料素材を公開

SAB-webカスタマイズ

CSS やってはいけないこと floatとは

ブログテンプレートをコンパクトにカスタマイズしているんですが、
どうやらIE6などでレイアウトが崩れている模様…。

ブラウザによって、全く同じように表示されないという問題がちょくちょく悩みの種になるのですが、
CSSで【やってはいけない】という部類の注意事項についてメモしておきます。

今回はfloatに関連する代表的な注意事項についてのメモです。

floatの働きに関する説明図

floatとは

ブログテンプレートを例にとると、
記事表示部分-サイドカラム…のように、divなどの箱が横方向(左右)に分割されて表示されている部分があります。

floatとは、左右どっちに寄せるか?という「回り込み」を指定するプロパティで、

float: left;

float: right;

float: none;(回り込みをさせない)

のように、left(左)に回り込ませる・right(右)に回り込ませる、といったようにCSS部に記述して使います。

floatに関する説明は、なんだかややこしく感じるのですが、
floatで左か右か、方向を指定しているdivやimgなどの要素は、その指定した方向に寄せられる、といったような感じです。(その後に続く要素は、指定した方向とは反対の方向に表示されます。)

floatしている要素は、指定した方向に寄せることができる。

floatを指定する要素にやってはいけないこと

ブログテンプレートなどには、必ずと言っていいですがfloatプロパティが使われています。
このfloatには、
「こんなことをすると、レイアウトが崩れたり不具合が起きます…!」という、
やってはいけない注意事項があります。

「別に、意図したように表示されているよ。」という場合は問題ないですが、
ブラウザ(InternetExplorerやFirefoxなど)の種類によって(各々のバージョンによっても)、 必ずしも全く同じように表示されているとは限らないので、注意が必要です。

  • floatで横に並んだ要素が足して100%になってはいけない
    98%以下になるように幅を指定する。
    ※98%を越える場合、横に並べたいのに、下に並んでしまったりする。
  • floatした要素には必ず横幅(width)を指定すること
  • floatした要素にmarginやpaddingを指定してはいけない
    InternetExplorer6では、marginやpaddingの幅を2倍に計算してしまうバグがある為。
    floatした要素にdisplay:inline;を記述するこでと回避できる。

    IEは"widthのサイズはpaddingとborderを含めてのサイズ"と誤認している為。
    ・paddingは一切指定せず常に0にする。
    ・borderは、borderのみで宣言させ、padding、marginを0にする。
    ・widthとmarginは一緒に指定するが、borderとpaddingは指定せず0にする。
    (2009年10月30日訂正)
  • floatした要素の後に設置されている要素(上図の青い要素)に、clearをしてはいけない。
    floatは回り込みの解除(clear)を指定する必要があるが、
    floatによって回り込みをさせられている要素にclearをかけてはいけない。
clearプロパティのメモ

clear: left;(左にfloatした要素の回り込みの解除)
clear: right;(右に〃)
clear: both;(左右両方にfloatした要素の回り込みを全て解除)
clear: none;(解除をしない)



その他 画像をfloatで横に並べるとずれる

画像をfloatするとずれる

画像1つ1つにfloatを指定すると、上の図のような問題がIE6やIE7で発生する場合がある。
これを回避するには、
リストプロパティを使って、リストプロパティにfloatを指定することで回避できる。

<ul> <li><img src="画像のURI"></li> <li><img src="画像のURI"></li> <li><img src="画像のURI"></li> <li><img src="画像のURI"></li> </ul>

li {
float: left;
}



こちらもどうぞ 関連エントリー

コメント一覧

某社ウェブプログラマー

>InternetExplorer6では、marginやpaddingの幅を2倍に計算してしまうバグがある為。
その発想は間違いです。
InternetExplorer6.0での解釈バグは確かに存在しますが正しくは、widthの解釈を間違えているのです。


通常の場合、widthで指定したサイズの外側にpadding、次にborderラインがあり、その外側にmarginが存在します。

IEは"widthのサイズはpaddingとborderを含めてのサイズ"と誤認している為、widthのサイズの内側にborder、その内側にpaddingがあり、逆の外側にmarginが存在します。

結論として、両方に対応した正しいcssの書き方としては「widthと一緒にpadding、borderを指定しない」と言う事です。
・paddingは一切指定せず常に0にする。
・borderは、borderのみで宣言させ、padding、marginを0にする。
・widthとmarginは一緒に指定するが、borderとpaddingは指定せず0にする。
上記3点を守ればIEとのレイアウトの乱れは解消できます。

※ XHTMLを使ってない方は、ソースの1行目(2行目ではダメです、1行目のみです)にDOCTYPE宣言を書く事でFirefoxなどと同じ標準モードとして認識させる事ができます。

やまと名無し子

追記:
参考URLが見つかったのでどうぞ。
http://www.ono-note.com/2007/07/ie6csswidthpadding.html
http://adp.daa.jp/archives/000265.html

akina@AIRRAT

詳しいコメント、本当にありがとうございます。
管理人です。

>
×InternetExplorer6では、marginやpaddingの幅を2倍に計算してしまうバグがある為。
◎"widthのサイズはpaddingとborderを含めてのサイズ"と誤認している為。

なるほど、大変分かりやすいです。

>marginやpaddingの幅を2倍に計算してしまう
と書いたのは、しばらく前に記事なので経緯を忘れてしまったのですが、おそらく、本か何かサイトの記述をメモしたような感じに書いたのだと思います。

・paddingは一切指定せず常に0にする。
・borderは、borderのみで宣言させ、padding、marginを0にする。
・widthとmarginは一緒に指定するが、borderとpaddingは指定せず0にする。

ですね、
本当にありがとうございます。
記事を訂正させていただきたいと思います。






コメントを書く

  • 管理人にだけメッセージを送る

トラックバック


この記事にトラックバックする(FC2ブログユーザー)

この記事へのトラックバック

welcome
SAB-webカスタマイズを購読
新着記事を すぐにおしらせ



Comment
データ取得中...
RSSリンクの表示
リンクなど


あわせて読みたいブログパーツ