これは、ソリューションの CSS スケルトンです。
HTML が次のようになっているとします。
<div id="content1" class="content portrait">
<div class="panel-wrapper">
<div class="image-wrapper">
<img src="http://placekitten.com/200/250" />
<a href="#" class="sample-link"></a>
</div>
</div>
</div>
<div id="content2" class="content landscape">
<div class="panel-wrapper">
<div class="image-wrapper">
<img src="http://placekitten.com/300/200" />
<a href="#" class="sample-link"></a>
</div>
</div>
</div>
HTML は元のコードと似ていますが、追加のラッパーがあります.panel-wrapper
。
次のCSSを使用しました。
.content {
background: lightgray;
display: table;
margin: 40px 0;
}
#content1 {
width:100px;
height:150px;
}
#content2 {
width:150px;
height:150px;
}
.panel-wrapper {
display: table-cell;
vertical-align: middle;
text-align: center;
}
.image-wrapper {
outline: 1px solid green;
position:relative;
display: inline-block;
}
.content img {
display: block;
width: 100%;
}
.portrait .image-wrapper {
height: calc(100% - 2px);
}
.portrait .img {
height: 100%;
}
.landscape .image-wrapper {
width: calc(100% - 2px);
}
.landscape .img {
width: 100%;
}
.sample-link {
background:rgba(0, 0, 255, 0.3);
position:absolute;
display:block;
width: 50%;
height:20%;
top:5%;
left:5%;
}
display: table
to.content
とdisplay: table-cell
toを適用して.panel-wrapper
、垂直方向と水平方向の両方で画像を中央に配置できるようにします。
.image-wrapper
を持っていますdisplay: inline-block
。
適切なスケーリングを行うには、画像の縦横比に応じて 2 つのケースを考慮する必要があります。
縦長の画像の場合は、と childに適用height: 100%
します。.image-wrapper
img
横長の画像の場合は、width: 100%
それぞれ適用してください。
に境界線がある場合は.image-wrapper
、CSScalc()
関数を使用して境界線の幅を 2 ピクセルに調整します。
必要なことは、JavaScript/jQuery を使用して画像の縦横比を決定し、正しいクラス (.portrait
または.landscape
) を.content
ブロックに適用することです。
デモを参照してください: http://jsfiddle.net/audetwebdesign/SZjvJ/