提问



如何自动调整大图像的大小,使其适合较小宽度的div容器,同时保持宽度:高度比?





示例:stackoverflow.com - 当图像插入编辑器面板并且图像太大而无法放入页面时,图像会自动调整大小。

最佳参考


不要对图像标记应用明确的宽度或高度。相反,给它:


max-width:100%;
max-height:100%;


此外,height: auto;如果您只想指定宽度。


示例:http://jsfiddle.net/xwrvxser/1/[72]




img {
    max-width: 100%;
    max-height: 100%;
}

.portrait {
    height: 80px;
    width: 30px;
}

.landscape {
    height: 30px;
    width: 80px;
}

.square {
    height: 75px;
    width: 75px;
}

Portrait Div
<div class="portrait">
    <img src="http://i.stack.imgur.com/xkF9Q.jpg">
</div>

Landscape Div
<div class="landscape">
    <img src="http://i.stack.imgur.com/xkF9Q.jpg">
</div>

Square Div
<div class="square">
    <img src="http://i.stack.imgur.com/xkF9Q.jpg">
</div>



https://developer.mozilla.org/en-US/docs/Web/CSS/object-fit[73]


原来那是另一种方法来做到这一点。


<img style='height: 100%; width: 100%; object-fit: contain'/> 


会做的工作。这是CSS3的东西。


小提琴:http://jsfiddle.net/mbHB4/7364/[74]

其它参考1


目前,无法以确定的方式正确地执行此操作,使用固定大小的图像(如JPEG或PNG文件)。


要按比例调整图片大小,您必须将 的高度或宽度设置为100%,而不是两者都设置。如果将两者都设置为100%,则图像将被拉伸。


选择是否进行高度或宽度取决于您的图像和容器尺寸:



  1. 如果您的图像和容器都是纵向形状或两者都是横向形状(分别高于它们的宽度,或者比它们的高度宽),那么它的高度或宽度都不重要。 %100' 。

  2. 如果您的图片是纵向,并且您的容器是横向的,则必须在图像上设置height="100%"

  3. 如果您的图片是横向图片,而您的容器是纵向图片,则必须在图片上设置width="100%"



如果您的图像是SVG(可变大小的矢量图像格式),则可以使扩展适合容器自动发生。


您只需确保SVG文件在<svg>标记中没有设置这些属性:


height
width
viewbox


导出SVG文件时,大多数矢量绘图程序都会设置这些属性,因此每次导出时都必须手动编辑文件,或编写脚本来执行此操作。

其它参考2


这是一个解决方案,即使提供的图像太小或太大而无法放入div,也可以在div中垂直和水平对齐img而不进行任何拉伸。
html:


<div id="myDiv">
  <img alt="Client Logo" title="Client Logo" src="Imagelocation" />
</div>


CSS:


#myDiv 
{
  height:104px;
  width:140px;
}
#myDiv img
{
  max-width:100%; 
  max-height:100%;
  margin:auto;
  display:block;
}


JQuery:


var logoHeight = $('#myDiv img').height();
    if (logoHeight < 104) {
        var margintop = (104 - logoHeight) / 2;
        $('#myDiv img').css('margin-top', margintop);
    }


我希望这可以帮助你们

其它参考3


简单!


给容器一个固定 height,然后为其中的img标签设置widthmax-height


<div style="height: 250px">
     <img src="..." alt=" " style="width: 100%;max-height: 100%" />
</div>


区别在于您将width设置为100%而不是max-width

其它参考4


看看我的解决方案:http://codepen.io/petethepig/pen/dvFsA [75]


它是用纯CSS编写的,没有任何JS代码。
它可以处理任何大小和任何方向的图像。


给出这样的HTML:


<div class="image">
  <div class="trick"></div>
  <img src="http://placekitten.com/415/200"/>
</div>


CSS代码将是:


.image {
  font-size: 0;
  text-align: center;
  width: 200px;  /* Container's dimensions */
  height: 150px;
}
img {
  display: inline-block;
  vertical-align: middle;
  max-height: 100%;
  max-width: 100%;
}
.trick {
  display: inline-block;
  vertical-align: middle;
  height: 150px;
}

其它参考5


您可以将图像设置为div的背景,然后使用css background-size属性[76]


