最近遇到一个需要使用 SVG 并兼容 IE11 的场景,发现在 Chrome 下表现正常的代码在 IE 中却无法缩放,四处搜索一番最终发现了这个利用 position 和 padding 的解决方案。虽然需要根据每个SVG调整 padding 的数值,但好处是纯 CSS 实现,并且在 img 或 object 标签引用或直接内嵌 svg 代码的情况下都能使用,恰好符合我的需要。
.svg-conatainer {
display: inline-block;
position: relative;
width: 100%;
padding-bottom: 100%; /*需要根据 SVG 的比例调整*/
vertical-align: middle; /* 也可以根据需要改成 top 或 bottom */
}
svg {
display: block;
position: absolute;
top: 0;
left: 0;
width: 100%; /* 只有在使用 img 标签引用的时候才需要 */
}
然后需要在 svg 标签中删除 width 和 height,加入 preserveAspectRatio 并确保有 viewBox 属性:
svg id="IE" preserveAspectRatio="xMinYMin meet" viewBox="0 0 222.64 218.79">
最终效果如下: