使用Twitter Bootstrap,我尝试创建一个水平滚动的thumbnails系列,允许显示缩略图的行中的滚动条,如下所示:
这让我大部分都在那里,使用这个HTML:
<div class="row">Hello there</div>
<div class="row" style="overflow-x:scroll">
<table>
<tr>
<td>
<div class="thumbnail" style="width: 400px; height: 400px">
<img src="http://i.minus.com/iucsUZfSM9v45.gif"/>
</div>
</td>
<td>
<div class="thumbnail" style="width: 400px; height: 400px">
<img src="http://i.minus.com/iucsUZfSM9v45.gif"/>
</div>
</td>
<td>
<div class="thumbnail" style="width: 400px; height: 400px">
<img src="http://i.minus.com/iucsUZfSM9v45.gif"/>
</div>
</td>
</tr>
</table>
</div>
JSFiddle:http://jsfiddle.net/54fgv/2/
overflow
CSS属性效果很好,为我提供了容器div
的滚动条。
缩略图div
元素将是一个固定的大小,这可能会比图像小。在这种情况下,图像被约束以相应地适合。如您所见,当图像比缩略图宽时,宽度设置为缩略图,并相应地缩放高度。这是我想要的行为,但我希望图像在缩略图中垂直居中。
我已尝试将vertical-align: middle
添加到缩略图div
元素中,但无济于事。
如何让图像在缩略图中垂直居中?
答案 0 :(得分:12)
方法1 - (example):
包裹img
元素:
<div class="thumbnail" style="width: 400px; height: 400px">
<div class="thumbnail_wrapper">
<img src="http://i.minus.com/iucsUZfSM9v45.gif"/>
</div>
</div>
将.thumbnail
元素的显示更改为table
。使用border-collapse: separate
修复填充/间距问题。将包装器的显示更改为table-cell
,然后添加vertical-align: middle
。最后,为img
元素指定宽度100%
。
.thumbnail {
display:table;
border-spacing: 2px;
border-collapse: separate;
border-radius:10px; /* Demonstrational.. */
}
.thumbnail_wrapper {
display:table-cell;
vertical-align:middle;
}
.thumbnail_wrapper > img {
width:100%;
}
方法2 - (example):
flexbox方法并不需要包装元素,但它的slightly less support方法比table
/ table-cell
方法要快{。}}。
<div class="thumbnail" style="width: 400px; height: 400px">
<img src="http://i.minus.com/iucsUZfSM9v45.gif" />
</div>
基本上,只需将display
元素的.thumbnail
更改为flex
,然后添加align-items: center
即可。添加所有其他供应商前缀以用于跨浏览器支持。阅读有关flexbox布局和属性的更多信息here - (mdn)。
.thumbnail {
display: -webkit-flexbox;
display: -ms-flexbox;
display: -webkit-flex;
display: flex;
-webkit-flex-align: center;
-ms-flex-align: center;
-webkit-align-items: center;
align-items: center;
}
作为旁注,您可以避免使用HTML表格example here。
答案 1 :(得分:1)
HTML:
<div class="thumbnail v_align_all" style="width: 400px; height: 400px">
<img src="http://i.minus.com/iucsUZfSM9v45.gif"/>
<span class="v_align_fix"></span>
</div>
CSS:
.v_align_all { white-space: nowrap }
.v_align_all > * {
vertical-align: middle;
display: inline-block !important;
}
.v_align_fix {
height: 100%;
vertical-align: middle;
display: inline-block;
width: 0px;
white-space: nowrap;
}