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

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

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

img {
  max-width: 500px;
}

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


当前回答

删除“height”属性。

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

通过指定这两个选项,可以更改图像的纵横比。只需设置一个即可调整大小,但保持纵横比。

(可选)限制过大:

<img src="big_image.jpg" width="900" alt="" style="max-width:500px; height:auto; max-height:600px;"/>

其他回答

https://jsfiddle.net/sot2qgj6/3/

如果你想用固定的宽度百分比,而不是固定的宽度像素来放置图像,这就是答案。

这在处理不同大小的屏幕时很有用。

诀窍是

使用padding top设置高度与宽度之间的距离。使用position:absolute将图像放入填充空间。使用最大高度和最大宽度确保图像不会覆盖父元素。使用display:block和margin:auto将图像居中。

我也评论了小提琴中的大部分技巧。


我还找到了其他方法来实现这一点。在html中不会有真实的图像,所以当我需要html中的“img”元素时,我个人更倾向于首选答案。

使用背景的简单csshttp://jsfiddle.net/4660s79h/2/

顶部有单词的背景图像http://jsfiddle.net/4660s79h/1/

使用位置绝对值的概念如下http://www.w3schools.com/howto/howto_css_aspect_ratio.asp

backgroundsize属性仅为ie>=9,但如果这对您来说很好,您可以使用带有背景图像的div并设置backgroundsize:contain:

div.image{
    background-image: url("your/url/here");
    background-size: contain;
    background-repeat: no-repeat;
    background-position: center;
}

现在,您只需将div大小设置为所需的大小,图像不仅保持其纵横比,还将在div中垂直和水平集中。不要忘记在css上设置大小,因为div本身没有width/height属性。

这种方法与setecs答案不同,使用这种方法,图像区域将是恒定的,并由您定义(根据div大小和图像纵横比,水平或垂直地留出空格),而setecs回答将为您提供一个与缩放图像大小完全相同的框(没有空格)。

编辑:根据MDN背景大小文档,您可以使用专有过滤器声明模拟IE8中的背景大小属性:

虽然Internet Explorer 8不支持背景大小属性,但可以使用非标准的-ms过滤器函数模拟其某些功能:

-ms-filter: "progid:DXImageTransform.Microsoft.AlphaImageLoader(src='path_relative_to_the_HTML_file', sizingMethod='scale')";

要强制图像符合精确的大小,您不需要编写太多代码。太简单了

国际货币基金组织{宽度:200px;高度:自动;对象拟合:包含;/*按图像大小调整徽标*/-o-object-fit:contain;/*为opera浏览器安装徽标*/对象位置:顶部;/*设置徽标位置*/-o对象位置:顶部;/*opera浏览器的徽标位置*/}<img src=“http://cdn.sstatic.net/Sites/stackoverflow/company/img/logos/so/so-logo.png“alt=”徽标“>

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

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");
});

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

要保持响应图像,同时仍然强制图像具有一定的纵横比,可以执行以下操作:

HTML格式:

<div class="ratio2-1">
   <img src="../image.png" alt="image">
</div>

和SCSS:

.ratio2-1 {
  overflow: hidden;
  position: relative;

  &:before {
    content: '';
    display: block;
    padding-top: 50%; // ratio 2:1
  }

  img {
    position: absolute;
    top: 0;
    left: 0;
    bottom: 0;
    right: 0;
  }
}

无论作者上传的图像大小如何,这都可以用于强制执行特定的纵横比。

感谢@Ksesohttp://codepen.io/Kseso/pen/bfdhg.查看此URL以了解更多比率和工作示例。