在</svg> <embed />内拉伸<svg>以适合窗口大小

时间:2011-05-26 22:29:58

标签: svg stretch viewbox

我正在尝试在DOM中拉伸svg文档以适应窗口大小。

像这样:

<div id="y">
    <div id="button"> click to zoom</div>
    <embed id="x" src="s17.svg" >
    <script>
        var btn= document.getElementById("button");
        btn.addEventListener('click',function(){
        var z= document.getElementsByTagName("embed")[0];
        var y = z.getSVGDocument();
        y.lastChild.setAttribute("viewBox","0 0 "+window.innerWidth+" "+window.innerHeight);
                                               },false);

    </script>
</div>

的CSS:

#x{
    height:100%;
    width:100%;
    overflow:hidden;
}
#y{
    position:absolute;
    top:0;
    bottom:0;
    left:0;
    right:0;
    overflow:hidden;
}

这不起作用......我做错了什么?

2 个答案:

答案 0 :(得分:9)

所有浏览器应该能够处理这个问题:

  • 在不使用脚本的情况下将viewBox添加到svg元素(在您的示例中为s17.svg)
  • 删除svg元素上的width和height属性(如果已指定
  • 向svg元素添加属性preserveAspectRatio="none"以使其伸展,即使css-viewport纵横比与viewBox纵横比不匹配。
  • 将embed / iframe / object的宽度/高度设置为您想要的任何值,svg将自动拉伸以适合

如果您不想拉伸,那么您也可以preserveAspectRatio="xMidYMid slice"(填充整个视口,必要时切掉部分)或preserveAspectRatio="xMidYMid meet"(这是默认设置,将svg置于视口中心,保持纵横比。)

答案 1 :(得分:0)

所有浏览器完全不同地处理SVG支持。我认为您最好的选择是使用object标记而不是embed,并且您仍需要进行一些黑客操作才能让它在每个浏览器上都能正常显示。 This linkthis link提供了一些有用的信息,可以让它跨浏览器工作。