这是解决方案的 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 类似于您的原始代码,只是多了一个 wrapper .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
,以便我可以获得垂直和水平居中的图像。.content
display: table-cell
.panel-wrapper
.image-wrapper
有display: inline-block
。_
要获得正确的缩放比例,您需要根据图像的纵横比考虑两种情况。
对于纵向图像,适用height: 100%
于.image-wrapper
和 child img
。
对于风景图像,width: 100%
分别应用。
如果你有一个边框.image-wrapper
,使用 CSScalc()
函数来调整边框的 2px 宽度。
您需要做的是使用 JavaScript/jQuery 确定图像的纵横比,然后将正确的类(.portrait
或.landscape
)应用于.content
块。
参见演示:http: //jsfiddle.net/audetwebdesign/SZjvJ/