【问题标题】:Why the gap and width of SVG rectangles, drawn consecutively, are uneven when rendered in IE11?为什么在 IE11 中渲染时,连续绘制的 SVG 矩形的间隙和宽度不均匀?
【发布时间】:2016-09-29 23:56:45
【问题描述】:

在 Internet Explorer 11 中呈现时,SVG 矩形的间隙和宽度在视觉上是不均匀的。

绘制的连续矩形具有相同的间隙和宽度,但在 IE11 中,间隙和宽度在视觉上似乎不均匀。

这是一个示例 -

var cont = document.getElementById('container'),
        svg = document.createElementNS("http://www.w3.org/2000/svg", "svg"),
        rect,
        i,
        startX = 50,
        startY = 100,
        width = 2,
        height = 200,
        gap = 0.8;

    svg.setAttribute("width", 500);
    svg.setAttribute("height", 500);
    svg.setAttribute("version", "1.1");
    svg.setAttribute("id", "mysvg");

    for (i = 0; i < 100; i++) {
        rect = document.createElementNS("http://www.w3.org/2000/svg", "rect");
        rect.setAttribute("fill", "rgba(88,162,213,1)");
        rect.setAttribute("x", startX);
        rect.setAttribute("y", startY);
        rect.setAttribute("width", width);
        rect.setAttribute("height", height);
        svg.appendChild(rect);

        startX += width + gap;
        startY += 1;
        height -= 1;
    }

    container.appendChild(svg);
&lt;div id="container"&gt;&lt;/div&gt;

提前致谢!

【问题讨论】:

    标签: javascript svg browser internet-explorer-11


    【解决方案1】:

    这与值是间隙 (0.8) 的非整数有关。

    如果您将 gap 更改为 1,它会始终呈现。 https://jsfiddle.net/6jzcuh6s/

        var cont = document.getElementById('container'),
        svg = document.createElementNS("http://www.w3.org/2000/svg", "svg"),
        rect,
        i,
        startX = 50,
        startY = 100,
        width = 2,
        height = 200,
        gap = 1;
    
    svg.setAttribute("width", 500);
    svg.setAttribute("height", 500);
    svg.setAttribute("version", "1.1");
    svg.setAttribute("id", "mysvg");
    
    for (i = 0; i < 100; i++) {
        rect = document.createElementNS("http://www.w3.org/2000/svg", "rect");
        rect.setAttribute("fill", "rgba(88,162,213,1)");
        rect.setAttribute("x", startX);
        rect.setAttribute("y", startY);
        rect.setAttribute("width", width);
        rect.setAttribute("height", height);
        svg.appendChild(rect);
    
        startX += width + gap;
        startY += 1;
        height -= 1;
    }
    
    container.appendChild(svg);
    
    <div id="container"></div>
    

    这是因为当你有一个非整数值并且其他一切都是基于整数的时,在浏览器中绘制时会出现不均匀的像素映射。 如果您放大和缩小 svg,您可以看到间隙变化。

    0.8 间隙的镀铬, 注意你在 IE11 中解释的同样的事情

    1.0 间隙的镀铬,没有不均匀的间距。

    这与像素映射有关,它只是从可均匀分割的像素中绘制形状,这意味着如果使用小数,它会被截断。

    【讨论】:

    • 我知道。实际上正在渲染一个图形,其中所有宽度和间隙的值(svg矩形)都将是小数点,即主要是浮点值而不是整数,即整数。 Chrome、Firefox 可以正确呈现 svg 元素,没有视觉不均匀,但 IE11 失败。
    猜你喜欢
    • 1970-01-01
    • 2016-05-02
    • 2020-05-08
    • 2019-08-02
    • 2020-06-24
    • 1970-01-01
    • 1970-01-01
    • 2012-07-05
    • 2023-03-09
    相关资源
    最近更新 更多