CSSの壁 (回答希望!→解決!)
今日はちょっと毛色の違うエントリ。
今、別のblogを、そのブログサービスが提供しているデザインテンプレートを使用せずにゼロから作ってる最中。仕事ではなく、趣味で。
そこで壁にぶつかってます・・・
どなたかCSS詳しい方、下記について教えて頂けないでしょうか?
まず、作ろうとしているレイアウトについて。
- 作りたいのは、ヘッダとフッタの間に3カラムを横に並べた、ありがちなデザイン。
- 全体の横幅ををウインドウに対して80%で設定したい。
- ただし、横幅可変なのは3カラム中、真ん中の1カラムのみ。
- 左右の10%+10%には、bodyで指定した背景画像を出したい。
- 80%の部分は白の背景色で塗り潰し。
これに対して、下記のようなHTMLを記述。
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd"> <html lang="ja"> <head> <META HTTP-EQUIV="Content-Type" CONTENT="text/html; charset=utf-8"> <TITLE>ページタイトル</TITLE> <link REL="stylesheet" href="base.css" TYPE="TEXT/CSS"> <meta http-equiv="content-style-type" content="text/css"> </head> <body> <!-- Begin Container --> <div id="container"> <!-- Begin Header --> <div id="header"> <h1>タイトル</h1> </div> <!-- End Header --> <!-- Begin Leftnavi --> <div id="leftnavi"> 左メニュー </div> <!-- End Leftnavi --> <!-- Begin Rightnavi --> <div id="rightnavi"> 右メニュー </div> <!-- End Rightnavi --> <!-- Begin Contents --> <div id="contents"> 中央エリア </div> <!-- End Contents --> <!-- Begin Footer --> <div id="footer"> <p>footer</p> </div> <!-- End Footer --> </div> <!-- End Container --> </body> </html>
で、base.cssがこちら。
@charset "utf-8"; *{ margin:0; padding:0; } html{ height:100%; overflow-y:scroll; } body { width:100%; height:100%; background-image : url(xxx.png) ; background-repeat : repeat ; } #container { margin:0 auto; background-color:#fff; width : 80% ; height:100%; } #leftnavi { float:left; width:150px; background-color:transparent; } #rightnavi { float:right; width:150px; background-color:transparent; } #contents { margin:0 150px; background-color:transparent; } #footer { clear: both; background-color:transparent; }
- bodyに背景イメージを設定し、
- width80%、背景色白のcontainerで全体を包み、
- 左右のボックスをフロートし、
- clearしたfooterでcontainerのheightを伸ばす。
以上。
次に、現在発生している問題。
左右のフロートボックスにはメニューしか入らないので、ボックス自体のheightは短くなる。一方中央のボックスにはメインコンテンツが入るので、こちらは結構長くなる。
ボックスそれぞれのheightはバラバラだが、containerで包括しているので、headerからfooterまで、containerの背景色が適用されるはず。だが、出来上がったものは、containerがfooterまで伸びておらず、コンテンツの途中までしかheightがない。よって、背景色も、途中までは白だが、途中からはbodyの画像を透過してしまう状況になっている。
色々調べて、clearfixハックでフロートをclearする方法なんかも試してみたんだけど、やっぱりダメ。
なんでやー!!
footerで「clear: both;」設定してることでcontainerは全部包括するんじゃなかったのかー。
あ、ちなみにIE6ならまったく正常に白い背景が横幅80%の範囲に表示されます。上記問題が起こるのは、firefoxの時。でもこれって、IEの方のバグなんだよな・・・
すごく悩んでます。
どなたか、CSS詳しいかた、コメント欄にて助言して頂けるととっても助かります。
よろしくお願いします。
(CSS詳しい人がこのページ見てるかどうかはなはだ疑問ですが)