我正在处理图像,我遇到了纵横比问题。

<img src="big_image.jpg" width="900" height="600" alt="" />

如您所见,高度和宽度已经指定。我为图像添加了CSS规则:

img {
  max-width: 500px;
}

但对于big_image.jpg,我得到的宽度=500,高度=600。如何设置图像的大小,同时保持其纵横比。


当前回答

您可以使用此选项:

img { 
    width: 500px; 
    height: 600px; 
    object-fit: contain; 
    position: relative; 
    top: 50%; 
    transform: translateY(-50%); 
}

其他回答

只需将高度属性替换为纵横比属性。

国际货币基金组织{最大宽度:500px;纵横比:900/600;}<img src=“big_image.png”width=“900”/>

纵横比属性不是必需的,但可以防止图像布局偏移。

与这里的一些答案非常相似,但在我的案例中,我的图像有时更高,有时更大。

这种风格就像一种魅力,确保所有图像都使用所有可用空间,保持比例而不是剪切:

.img {
   object-fit: contain;
   max-width: 100%;
   max-height: 100%;
   width: auto;
   height: auto;
}

这是精神上的。使用比例缩小属性-它可以自行解释。

内联样式:

<img src='/nic-cage.png' style={{ maxWidth: '50%', objectFit: 'scale-down' }} />

这将阻止flex拉伸它。在这种情况下,图像将达到其父容器宽度的50%,并且高度将缩小以匹配。

保持简单。

如果图像对于指定区域太大,这将使图像收缩(作为缺点,它不会放大图像)。

setec的解决方案适用于自动模式下的“收缩到适合”。但是,为了最佳地扩展以适应“自动”模式,您需要首先将接收到的图像放入临时id,检查它是否可以在高度或宽度上扩展(取决于其纵横比v/s,即显示块的纵横比),

$(".temp_image").attr("src","str.jpg" ).load(function() { 
    // callback to get actual size of received image 

    // define to expand image in Height 
    if(($(".temp_image").height() / $(".temp_image").width()) > display_aspect_ratio ) {
        $(".image").css('height', max_height_of_box);
        $(".image").css('width',' auto');
    } else { 
        // define to expand image in Width
        $(".image").css('width' ,max_width_of_box);
        $(".image").css('height','auto');
    }
    //Finally put the image to Completely Fill the display area while maintaining aspect ratio.
    $(".image").attr("src","str.jpg");
});

当接收到的图像小于显示框时,这种方法很有用。您必须将它们保存在服务器上的原始小尺寸,而不是其扩展版本,以填充更大的显示框,以节省大小和带宽。

将图像容器标记的CSS类设置为图像类:

<div class="image-full"></div>

并将其添加到CSS样式表中。

.image-full {
    background: url(...some image...) no-repeat;
    background-size: cover;
    background-position: center center;
}