【发布时间】:2015-11-16 01:03:29
【问题描述】:
Irealisethishasbeenaskedmanymanytimesundermany@9876543331@,但大多数解决方案似乎并不关心生成的高度。或仅在一个方向上缩放。这个:
min-width: 100%;
height: auto;
不是解决方案。
我正在尝试使图像适应高度和宽度,以便可以将其动态注入到不同系统和站点中的多个位置,因此我不一定知道父对象将是什么 -可能是带有或不带有溢出集的 div,或者是 p,或者是 body - 或者它的尺寸;父容器不能仅仅通过注入我的图像/脚本来改变大小。jQuery 不可用。
我看不出 css3 后台技术是如何工作的。
按比例缩放就像使用比率一样简单:
<img onload="scale(this)" src="screenshot.png">
<script type="text/javascript">
function scale(img){
var p = img.parentNode,
x = p.offsetWidth,
y = p.offsetHeight,
w = img.naturalWidth,
h = img.naturalHeight;
ratio = h / w;
if (h >= y) {
h = y;
w = h / ratio;
img.style.width = w + "px";
img.style.height = h + "px";
} else if(w >= x) { //} && ratio <= 1){
w = x;
h = w * ratio;
img.style.width = w + "px";
img.style.height = h + "px";
}
}
</script>
但这只能在一个平面上缩放 - 我需要它继续缩放宽度和高度,直到它在两个维度上都整齐地适合父容器空间。如果图像小于父容器,则应按比例放大以填充。
【问题讨论】:
-
如果图像是 800x600(水平)并且父级是 200x800(垂直)怎么办?
-
你是说
background-size:contain;不是你要找的吗? -
除非容器与图片的纵横比完全相同,否则您将获得可怕的伪影和沿一个轴的拉伸/压缩,或者您将不得不使用信箱或柱子。
-
之所以只设置一个维度,是为了保证成比例。
标签: javascript