以下链接对其宽度是响应式的,但我们还需要它在高度上也响应式,这样用户就不必在任何尺寸的屏幕上滚动图像。我试过 max-height:100% 和 max-width:100% 但没有运气。这是如何实现的?谢谢!
问问题
561 次
2 回答
0
如果您知道 img 的比例,则只能将其固定在高度上。
然后你可以利用视口高度长度
img {
max-width: $imgRatio * 80vh; /* max 80 % of viewport height for img */
}
浏览器无法在保持比率的同时限制两个轴的高度。
要在两个方向上修复它,您需要另一个容器,它根据视口高度获取最大宽度。
请注意vh 尚未在所有浏览器中工作,并且当工具栏不在视野中或显示键盘时,移动浏览器会更改 vh。
于 2014-10-26T20:55:25.477 回答
0
身高限制是一个持续存在的问题。仅靠 CSS 无法解决(根据我的经验)。因此,肖像(非风景)图像通常是图像画廊中的问题。我的做法:
1) 仅从老式宽度开始:
.fullsize img { max-width: 200px; }
2)至少“限制损害”以响应屏幕高度
@media screen and (min-height:400px) { .fullsize img { max-width: 400px; } }
@media screen and (min-height:800px) { .fullsize img { max-width: 800px; } }
3)准备另外两个类,通过javascript应用(格式测量后)
.fullsize.fullwidth img {
width: 100% !important;
height: auto !important;
max-width: none !important; /* yes, back to none */
max-height: none !important;
}
.fullsize.fullheight img {
width: auto !important;
height: 100% !important;
max-width: none !important;
max-height: 100% !important;
}
/* (!important needed for precedence over media queries) */
最后,javascript:
App.adjustFullsize = function( t ) {
t.each( function(){
var p=$(this).parent('.fullsize:first');
var dispW= $(window).width(),
dispH= $(window).height() - 126, /* fugde-factor deducts header, footers, etc. */
dispRatio = (dispH>0) ? (dispW/dispH) : 1.0,
// no need to get real width, as long as
// ratio is correct $('<img/>').attr()
imgW = $(this).width(),
imgH = $(this).height(),
imgRatio = (imgH>0) ? (imgW/imgH) : 1.0;
if ( imgRatio > dispRatio ) // hits left-right of bbox
p.removeClass('fullheight').addClass('fullwidth').css('height','');
else // hits top-bottom of bbox
p.removeClass('fullwidth').addClass('fullheight').css('height',dispH);
});
};
4)您应该慷慨地触发调整大小事件。基本上,因为它需要在图像(不仅仅是 DOM)加载后触发,但是并不是每个设备都能可靠地触发 .load() 事件,特别是在缓存的情况下。
/* depend on image load, NOT jQuery.ready(). Warning, not every device fires load() events, i.e. ipad */
$('.fullsize img').load( function() {
App.adjustFullsize( $(this) );
});
/* trigger again on resizes (includes tablet turnaround etc) */
$(this).resize( function() {
App.adjustFullsize( $('.fullsize img') );
});
$( function() {
App.adjustFullsize( $('.fullsize img') );
});
因此:考虑通过 jQuery.delay() 进行另一个调用,延迟为 100 毫秒。(不会闪烁/跳跃,如果一切都很好,如果没有,会有所帮助。)
于 2015-08-28T13:55:10.223 回答