background-size: cover;


并且它将将背景图像缩放到尽可能大的背景图像完全被背景图像覆盖。背景图像的某些部分可能不在背景定位区域内-w3schools.com

其它参考6


美丽的黑客。


您有两种方法使图像响应。



  

      
  1. 当图像是背景图像时。

  2.   



#container{
    width: 300px;
    height: 300px;
    background-image: url(http://images.fonearena.com/blog/wp-content/uploads/2013/11/Lenovo-p780-camera-sample-10.jpg);
    background-size: cover;
    background-repeat: no-repeat;
    background-position: center;
}

<div id="container"><div>


在这里运行[77]




但是应该使用img标签来放置图像,因为它比background-image SEO 方面更好,因为你可以在[[ >中编写关键字 54 [[]] img标签。所以这里是你可以使图像响应。



  

      
  1. 当图像在img标签中时。

  2.   



#container{
    max-width: 400px;
    overflow: hidden;
}
img{
    width: 100%;
    object-fit: contain;
}

<div id="container">
   <img src="http://images.fonearena.com/blog/wp-content/uploads/2013/11/Lenovo-p780-camera-sample-10.jpg" alt="your_keyword"/>
<div>


在这里运行[78]

其它参考7


该解决方案不会拉伸图像并填充整个容器,但它会切割一些图像。


HTML


 <div><img src="/images/image.png"></div>


CSS


div {
  width: 100%;
  height: 10em;
  overflow: hidden;

img {
  min-width: 100%;
  min-height: 100%;

}

其它参考8


我刚刚发布了一个jQuery插件,可以通过很多选项完全满足您的需求:


https://github.com/GestiXi/image-scale[79]


用法:


HTML


<div class="image-container">
  <img class="scale" data-scale="best-fit-down" data-align="center" src="img/example.jpg">
</div>


JS


$(function() {
  $("img.scale").imageScale();
});

其它参考9


我有更好的解决方案,无需任何JS。它完全响应,我经常使用它。您经常需要将任何宽高比的图像与指定宽高比的容器元素相匹配。并且让整个事情完全响应是必须的。




/* For this demo only */
.container {
  max-width: 300px;
  margin: 0 auto;
}
.img-frame {
  box-shadow: 3px 3px 6px rgba(0,0,0,.15);
  background: #ee0;
  margin: 20px auto;
}

/* This is for responsive container with specified aspect ratio */
.aspect-ratio {
  position: relative;
}
.aspect-ratio-1-1 {
  padding-bottom: 100%;
}
.aspect-ratio-4-3 {
  padding-bottom: 75%;
}
.aspect-ratio-16-9 {
  padding-bottom: 56.25%;
}

/* This is the key part - position and fit the image to the container */
.fit-img {
  position: absolute;
  top: 0;
  right: 0;
  bottom: 0;
  left: 0;
  margin: auto;
  max-width: 80%;
  max-height: 90%
}
.fit-img-bottom {
  top: auto;
}
.fit-img-tight {
  max-width: 100%;
  max-height: 100%
}

<div class="container">

  <div class="aspect-ratio aspect-ratio-1-1 img-frame">
    <img src="//placehold.it/400x300" class="fit-img" alt="sample">
  </div>

  <div class="aspect-ratio aspect-ratio-4-3 img-frame">
    <img src="//placehold.it/400x300" class="fit-img fit-img-tight" alt="sample">
  </div>

  <div class="aspect-ratio aspect-ratio-16-9 img-frame">
    <img src="//placehold.it/400x400" class="fit-img" alt="sample">
  </div>

  
  <div class="aspect-ratio aspect-ratio-16-9 img-frame">
    <img src="//placehold.it/300x400" class="fit-img fit-img-bottom" alt="sample">
  </div>
  
</div>



图像太小时,Thorn007接受的答案不起作用
为了解决这个问题,我添加了比例因子。这样,它使图像更大,并填充div容器。


示例:


<div style="width:400px; height:200px;">
  <img src="pix.jpg" style="max-width:100px; height:50px; transform:scale(4); transform-origin:left top;" />
</div>


注:点击
1/对于webkit,你必须添加-webkit-transform:scale(4); -webkit-transform-origin:left top;在风格。

2/比例因子为4,你有max-width=400/4=100和max-height=200/4=50

3/另一种解决方案是将最大宽度和最大高度设置为25%,它甚至更简单

其它参考10


下面的代码是从上面改编的,并由我使用名为storm.jpg的图像进行测试
这是显示图像的简单页面的完整HTML代码。这很完美,我和www.resizemybrowser.com一起测试过。将CSS代码放在HTML代码的顶部,位于您的头部下方。将图片代码放在您想要的图片的任何位置。


<html>
<head>
  <style type="text/css">
  #myDiv 
  {
    height:auto;
    width:auto;
  }
  #myDiv img
  {
    max-width:100%; 
    max-height:100%;
    margin:auto;
    display:block;
  }
 </style>
</head>

<body>
    <div id="myDiv">
        <img src="images/storm.jpg">
    </div>
</body>
</html>

其它参考11


我通过这种方式水平和垂直地在一个超链接内按比例缩放和缩放图像:


#link {
    border: 1px solid blue;
    display: table-cell;
    height: 100px;
    vertical-align: middle;
    width: 100px;
}
#link img {
    border: 1px solid red;
    display: block;
    margin-left: auto;
    margin-right: auto;
    max-height: 60px;
    max-width: 60px;
}


