CSS おれおれ Advent Calendar 2012 – 23日目
メールとかブログ記事とかの編集画面みたいなのがあって、それをウィンドウいっぱいに表示するとき、ウィンドウに合わせて縦方向に伸ばすのってどうしてますか? JavaScript使っちゃいます? それCSSで出来るよ!
ウェブサービスではあんまりないUIだと思うけど、ウェブアプリ的なものだったらよくあるのでは。
概要
ネタバレ。
height:100%
で常に画面の高さに合わせつつ、固定の部分についてはpadding
で隙間を用意します。その際にbox-sizing:border-box
を指定する事で、隙間の部分まで含めた高さを指定出来るようにします。
高さを100%
に出来る場合、出来ない場合について知る
昔書いたのでちらと読んでみてください。
一言で言うと、上位要素に高さの指定がある場合にのみ出来るという感じです。
最上位要素の高さを指定する
HTMLのドキュメントツリーにおける最上位要素といえば、もちろんhtml
要素です。
あとbody
要素もついでに設定しちゃいましょう。こちらは一般的なブラウザーでは、初期状態で余白が指定されているので、それもリセットします。
1 | html, body { height : 100% ; margin : 0 ; } |
縦にいっぱいだけど余白がある要素をつくる
縦いっぱいに広げるのはheight:100%
だけで可能です。今回やりたいのは、それに加えて固定の高さの領域を用意する、というものです。
padding
とbox-sizing:border-box
を利用します。つまりheight:100%
が示す値を、padding
まで含めたものとします。
1 2 3 | < body > < div class = "editor" >Content box</ div > </ body > |
1 2 3 4 5 | .editor { box-sizing : border-box ; height : 100% ; padding-top : 30px ; } |

box-sizing:content-box
(初期値)の場合の領域
box-sizing:border-box
の場合の領域下部領域も
同様に下方向にもpadding
を追加します。
デモ
こんな感じになりました。
実行画面を別ウィンドウで開いて、ウィンドウサイズを変えてみてください。
- 実行画面デモ(個別ページ) ←たぶんShift+クリックで別ウィンドウで開けます。

