当 CSS 中的尺寸未知时如何增加图像的宽度?

Posted

技术标签:

【中文标题】当 CSS 中的尺寸未知时如何增加图像的宽度?【英文标题】:How to increase width of image when dimensions are not known in CSS? 【发布时间】:2016-05-06 00:44:09 【问题描述】:

我有一个像

这样的图片标签
<img />

然后我动态下载一个图像链接,并将图像 src 设置为该链接。我不知道链接中图像的尺寸。是否有我可以使用的 CSS 代码来确保图像的宽度正好是 200 像素(没有裁剪,只是拉伸以适应)并且图像的高度与原始图像的高度相同? (所以当原始尺寸未知时,基本上只是一个水平比例)。无论我尝试什么,它似乎都保留了纵横比。

谢谢

这是一个示例:我正在动态加载此图像:

我不知道它的尺寸,但最后,我希望它看起来像(假设它的宽度是 200px)。

【问题讨论】:

你为什么不使用style ?因此&lt;img src="" style="width:200px;"&gt; 保留纵横比。 不,它应该拉伸以适应。让它水平拉伸以适合水平,并保持与原始图像相同的垂直高度。 那么我在哪里指定 200px 呢? 即保留纵横比。就我而言,我确实希望它保持纵横比。 【参考方案1】:

这就是你要找的。​​p>

function formatImage(t)

    //var t = document.getElementById("idOfImg");
    alert(t.naturalWidth + " " + t.naturalHeight);
    t.height = t.naturalHeight;
    t.width = "200";


在您希望此行为的每个 image 上添加 onload=formatImage(this);

JSFiddle https://jsfiddle.net/94rzcLh6/

Lmk 如果它有效。我没有在小提琴上使用正确的命名,请忽略。

【讨论】:

问题是没有.js 啊,我的错。如果 OP 想引用它 :) 但您的解决方案也很有效。由于 OP 前面提到过,在这种情况下,它将针对图像数量,以最小的更改保持现有的 html 代码可能是有用且简单的。 @pratikwebdev 我同意你的回答,但我想知道为什么 OP 只指定 CSS 开头 @AGE 同意!可能是 OP 没有在现有代码中使用 JS,因此它可能没有超过 OP 的想法。我只是在更广泛的基础上提出了这个解决方案,考虑到编码的多个元素和相关工作。【参考方案2】:

这个怎么样:

css:

.content
  display:table;


.thumb
  width:200px;
  height:100%;
  display:table-cell;
  vertical-align:top;


.thumb .in, .thumb .in img
  width:100%;
  height:100%;

html:

<div class="content">
  <div class="thumb">
    <div class="in">
      <img src="http://www.planwallpaper.com/static/cache/7b/30/7b306aff620b08d0eefdb6b37f57abc8.jpg" />
    </div>
  </div>
  <div class="thumb">
    <div class="in">
      <img src="http://www.planwallpaper.com/static/cache/a6/4f/a64ffdfc06a8bea4ed2e62f2a44b063d.jpg" />
    </div>
  </div>
  <div class="thumb">
    <div class="in">
      <img src="http://www.gettyimages.es/gi-resources/images/RoyaltyFree/113198687.jpg" />
    </div>
  </div>
</div>

jsfiddle

在 jsfidle 示例中,我检查了高度并保留它。从 2 个浏览器中获取。其他图像也是如此。

【讨论】:

这似乎保留了纵横比,这不是我想要的。我希望高度保持与原始图像高度相同。 您希望所有图像的高度都相同吗? 我在原始帖子中放了一张示例图片。 是的,与原始图像高度相同。 @omega 再次检查。是这样吗?【参考方案3】:

您需要将图像包装在一个容器中,该容器可以帮助您保留要在图像上应用的200px 约束。高度会适应宽度,因为你不必担心它。

下面的示例显示了您可以对来自 placeholdit 的自定义尺寸图像执行哪些操作,您可以根据需要对其进行修改。我还建议您使用.wrapper 宽度来确定您希望应用的任何更改,例如添加width: 200px; width: auto;...这个.wrapper 是一个非常灵活的容器,这就是您所需要的,您可以随心所欲地改变它。

编辑

通过下面的 cmets,我决定修改图像的包装器以强制图像失去其纵横比。首先,我使用的是position: absolute(你也可以使用position: fixed)。我还使图像尺寸与.wrapper 尺寸完全不成比例,以进一步说明丢失纵横比的必要性。

注意:由于这只是一个演示,我不担心多个图像以及如何正确定位它们(​​这完全是另一个问题)。

.wrapper 
  width: 200px; 
  height: 100%; 
  position: absolute; 
  left: 0; 
  top: 0;


.wrapper img 
  width: 100%;
  height: 100%;
<div class="wrapper">
  <img src="http://placehold.it/1500x1000" >
</div>

随意玩.wrapper

【讨论】:

我不确定这是否有效。你能把占位符图片改成 400 宽和 200 高,看看能不能用? 它似乎也保留了纵横比 我在原始帖子中放了一张示例图片。 @omega 抱歉耽搁了,现在正在工作中。现在正在编辑我的帖子 @omega 我已经修改了我的答案,如果有帮助请告诉我。

以上是关于当 CSS 中的尺寸未知时如何增加图像的宽度?的主要内容,如果未能解决你的问题,请参考以下文章

如何使用 Next.js 中的 next/image 渲染未知尺寸的图像?

为啥屏幕宽度低于 300px 时图像尺寸不减小?

正确调整包含未知尺寸图像的 iframe

下一个 JS 图像居中而屏幕尺寸增加

当我们使用不同尺寸和类型的屏幕时,如何在 iOS 中设置 UI 控件的宽度和高度约束?

当用户单击erb中的缩略图时如何显示全尺寸图像?