ChatGPT解决这个技术问题 Extra ChatGPT

在 IE6 中使用一维 (CSS) 缩放图像时如何保持纵横比?

这就是问题所在。我有一张图片:

<img alt="alttext" src="filename.jpg"/>

注意没有指定高度或宽度。

在某些页面上,我只想显示缩略图。我无法更改 html,所以我使用以下 CSS:

.blog_list div.postbody img { width:75px; }

哪个(在大多数浏览器中)使页面具有统一宽度的缩略图,所有这些都具有保留的纵横比。

但在 IE6 中,图像仅按 CSS 中指定的尺寸进行缩放。它保留了“自然”高度。

这是说明问题的一对页面的示例:

该列表应显示缩略图

一篇博文,显示全尺寸图像。

我非常感谢所有建议,但想指出(由于客户选择平台的限制)我正在寻找不涉及修改 html 的东西。 CSS 也比 javascript 更可取。

编辑:应该提到图像的大小和纵横比不同。

我正在记录各种错误。我无法复制这个。你认为你可以为此做一个简单的测试用例吗?
老实说,我不再做很多网页设计,而且我不确定在哪里可以找到没有麻烦的 IE6 安装。不过我会做广告的。

T
Tom Wright

Adam Luter 给了我这个想法,但事实证明它非常简单:

img {
  width:  75px;
  height: auto;
}

IE6 现在可以很好地缩放图像,这似乎是所有其他浏览器默认使用的。

感谢您的两个答案!


我还建议使用:“object-fit:contain;”或“对象拟合:填充;”如果这对你来说还不够
@Magnus 根据 caniuse.com,任何当前浏览器都不支持 CSS3 object-fit(在撰写本文时),并且仅受 Opera 支持。它几乎无法在 IE6 中工作。
这也应该反过来工作吗? (即,设置高度、自动宽度?)这适用于旧 IE 吗?
A
Adam Luter

我很高兴这成功了,所以我猜你必须在 IE6 上明确设置“自动”才能模仿其他浏览器!

实际上,我最近发现了另一种缩放图像的技术,同样是为背景设计的。这种技术有一些有趣的特点:

图像纵横比保持图像的原始大小保持不变(即永远不会缩小只会增长)

标记依赖于包装元素:

<div id="wrap"><img src="test.png" /></div>

鉴于上述标记,您可以使用以下规则:

#wrap {
  height: 100px;
  width: 100px;
}
#wrap img {
  min-height: 100%;
  min-width: 100%;
}

如果你然后控制包装器的大小,你会得到我上面列出的有趣的缩放效果。

明确地说,考虑以下基本状态:一个 100x100 的容器和一个 10x10 的图像。结果是 100x100 的缩放图像。

从基本状态开始,容器调整为 20x100,图像保持调整为 100x100。从基本状态开始,图像更改为 10x20,图像大小调整为 100x200。

所以,换句话说,图像总是至少和容器一样大,但会超出它以保持它的纵横比。

这可能对您的站点没有用,并且在 IE6 中不起作用。但是,为您的视口或容器获取缩放背景很有用。


如果您想将 DOWN 图像缩放到具有保留纵横比的容器中,它似乎是 max-height 和 max-width 而不是 min-height/min-width,这似乎可以放大较小的图像。
我喜欢这个答案,而且@Karsten 对最大高度和最大宽度很感兴趣。
j
jgallant

好吧,我可以想到一个 CSS hack 来解决这个问题。

您可以在 CSS 文件中添加以下行:

* html .blog_list div.postbody img { width:75px; height: SpecifyHeightHere; } 

上面的代码只有 IE6 才能看到。纵横比不会是完美的,但你可以让它看起来有点正常。如果你真的想让它变得完美,你需要编写一些 javascript 来读取原始图片的宽度,并相应地设置比例以指定高度。


A
Adam Luter

在 CSS 中进行显式缩放的唯一方法是使用诸如 found here 之类的技巧。

仅限 IE6,您也可以使用过滤器(查看 PNGFix)。但是将它们自动应用到页面将需要 javascript,尽管 javascript 可以嵌入到 CSS 文件中。

如果您需要 javascript,那么您可能只想让 javascript 通过在内容加载后检查图像来填充高度的缺失值。 (对不起,我没有这项技术的参考)。

最后,请原谅我这个肥皂盒,您可能想在这件事上避开 IE6 支持。您可以在您的 width: 75px 规则之后添加 _width: auto,以便 IE6 至少可以合理地呈现图像,即使它是错误的大小。

我推荐最后一个解决方案只是因为 IE6 即将淘汰:20% 并且几乎下降了 percent a month。另外,我注意到您的网站是娱乐性的,并且位于英国。这两者都有助于人口远离 IE6:IE6 的使用在周末下降了近 40%(抱歉没有引用),而英国的 IE6 人口要低得多(再次没有引用,抱歉)。

祝你好运!