【发布时间】:2015-03-14 06:21:00
【问题描述】:
IE 9/10/11 存在一个已知问题,如果您有一个 SVG 文件,其中 <svg> 元素指定宽度和高度,然后您使用 width 和 height 属性缩放 SVG 图像<img> 标签,IE 无法正确缩放图像。
我遇到了这个问题。我有一系列 SVG 标志图标。对于美国国旗图标,SVG 对象写为:
<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" height="480" width="640">
<!-- elements to draw flag .. -->
</svg>
And here's the full source for the SVG.
我将 SVG 插入带有 <img> 标签的 HTML 文档中,并将其缩小到 20x15:
在 Chrome 39 上,SVG 被正确渲染,如下所示:
但在 IE10 上呈现如下:
因此,这里似乎发生的情况是,即使 IE10 将 <img> 元素大小调整为 20x15,它也不会缩小 SVG - 所以我们最终只能看到标志图标的左上角,显示为纯蓝色框。
好的...所以这似乎是documented solutions 的一个已知问题。一种解决方案是简单地删除 SVG 文件中的所有 width 和 height 属性。这似乎有点危险,因为我不想搞砸实际的设计。如果您有很多 SVG 文件,这也有点麻烦 - 需要更多脚本来处理文件。
更好的解决方案是使用 CSS 专门针对 IE10 中的 SVG 元素,这显然可以使用供应商特定的媒体查询:
@media screen and (-ms-high-contrast: active), (-ms-high-contrast: none) {
img[src*=".svg"] {
width: 100%;
}
}
好的,但我不明白这个解决方案。当我尝试上述方法时,IE10 只是扩展了 SVG 的大小以填充整个父容器,这不是我想要的。好的,所以也许我可以通过将 SVG 宽度设置为 100% 来强制 IE 缩放 SVG,然后限制父容器的大小。所以我将<img> 包裹在一个宽度和高度为20x15 的DIV 中。但是......这只是导致了与以前相同的问题:容器 DIV 固定为 20x15,但 SVG 并没有缩小 - 所以我们最终得到的只是标志的左上角蓝色角落:
...所以,我可能只是不了解此解决方案。如何让 IE10/11 将标志图标缩小到 20x15?
【问题讨论】:
标签: html css internet-explorer svg