メモログ

responsive grid と box-sizing

Building a modern grid system | Tutorial | .net magazineに width をパーセントで指定した responsive な grid(で、かつネストできてサイズの変更が簡単で..云々)を作成するという話が掲載されている。

この grid が便利かどうかは使ってみないとなんともですが、その中で紹介されている box-sizing というプロパティが面白い(ずいぶん前からあるみたいですけど)。box-sizing では width/height の数値にどの範囲までを含めるかを設定することができる(参照:box-sizing - MDN)。初期設定は標準モードで使われる「content-box(width はコンテンツのエリアのみで padding/border/margin は含まれない)」。これを「border-box」に設定すると、width に padding と border を含めることができる(IE6 の互換モードと同じ)。

たとえば画像に border で枠をつけつつ、横幅いっぱいに表示したいというときに、便利。content-box のままだと、border の 1px とか padding の幅をある程度考慮して width を調整しないといけなくなるけど、border-box にしてしておけば

img.image-full{
  -moz-box-sizing: border-box;
  -webkig-box-sizing: border-box;
  box-sizing: border-box;
  border: 1px solid #ddd;
  padding: 5px;
  max-width: 100%;
}

みたいな感じで簡単に指定できる。IE8 以降ではないと使用できないけど、IE7/6 用の polyfillが存在するので、IE6 にも適用したい場合はそれを使うという手がある(試してないけど)。

responsive なレイアウトでは width には%が使われるので、border-box を使うことで border と padding を気にしなくて良いというのはそうとう便利な気がする(特に border は%で指定できないのできびしい)。* { box-sizing: border-box } FTW « Paul Irishでは、さらに全称セレクタで border-box を指定するというアイデアが紹介されている(box-sizing の指定は継承されない)。

私について

Yutaka Yamaguchi
東京在住。TypeScript, Node.js, Reactなどフロンエンドが主力。Perlも書く。SwiftやRubyも過去には使ってた。過去のTOEIC 860くらい。