SVG在IE中不能正确缩放 – 有额外的空间

我决定切换到我的项目之一的svg符号 – 但需要他们的响应 。 主要的想法是不要有多个http请求,所以我想将所有的SVG合并成一个SVG,定义符号并使用它们如下:

<svg style="display:none;"> <defs> <symbol id="mys"> <path fill-rule="evenodd" clip-rule="evenodd" fill="#3F77BC" d="M222.1,77.7h-10.3c0.1-0.8,0.2-1.4,0.2-2.3 c0-8.5-6.9-15.4-15.4-15.4c-8.5,0-15.4,6.9-15.4,15.4c0,0.9,0.1,1.5,0.2,2.3h-9.3v4h-24.9v-5.2H89.4c0-0.3,0-0.6,0-0.9 C89.4,67.1,82.5,60,74,60s-15.4,6.9-15.4,15.4c0,0.3,0,0.6,0,0.9h-6.2V60.7h4.3l5.3-5.3h22.8L74.3,44.9l-13.5-3.6l0.5-1.7 l-16.5-4.4c-0.3,0.1-0.7,0.2-1,0.2l0,21.4h2v7.2c0,0-2,0.6-1.9,1.3c0.1,0.7,4.1,2.6,3.4,5.5c-0.6,2.9-1.6,4.8-4.4,4.5 c-2.7-0.3-3.4-1.4-3.4-2.6c-0.1-1.2,0-3,0-3L38,67.9c0,0,2-0.5,2.6,1.1c0.6,1.5-0.2,2.7,0.6,3.5c0.8,0.8,4.1,1.4,4.1-1.1 c0-2.5-0.5-2.4-2.1-3.6c-1.7-1.2-3.4-2.8-3.4-3.3c0-0.5-0.1-7.7-0.1-7.7h2.1l0-21.7c-1.4-0.7-2.5-2.1-2.5-3.8 c0-2.3,1.9-4.2,4.2-4.2c2,0,3.6,1.4,4.1,3.2l15.3,4.1l0.4-1.6l55.8,15.1h28.1c0,0,0-23.5,0-26.2c0-2.7,2.1-2.6,2.1-2.6 s32.5-0.5,35.1,0.5c2.7,1,3.3,3.7,3.3,3.7h-2l5,11.6c0,0,7.3,4.6,17.6,7.6c10.3,3,13.6,7.6,13.6,7.6l-1,17.6l1.3,2V77.7z M81.5,46.8l8.6,8.6h9.3l2.9-2.9L81.5,46.8z M175.5,25l-17.4-0.1v12.6h9.6l2.7,2.7h6.6L175.5,25z M183,23.7h-4c0,0,2,6.6,3,9.9 s0.9,4.2,2.7,4.2c1.9,0,4.2,0,4.2,0L183,23.7z M74.2,63.8c6.8,0,12.3,5.5,12.3,12.3S81,88.4,74.2,88.4c-6.8,0-12.3-5.5-12.3-12.3 S67.4,63.8,74.2,63.8z M196.6,63.8c6.8,0,12.3,5.5,12.3,12.3s-5.5,12.3-12.3,12.3s-12.3-5.5-12.3-12.3S189.8,63.8,196.6,63.8z"/> </symbol> </defs> </svg> <div style="position:relative;width:100%;background:blue;"> <svg class="mys" viewBox="0 0 254 108" preserveAspectRatio="xMaxYMax meet" style="width:100%;"> <use xlink:href="#mys"></use> <svg> </div> 

这里是一个jsfiddle,检查IE中的不同行为(我检查了11,但读了9也有多个问题): http : //jsfiddle.net/ws472q71/

对于我的生活,我无法得到这个工作正常。 上述代码在Firefox和Chrome中正常工作,但在IE中失败。 我读了关于IE的问题,但是我找不到任何可行的东西。

我究竟做错了什么?

有没有其他类似的解决scheme可以将SVG合并到一个文件中并将它们用作响应图像?

谢谢!

正如你已经发现,IE浏览器有一个错误的地方,如果你不提供的宽度和高度,它不能正确缩放SVG。

为了让它在IE中工作,你可以使用Nicolas Gallagher发现的一个技巧(?)。

http://nicolasgallagher.com/canvas-fix-svg-scaling-in-internet-explorer/

