[CSS]レスポンシブ用に画像を縮小するだけではなく、クロップにも対応させるテクニック
Post on:2012年12月6日
sponsorsr
デスクトップでは通常のサイズ、タブレットでは縮小サイズ、スマフォではクロップして画像を表示させるスタイルシートのテクニックを紹介します。

Focal Point: Intelligent Cropping of Responsive Images
デモ
デモは表示サイズで、画像のサイズや表示領域が変化します。

デモページ:幅1,200pxで表示
レスポンシブの対応は2種類用意されており、ある程度の表示サイズであれば縮小して表示されます。iPadなどの768pxまでは縮小表示です。

デモページ:幅768pxで表示
768pxよりサイズが小さいと、画像をクロップして表示します。

デモページ:幅600pxで表示
実装
まずは、実装のイメージから。
使用する画像の重要な箇所を選定します。

クロップする箇所を選定
このアイデアの一番大切なポイントで下記の写真を例にすると、主題となるのは画像の右側の人物になります。

中心箇所を選定
画像は天地左右にクロップ可能なので、中心となる箇所をグリッドから決定します。
HTML
HTMLは画像を配置するimg要素の他に、クロップするためにdiv要素が二つ必要です。
<div class="focal-point"> <div><img src="guy.jpg" alt="guy"></div> </div>
div要素を余計に使用することはよくないことですが、実装を簡単にするために使用しています。
クロップする箇所を指定するには、classを追加します。
<div class="focal-point right-3 up-3"> <div><img src="guy.jpg" alt=""></div> </div>
右3、上3は、上記のグリッドから算出してもので、右3上3にクロップします。
CSS
まずは、ベースとなるスタイルシートです。
* {
margin: 0;
padding: 0;
-webkit-box-sizing: border-box;
-moz-box-sizing: border-box;
-ms-box-sizing: border-box;
box-sizing: border-box;
}
レスポンシブに対応させるため、ボックスモデルをborder-boxにします。
続いて、レスポンシブ対応の画像用に幅を100%にします。これで表示サイズに合わせて最適な幅で表示され、高さも自動で補正されます。
.focal-point {
width: 100%;
height: auto;
overflow: hidden;
}
.focal-point img {
width: 100%;
max-width: 100%;
height: auto;
-ms-interpolation-mode: bicubic;
}
.focal-point div {
position: relative;
max-width: none;
height: auto;
}
最後に、クロップのスタイルシートです。ブレークポイントは767pxに設定しました。
ここで画像をクロップするために、ネガティブマージンを設定します。
@media all and (max-width: 767px) {
/* 4x3 Landscape Shape (Default) */
.focal-point div {
margin: -3em -4em;
}
/* Landscape up (Total 6em) */
.up-3 div {
margin-top: -1.5em;
margin-bottom: -4.5em;
}
.right-3 div {
margin-left: -6em;
margin-right: -2em;
}
}
sponsors