在IE,Firefox,Safari中测试过。


关于居中的更多信息在这里。[80]

其它参考12


将图像所需的高度和宽度提供给包含< img>标签。
不要忘记给出适当风格标签的高度/宽度。
在< img> tag,将max-height和max-width设为100%。


<div style="height:750px; width:700px;">
    <img alt="That Image" style="max-height:100%; max-width:100%;" src="">
</div>


在正确完成后,您可以在适当的类中添加详细信息。

其它参考13


<style type="text/css"> 
#container{
text-align:center;
width: 100%;
height: 200px; /*set height*/
margin: 0px;
padding: 0px;
background-image:url('../assets/images/img.jpg');
background-size: content; /*scaling down large image to a div*/
background-repeat:no-repeat;
background-position:center;
}
</style>

<div id="container>
<!--inside container-->
</div>

其它参考14


您必须告诉浏览器放置它的位置的高度。


.example {
  height: 220px; //DEFINE HEIGHT
  background:url('../img/example.png');
  background-size: 100% 100%;
  background-repeat: no-repeat;
}

其它参考15


 以前基于表格的图像定位在IE11中存在问题(max-heightdisplay:table元素中不起作用。)我已经用基于内联的定位替换它,它不仅在IE7和IE11中都能正常工作,而且需要更少的代码。





