display:table
この日記で、サイドバーを右の固定サイズ、左はウィンドウの幅によって変わるように
尚且つ、狭くなってもサイドバーがウィンドウ内に収まるようにするのに悪戦苦闘した。
<div class=hatena-body> <div class=main> <div class=body></div> </div> <div class=sidebar></div> </div>
↑大雑把に書いたbody部分
↓大雑把に書いたスタイルシート部分
.hatena-body { width: 100%; height: 100%; } .main { float: left; width: auto; height: 100%; margin-right: 225px; } .sidebar { float: right; clear: right; width: 210px; height: 100%; margin-left: -210px; } .body { width: 100%; height: 100%; }
IE6以外だとborderの幅なども考慮しないといけないみたいだが
大雑把に書くとこんな感じで、mainの幅を指定せず(一応autoにしてみた)
main内の要素のH3なりbodyなりの幅を100%にすればIEではうまく表示できたが
IE以外だとmain内のテーブルを指定しないと幅が安定しなかった。
だからダミーのテーブルをmainタグの下に作ってその幅を100%にしていたのだが
main内のbodyに
.body { width: 100%; height: 100%; display: table; }
display:tableを加えたら、ダミーのテーブルを削除してもIE以外でも幅が安定した感じだ。(多分)
display:tableはテーブルに変えるってことか?
まぁ、字を見てすぐに気付くべきだったが・・・・・・。
修正
.bodyではだめだった。テキストエリアなどがあった場合幅が安定しない。
仕方がないのでmainタグの下にテーブルではなく、divを作成して
それをdisplay:table、width:100%にした。
<div class=hatena-body> <div class=main> <div class=msg></div> <div class=body></div> </div> <div class=sidebar></div> </div> ----------------------------------- .msg { display: table; width: 100%; }
こんな具合にしたらとりあえず直った。
divの場合は何か文字を入れないと広がらないので、何も文字を入れない場合は
素直にtableを作成した方がいいみたい。