今回は、スマホサイトやレスポンシブWebデザインの際に必須ではないかなと思うbox-sizingについて覚書きします。
というのも、存在自体は何となく知ってはいたんですが・・・レスポンシブwebデザインの教本を読んでいた時に再発見しまして、コレは何かと使えるんじゃないかと認識したんで今回掘り下げてみようかと思います。
cssでBoxレイアウトを組む時に、widthを指定してpaddingをつけて、borderもつけて、隣り合わせにfloatで2個めのBoxつくたら・・・レイアウト崩れた〜。計算しなおしや〜。
なんて事がよくあると思いますが、
そんな時に便利なのが「box-sizing」です。
「box-sizing」は、ボックスサイズの算出方法を指定する際に使用します。
指定する値は以下です。
記述方法はいたって簡単!!
-webkit-box-sizing: border-box; -moz-box-sizing: border-box; -o-box-sizing: border-box; -ms-box-sizing: border-box; box-sizing: border-box;
これで、OKです。
※ベンダープレフィックスもつけておきましょう。
それでは、表示状態はどう違うのか確認してみましょう。
まず、html(2つのが300pxのBoxを用意)
※ちなみに2つのclassに半角スペースで2つのclassを指定してます。
<div class="box p01">content-box(デフォルトの場合)</div> <div class="box p02">border-boxの場合</div>
んで、CSS
.box { margin-bottom: 10px; border: 5px dashed red; padding: 20px; width: 300px; height: 100px; background-color: #ffdede; } .p02 { -webkit-box-sizing: border-box; -moz-box-sizing: border-box; -o-box-sizing: border-box; -ms-box-sizing: border-box; box-sizing: border-box; }
こちらがサンプルです。2つのwidthの長さが違うことがわかりますね。
残念ながらIE7には対応していないようなので、個別に設定する必要があります。
まず、htmlのDOCTYPE宣言にコンディショナルコメントで、あらかじめIE用のclassを設定しておきます。
<!--[if lt IE 7]> <html class="ie6" lang="ja"> <![endif]--> <!--[if IE 7]> <html class="ie7" lang="ja"> <![endif]--> <!--[if IE 8]> <html class="ie8" lang="ja"> <![endif]--> <!--[if gt IE 8]><!--> <!--<![endif]-->
そして、IE版だけ個別のCSSプロパティを記述します。(面倒くさいですね)
通常のBoxレイアウトならwidthをpx指定、レスポンシブルなら%指定ってとこでしょうかね。
.ie7 .box { width:250px; height:50px; }
※borderとpaddingの分のpxを引き算します。(めんどくせー、他に方法ないんですかね?)
別名「条件付きコメント」と言いまして、コメントに条件を記載することでその部分の表示・非表示を制御することが出来るIE(Internet Explorer)の独自の仕様です。
これを利用して、IEのバージョンごとにclassをつけることで、特定のバージョンのieに個別のCSSプロパティを設定できます。
今まで、paddingやborderの数値も計算して、Boxの値を決めていかないといけなかったのですが、box-sizingを使うことで、手間が大幅にはぶけそうですね(・∀・)
さらに、このbox-sizingはスマホサイトやレスポンシブwebデザインの時に大いに役に立ちそうです(・∀・)
積極的にドンドン使っていこうと思います。以上、@Kc_fujiでしたm(_ _)m