Note: この記事は、3年以上前に書かれています。Webの進化は速い!情報の正確性は自己責任で判断してください。
ある程度は基礎を抑えている人用に考えてみたもの。CSSコーディングする時の注意点とか。仕事で使えるかどうか実験中。
- float は width と必ずセットで記述する
- position は width となるべくセットで記述する
- display:block; と width はなるべくセットで記述する
- padding を width と同時に指定している場合は、IE5の幅に注意する
- margin を使用する場合、他要素のmarginとの打消し合いに注意する
- 継承が他の要素に与える影響を考慮する
- 複雑なfloatを使うくらいなら table を使用する
以上の7つのルールを守れば、CSSレイアウトにおける致命的な問題の殆どは回避できるでしょう。これでも巧くいかなかった場合はバグ報告サイトを当たるか、最寄のコーダに相談してください。このルールは、以下3つの理由に基づきます。
- IEでの表示ズレの殆どは、幅か高さを指定してやれば解決する
- 特定の指定が反映されない原因の多くは、親要素からの継承である
- 小刻みなfloat指定は、使えば使うだけややこしくなる
2つめの「継承の混乱」を引き起こす原因として、HTMLのstyle属性、「!important」宣言、複数の外部CSSによる記述の分散が挙げられる。3つめは説明が足りないか? floatの扱いは仕様でもはっきりとは決まっていない。表示バグはfloatやposition周りにかなり固まっており、多用すればクロスブラウザでの表示を予想しにくくなる。
役立つCSS-Hack
IE6(win)以前と、それ以外
body {
font-size: 12px !important;
font-size: 78%;
}
floatボックスが親ボックスを突き破る問題(詳細)
.clearfix:after {
content: ".";
display: block;
height: 0;
clear: both;
visibility: hidden;
}
.clearfix {display: inline-block;}
/* Hides from IE-mac \*/
* html .clearfix {height: 1%;}
.clearfix {display: block;}
/* End hide from IE-mac */
きちんと考えて組めば、この2つだけで十分通用します。Mac用とかIE5用とか、CSS分ける必要も特に無し(管理・運用効率は別腹)。実際ここ1年くらい、これ以外のHackは使ってませんし。
問題を検出する方法
表示ズレに困ったときは、とりあえずborder入れてみると良いでしょう。ボックスの位置、領域、margin、paddingなど、一度に様々な情報を確認することができます。
そもそもHTMLタグが間違っていないか、確認しておくことも重要。タグや引用符の閉じ忘れや、いつの間にか紛れ込んだ全角スペースなど、うっかりミスはどれだけ経験をつんでもなかなか無くならない要因です。チェックには公式のValidatorが良いでしょう。lintとかもあるけど、これは詳しすぎて逆に使えない。勉強用には良いけど。
いよいよ詰まったときは下のよ~なサイトのお世話になるかも。
- 『CSSバグ辞典スレッド』の要約
- CSS Dencitie, UAのバグ 一覧
- 付録:CSS対応状況表
Note: スパム対策が面倒なので、コメント投稿を廃止しました。以前のコメントは残します。
ご意見・ご要望はtwitter@sigwygかはてブコメントにて。