这是我对这个问题的看法。只有当容器具有指定的尺寸(max-widthmax-height似乎与不具有混凝土尺寸的容器相处时它才会起作用,但我以一种方式编写了css允许它被重用(将picture-frame类和px125大小类添加到现有容器中)。


在css中:


.picture-frame
{
    vertical-align:top;
    display:inline-block;
    text-align:center;
}

.picture-frame.px125
{
    width:125px;
    height:125px;
    line-height:125px;
}

.picture-frame img
{
    margin-top:-4px; /* inline images have a slight offset for some reason when positioned using vertical-align */
    max-width:100%;
    max-height:100%;
    display:inline-block;
    vertical-align: middle;
    border:0; /* Remove border on imgs enclosed in anchors in IE */
}


并在HTML中:


<a href="#" class="picture-frame px125">
    <img src="http://i.imgur.com/lesa2wS.png"/>
</a>


DEMO





/* Main style */

.picture-frame
{
    vertical-align:top;
    display:inline-block;
    text-align:center;
}

.picture-frame.px32
{
    width:32px;
    height:32px;
    line-height:32px;
}

.picture-frame.px125
{
    width:125px;
    height:125px;
    line-height:125px;
}

.picture-frame img
{
    margin-top:-4px; /* inline images have a slight offset for some reason when positioned using vertical-align */
    max-width:100%;
    max-height:100%;
    display:inline-block;
    vertical-align: middle;
    border:0; /* Remove border on imgs enclosed in anchors in IE */
}

/* Extras */

.picture-frame
{
    padding: 5px;
}

.frame
{
    border:1px solid black;
}

<p>32px</p>
<a href="#" class="picture-frame px32 frame">
    <img src="http://i.imgur.com/lesa2wS.png"/>
</a>
<a href="#" class="picture-frame px32 frame">
    <img src="http://i.imgur.com/kFMJxdZ.png"/>
</a>
<a href="#" class="picture-frame px32 frame">
    <img src="http://i.imgur.com/BDabZj0.png"/>
</a>
<p>125px</p>
<a href="#" class="picture-frame px125 frame">
    <img src="http://i.imgur.com/lesa2wS.png"/>
</a>
<a href="#" class="picture-frame px125 frame">
    <img src="http://i.imgur.com/kFMJxdZ.png"/>
</a>
<a href="#" class="picture-frame px125 frame">
    <img src="http://i.imgur.com/BDabZj0.png"/>
</a>



一个似乎对我有用的简单解决方案(4步修复!!)如下。希望它有所帮助。示例使用宽度来确定整体大小,但您也可以将其翻转以使用高度。



  1. 将CSS样式应用于图像容器(例如

  2. 将width属性设置为所需的维度

    • for dimensions使用%表示相对大小,或自动缩放(基于图像容器或显示)
      -use px(或其他)用于静态或设置维度


  3. 根据宽度
  4. 将height属性设置为自动调整
  5. 享受!



例如


<img style="width:100%; height:auto;"
                            src="https://googledrive.com/host/0BwDx0R31u6sYY1hPWnZrencxb1k/thanksgiving.png"
                />

其它参考16


如上所述,如果它不适用于您的浏览器(如Chrome),您还可以使用vh单位而不是max-height: 100%:


img {
    max-height: 75vh;
}

其它参考17


所有提供的答案,包括已接受的答案,只有在div包装器具有固定大小的假设下才能 。所以这就是如何做到无论 div包装器的大小,如果你开发一个响应式页面,这非常有用:


DIV 选择器中写下这些声明:


width : 8.33% /* or whatever percentage you want your div to take*/
max-height : anyValueYouWant /*(in px or %)*/ 


然后将这些声明放在 IMG 选择器中:


width : "100%" /* obligatory */
max-height :  anyValueYouWant /*(in px or %)*/ 


非常重要:


对于 DIV IMG 选择器,maxHeight的值必须是相同

其它参考18


通过一些数学计算,解决方案很简单......


只需将图像放入div中,然后在html文件中指定图像,使用图像的像素值以百分比形式设置宽度和高度值,以计算宽度与高度的确切比率。


例如,假设您的图像宽度为200像素,高度为160像素。您可以有把握地说宽度值将是100%,因为它是更大的值。然后计算高度值,您只需将高度除以宽度,即给出百分比值80%。在代码中它看起来像这样......



其它参考19


检查我的ans https://stackoverflow.com/a/36712112/2439715


img{
    width: 100%;
    max-width: 800px;
}

其它参考20


一个简单的解决方案是使用flex-box。将容器的CSS定义为:


.container{
    display: flex;
    justify-content: center;
    align-items: center;
    align-content: center;
    overflow: hidden;
    /*any custom height*/
}


将包含的图像宽度调整为100%,您应该在保留尺寸的容器中获得一个漂亮的居中图像。干杯。

其它参考21


最简单的方法是


通过使用对象适合


<div class="container">
  <img src="path/to/image.jpg">
</div>

.container{
   height: 300px;
}

.container img{
  height:100%;
  width:100%;
  object-fit: cover;
}


如果你使用bootstrap只是添加img-responsive类并更改为


.container img{
      object-fit: cover;
    }

其它参考22


或者你可以简单地使用:


background-position:center;
background-size:cover;


现在图像将占用div的所有空间。

其它参考23


以下对我来说非常适合:


img{
   height: 99999px;
   object-fit:contain;
   max-height: 100%;
   max-width: 100%;    
   display: block;
   margin: auto auto;
}

其它参考24


简单地定义div


   div.headerimg1 {
       position: absolute;
       top: 290px;
       left: 81px;
       width: 389px;
            height: 349px;
}
<div class="headerimg1">
<img src="" style="max-height:100%;height:auto;width:100%;max-width:100%;margin:auto;
display:inline;"></div>