技巧使用一个<canvas>元素。 IE 确实可以缩放canvas元素。 所以如果你在SVG中放置一个<div> SVG <div> ,那么SVG将会得到正确的大小。 您只需要将canvas的纵横比与SVG相同即可。

 <div style="position:relative;width:100%;background:blue;"> <canvas width="254" height="108"></canvas> <svg class="mys" viewBox="0 0 254 108" preserveAspectRatio="xMaxYMax meet"> <use xlink:href="#mys"></use> </svg> </div> 

与CSS

 canvas { display: block; width: 100%; visibility: hidden; } svg { position: absolute; top: 0; left: 0; width: 100%; } 
 canvas { display: block; width: 100%; visibility: hidden; } svg { position: absolute; top: 0; left: 0; width: 100%; } 
 <svg style="display:none;"> <defs> <symbol id="mys"> <path fill-rule="evenodd" clip-rule="evenodd" fill="#3F77BC" d="M222.1,77.7h-10.3c0.1-0.8,0.2-1.4,0.2-2.3 c0-8.5-6.9-15.4-15.4-15.4c-8.5,0-15.4,6.9-15.4,15.4c0,0.9,0.1,1.5,0.2,2.3h-9.3v4h-24.9v-5.2H89.4c0-0.3,0-0.6,0-0.9 C89.4,67.1,82.5,60,74,60s-15.4,6.9-15.4,15.4c0,0.3,0,0.6,0,0.9h-6.2V60.7h4.3l5.3-5.3h22.8L74.3,44.9l-13.5-3.6l0.5-1.7 l-16.5-4.4c-0.3,0.1-0.7,0.2-1,0.2l0,21.4h2v7.2c0,0-2,0.6-1.9,1.3c0.1,0.7,4.1,2.6,3.4,5.5c-0.6,2.9-1.6,4.8-4.4,4.5 c-2.7-0.3-3.4-1.4-3.4-2.6c-0.1-1.2,0-3,0-3L38,67.9c0,0,2-0.5,2.6,1.1c0.6,1.5-0.2,2.7,0.6,3.5c0.8,0.8,4.1,1.4,4.1-1.1 c0-2.5-0.5-2.4-2.1-3.6c-1.7-1.2-3.4-2.8-3.4-3.3c0-0.5-0.1-7.7-0.1-7.7h2.1l0-21.7c-1.4-0.7-2.5-2.1-2.5-3.8 c0-2.3,1.9-4.2,4.2-4.2c2,0,3.6,1.4,4.1,3.2l15.3,4.1l0.4-1.6l55.8,15.1h28.1c0,0,0-23.5,0-26.2c0-2.7,2.1-2.6,2.1-2.6 s32.5-0.5,35.1,0.5c2.7,1,3.3,3.7,3.3,3.7h-2l5,11.6c0,0,7.3,4.6,17.6,7.6c10.3,3,13.6,7.6,13.6,7.6l-1,17.6l1.3,2V77.7z M81.5,46.8l8.6,8.6h9.3l2.9-2.9L81.5,46.8z M175.5,25l-17.4-0.1v12.6h9.6l2.7,2.7h6.6L175.5,25z M183,23.7h-4c0,0,2,6.6,3,9.9 s0.9,4.2,2.7,4.2c1.9,0,4.2,0,4.2,0L183,23.7z M74.2,63.8c6.8,0,12.3,5.5,12.3,12.3S81,88.4,74.2,88.4c-6.8,0-12.3-5.5-12.3-12.3 S67.4,63.8,74.2,63.8z M196.6,63.8c6.8,0,12.3,5.5,12.3,12.3s-5.5,12.3-12.3,12.3s-12.3-5.5-12.3-12.3S189.8,63.8,196.6,63.8z"/> </symbol> </defs> </svg> <div style="position:relative;width:100%;background:blue;"> <canvas width="254" height="108"></canvas> <svg class="mys" viewBox="0 0 254 108" preserveAspectRatio="xMaxYMax meet"> <use xlink:href="#mys"></use> </svg> </div> 

在一个侧面说明,以帮助任何人努力实现此修复或发现它不工作与外部svg文件,而不是页面内的svg标记

您需要确保在文本编辑器中编辑svg文件时,不会在开始标记中缺lessviewBox或preserveAspectRatio选项。 如果这些错误不pipe你应用什么样的修正,那么svg在IE中仍然不能缩放 – 尽pipe它可以在其他浏览器中扩展而没有问题。

如果设置了这些选项,则可以在用于将svg拉入100%的图像元素上定义宽度/高度,并使用max-width或max-height来限制缩放,并按预期方式执行。 虽然 – 你仍然可以得到一些alignment问题。