【问题标题】:Display high-DPI image at 50% scaling using just CSS [duplicate]仅使用 CSS 以 50% 的比例显示高 DPI 图像 [重复]
【发布时间】:2016-02-29 23:27:09
【问题描述】:

我们的应用正在从第三方获取和显示图像。我们不知道图像大小是多少,但我们可以控制 DPI,因此我们可以为高分辨率屏幕请求双 DPI 图像。

我的问题是:是否有 HTML+CSS 解决方案可以以双倍分辨率呈现给定图像?做类似的事情:

img.hidpi {
    width: 50%;
}

不起作用,因为 50% 不是根据图像的内容计算的。

某些类型的 JS 是可以的,但我不想使用 JavaScript 来检查图像的内容 - 我们的代码库让这变得非常棘手。

【问题讨论】:

  • 如果您需要图像在容器中适应和缩放,object-fit 属性可能会有所帮助。尝试在 img 上设置object-fit: cover;
  • @Danield 不,他只是想将<img> 缩放到其自然高度和宽度的 50%,与容器无关

标签: html css image retina-display dpi


【解决方案1】:

设置widthheight

据我所知,没有办法使用 CSS 获取图像的尺寸。使用 JavaScript,您可以执行以下操作:

var myImgs = document.getElementsByClassName('hidpi');
for (var i = 0; i < myImgs.length; i++) {
  var width = myImgs[i].naturalWidth,
      height = myImgs[i].naturalHeight;

  myImgs[i].width = width / 2;
  myImgs[i].height = height / 2;
}

Fiddle 用于此版本。

CSS3 scale()

您可以使用 css3 transform,但这样做的缺点是它会不断消耗整个(未转换的)空间:

.hidpi {
  transform: scale(.5);
  transform-origin: 0 0;
}

Fiddle.

【讨论】:

  • 后一个答案看起来不错——不过你说的消耗整个空间是什么意思?你的意思是它右边或下面的其他物体会表现得好像它仍然是它的全尺寸?
  • 没错。 transform 不会改变元素的布局,只会控制渲染。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2018-02-18
  • 2021-06-21
  • 2018-02-04
  • 1970-01-01
  • 2015-11-02
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多