width: 100%; の罠

| コメント(0)

CSS で "width: 100%; " と指定した要素の幅は何 pixel(s) でしょう?

答えはご存知の通り「包含されている要素の幅による」ですよね。(違ってたらどうしよう

では、それが body 要素に直接の子要素として配置されている要素だったら?

答えは「Web ブラウザ描画面の幅と同じ」でしょう。

さて、次の質問。Web ブラウザ描画面の幅って何 pixel(s) ですか?

もう「そんなの知るか!」って感じですよね(笑

そこで、もう少し限定して、"Web ブラウザはメジャーな物で、起動した時のウインドウの幅: 800px かつ,body はメジャーな Web ブラウザのデフォルトスタイル" とします。(徐々に本題に近づいてきましたよ。

答えは 800px … ではなくて、「800px 以下」です。「お気に入り」とかあるので。もっと考えた方は、ウインドウのボーダーやスクロールバーの分もあるから「800 px 未満」だぜ!って思われたかもしれません。しかし、正解!とは言えません。スクロールバーに関してはコンテンツの量(や CSS)に依存するので何とも言えませんが、ディスプレイの幅が 800px で最大化が初期状態で起動された場合や、Mac 環境ではボーダーレスです(ウフフ

よって、答えは「800px 以下」です。

この条件下で、再びこの質問。body 要素に直接の子要素として配置されている要素の幅を "width: 100%;" で指定したら、その子要素は何 pixel(s) でしょう?

答えは「800px 以下」です。

更に条件を追加して、ウインドウのボーダーやスクロールバーはない状態を仮定。

ここでやっと「800px」が答えになります。

と言う訳で、ここからが本題ですよ〜(遅すぎ?

さて、Web ブラウザ起動時の描画面の幅を 800px とすると、"width:100%;" は 800px ですが、同じ階層のコンテンツ合計幅が 800 px 以上であった場合、"width: 100%;" の幅はどうなるでしょう?

具体的には、以下のような場合の id="foo" 以外の div 要素の幅はどうなるでしょう?


<body>
<div id="hoge" style="width: 100%;>style="width: 100%;"</div>
<div id="foo" style="width: 900px;">style="width: 900px;"</div>
<div id="bar">初期値</div>
</body>

900px?

不正解。コレが罠です。(やっとキーワードが

確かにコンテンツ幅は 900px になってスクロールバーが出るように見えますが、実際には 100% は Web ブラウザの描画面の幅と同じです。この時、100% のボックスに背景色を指定していた場合、スクロールバーを動かすとどういう事が起こるでしょう?

そう、スクロールバーを動かすと背景なしの部分が現れます。コレはとっても不細工。

罠って言う程のことではないんですが、タイトルが集客の罠です(笑

それで、肝心の解決方法は "min-width: 900px;" を指定してやる事です。

それ、IE が対応してねーじゃん!とか思われる方も居るかもしれませんが、IE では元々この問題は起こりませんです、はい。

こんな感じです。

ちなみに、タイトルを「min-width を指定しよう」とかいうバレバレなものにすれば、記事がもっと短く…。

コメントする

このブログ記事について

このページは、R-STYLEが2007年4月30日 12:12に書いたブログ記事です。

ひとつ前のブログ記事は「リニューアル予定」です。

次のブログ記事は「少しずつリニューアル中」です。

最近のコンテンツはインデックスページで見られます。過去に書かれたものはアーカイブのページで見られます。