【发布时间】:2026-01-08 13:30:01
【问题描述】:
我想在保持纵横比的同时将任意 SVG 放大到其父容器。请注意,我无法修改 SVG 本身,因此涉及修改 SVG 的解决方案(例如编辑其 viewBox 属性)在此处不适用。
这是一个演示问题的 JSfiddle:https://jsfiddle.net/mj9o0nea/
如果你修改窗口的大小,你会看到图像在不保持纵横比的情况下缩放。
来自 JSfiddle 的 CSS:
html {
height: 100%;
overflow-y: hidden !important;
overflow-x: hidden !important;
}
body {
height: 100%;
margin: 0 0 0 0;
}
img {
position: absolute;
margin-left: auto;
margin-right: auto;
margin-top: auto;
margin-bottom: auto;
padding: 0;
left: 5%;
right: 5%;
top: 3%;
bottom: 3%;
max-height: 94%;
max-width: 90%;
}
.ph {
width: 100%;
max-width: 100%;
max-height: 100%;
}
像 JPG 这样的普通图像可以正确显示、缩放和居中(例如 <img src=s.jpg ...),但 SVG 将无法正确显示(例如 <img src="data:image/svg+xml...")
【问题讨论】:
-
你不能用javascript改变img src属性吗?您可以通过这种方式修改 SVG,还是您的实际图像不是真正的数据 URL?
-
您的意思是在
src属性中添加preserveAspectRatio属性,还是其他?据我所知,它不会对没有 viewBox 属性的 SVG 产生任何影响。也许您正在考虑其他事情?我对 SVG 不是很熟悉。 -
我的意思是在 viewBox 属性中编辑到 src 和 preserveAspectRatio 如果你需要/想要的话。
-
我需要知道图像的纵横比才能编写 viewBox 属性,对吧?我想我可以先解析 SVG 内容的 height 和 width 属性以计算纵横比,然后编写 viewBox 和 preserveAspectRatio 属性?
-
这将是可行的方法,尽管您可以直接将其作为 nativeHeight 和 nativeWidth 获得。