CSS强制调整图像大小并保持纵横比

CSS强制调整图像大小并保持纵横比,css,image,aspect-ratio,Css,Image,Aspect Ratio,我正在处理图像,遇到了纵横比的问题 <img src="big_image.jpg" width="900" height="600" alt="" /> 但是对于big\u image.jpg,我收到width=500和height=600。如何将图像设置为重新调整大小,同时保持其纵横比。删除“高度”属性 <img src="big_image.jpg" width="900" height="600" alt="" /> <img src="big_imag

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

<img src="big_image.jpg" width="900" height="600" alt="" />
但是对于
big\u image.jpg
,我收到
width=500
height=600
。如何将图像设置为重新调整大小,同时保持其纵横比。

删除“高度”属性

<img src="big_image.jpg" width="900" height="600" alt="" />
<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;"/>

(2019-12-03)和(2019-12-10)支持将
IMG
元素的
宽度
高度
HTML属性内部添加到新的CSS属性(该属性本身尚不可直接使用)

计算的纵横比用于为图像保留空间,直到图像加载为止,并且只要计算的纵横比等于图像的实际纵横比,则在加载图像后防止页面“跳转”

要使其工作,必须通过CSS将两个图像维度之一覆盖为
auto
值:

IMG {max-width: 100%; height: auto; }

在该示例中,即使图像尚未加载,并且由于
最大宽度:100%
,有效图像宽度小于1280,纵横比仍保持在16:9(1280:720)


另请参阅相关的Firefox。

背景大小属性仅为ie>=9,但如果您觉得合适,可以使用带有
背景图像的div,并设置
背景大小: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 answer,使用此方法,图像区域将保持不变并由您定义(根据div大小和图像纵横比,在水平或垂直方向留下空白),而setecs answer将为您提供一个与缩放图像大小完全相同的框(无空白)

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

尽管Internet Explorer 8不支持“背景大小”属性,但可以使用非标准的-ms filter函数模拟其某些功能:

img{
显示:块;
最大宽度:230px;
最大高度:95px;
宽度:自动;
高度:自动;
}
此图像最初为400x400像素,但应通过CSS调整大小:


根据父框的宽度,下面的解决方案将允许图像的放大和缩小

所有图像都有一个固定宽度的父容器,仅用于演示。在生产中,这将是父框的宽度

最佳实践(2018年): 此解决方案告诉浏览器以最大可用宽度渲染图像,并将高度调整为该宽度的百分比

.parent{
宽度:100px;
}
img{
显示:块;
宽度:100%;
高度:自动;
}
此图像最初为400x400像素,但应通过CSS调整大小:


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

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

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

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


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

您可以创建如下div:

<div class="image" style="background-image:url('/to/your/image')"></div>

只需将其添加到css中,它将自动收缩和扩展,并保持原始比率

img {
    display: block;
    max-width: 100%;
    max-height: 100%;
    width: auto;
    height: auto;
}
img{
最大宽度:80px;/*也适用于百分比值,如100%*/
高度:自动;
}
此图像最初为400x400像素,但应通过CSS调整大小:

假设HTML的作者故意想要 高度为宽度值的一半, 此CSS将忽略HTML作者的愿望,这可能是您想要的,也可能不是您想要的:


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

HTML:

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

感谢@Kseso at。查看此URL以了解更多比率和工作示例。

您可以使用此URL:

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

我一直在努力解决这个问题,最终得出了一个简单的解决方案:

object-fit: cover;
width: 100%;
height: 250px;
您可以根据需要调整宽度和高度,对象适合属性将为您进行裁剪

有关
对象拟合
属性的可能值和兼容性表的更多信息,请参见:


干杯。

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

img{
宽度:200px;
高度:自动;
对象匹配:在图像大小中包含;/*匹配徽标*/
-o-object-fit:包含;/*适用于opera浏览器的徽标*/
对象位置:顶部;/*设置徽标位置*/
-o-对象位置:顶部;/*opera浏览器的徽标位置*/
}

如果您想将图像的宽度百分比固定,但宽度像素不固定,则答案如下

这将在以下情况下非常有用:
<div class="image" style="background-image:url('/to/your/image')"></div>
height: 100%;
width: 100%;
background-position: center center;
background-repeat: no-repeat;
background-size: contain; // this can also be cover
img {
    display: block;
    max-width: 100%;
    max-height: 100%;
    width: auto;
    height: auto;
}
<div class="ratio2-1">
   <img src="../image.png" alt="image">
</div>
.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;
  }
}
img { 
    width: 500px; 
    height: 600px; 
    object-fit: contain; 
    position: relative; 
    top: 50%; 
    transform: translateY(-50%); 
}
object-fit: cover;
width: 100%;
height: 250px;
    > li {
      float: left;
      overflow: hidden;
      background-color: @gray-dark;
      text-align: center;

      > a img,
      > img {
        display: inline-block;
        max-height: 100%;
        max-width: 100%;
        width: auto;
        height: auto;
        margin: auto;
        text-align: center;
      }

      // Add pseudo element for vertical alignment of inline (img)
      &:before {
        content: "";
        height: 100%;
        display: inline-block;
        vertical-align: middle;
      }
    }
.img {
   object-fit: contain;
   max-width: 100%;
   max-height: 100%;
   width: auto;
   height: auto;
}
img[data-attribute] {height: 100vh;}
img{
  display: block;
  width: 12vw;
  height:12vw;
  max-width:100%;
  min-width:100px;
  min-height:100px;
  object-fit:contain;
}
img {
   width: 100%;
   height: auto;
   object-fit: cover;
}
<img src='/nic-cage.png' style={{ maxWidth: '50%', objectFit: 'scale-down' }} />