在ie11中发生SVG问题

r3p*_*ica 17 html css svg internet-explorer-11

我有一个div,其高度设置为320像素,然后它的子设置为100%的宽度.那个孩子是一个SVG文件,我将宽度设置为容器的200%.在chrome和firefox工作正常,我得到一个像这样的好图像:

在此输入图像描述

HTML看起来像这样:

<div class="kit-template ng-isolate-scope front">
    <div class="svg-document ng-scope">
        <svg version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px" viewBox="0 0 259.5 131.4" enable-background="new 0 0 259.5 131.4" xml:space="preserve" class="ng-scope">
            <!-- Removed for brevity -->
        </svg>
    </div>
</div>
Run Code Online (Sandbox Code Playgroud)

CSS/SASS看起来像这样:

.kit-template {
    overflow: hidden;
    position: relative;   
    height: 320px;

    .svg-document {  
        width: 100%;   
        overflow: hidden;
        margin: 0 auto;
        /*position: absolute;
        bottom: 0;*/

        svg {
            width: 200%;

            path, polyline, polygon, rect {
                cursor: pointer;
            }
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

就像我说的,这适用于Chrome,Firefox和IE Edge.但是在IE11中,我得到了这个:

在此输入图像描述

如果我检查元素,我可以看到SVG看起来左右有填充,但我可以向你保证不会.

有谁知道为什么会这样,以及我如何解决它?

更新1

我在codepen上创建了一个非常简单的版本,因此您可以看到问题.这里是:

http://codepen.io/r3plica/pen/Kdypwe

在chrome,firefox,Edge和IE11中查看.你会看到只有IE11才有问题.

Jon*_*llo 11

您可以做的是将height="320"属性添加到SVG标记.因此IE可以正确呈现.我相信在CSS中使用宽度为200%的IE11会被抛弃.但由于xml:space="preserve"是默认设置,仅设置高度将保持SVG夹克的比例.

测试IE11中的codepen示例:

http://codepen.io/jonathan/pen/MarvEm

<svg height="320" viewBox="0 0 248.2 142.8" enable-background="new 0 0 248.2 142.8" xml:space="preserve">
Run Code Online (Sandbox Code Playgroud)

还要删除XML命名空间标记,因为HTML页面中不需要它.你也可以去除一些SVG的属性,如version,xmlns,xmlns:xlink,x,和y,因为那些不需要为好.

  • 我只是想对此添加注释:如果应用高度,IE11将解决问题,默认情况下IE11假设所有SVG都高150px,除非另有说明.还有另一个解决方案,你可以实际上将SVG的宽度设置为100%并且它会调整大小,尽管这实际上并没有解决我的问题.最后,我没有使用高度或宽度.我创建了一个读取viewBox属性的指令,并根据容器宽度与viewBox宽度的差异计算出高度/宽度. (6认同)