SVG元素似乎具有任意高度

Dav*_*vid 8 html5 svg

我一直在努力学习一些SVG.但浏览器似乎陷入了一种正确的混乱状态.

采用以下HTML:

<html>
  <head></head>
  <body>
    <svg xmlns="http://www.w3.org/2000/svg" xlink="http://www.w3.org/1999/xlink">
      <rect height="100" width="100" style="stroke:#006600; fill: #00cc00"/>
    </svg>
    <p>Hello? Hellooooooooooooo?</p>
  </body>
</html>
Run Code Online (Sandbox Code Playgroud)

查看这是任何现代浏览器,您将在矩形和以下HTML段落之间看到任意数量的空白.(IE9没有显示任何内容,但没有人会对此感到惊讶.)

Firefox(Firebug)没有给出元素svgrect元素的高度.它只是躲避并说'自动'.

Opera表示,svg它的高度为150px,并表示"自动" rect.

Chrome会提升并为两者提供高度.102px为rect(显然包括中风)和428px为svg.

我的期望是svg元素将是一个"薄"容器(即不增加其内容的尺寸),因此高度为102px.

任何人都知道应该采取什么样的正确行为以及如何解决这个问题?

rob*_*rtc 14

您没有明确定义SVG的宽度或高度,矩形的位置,甚至SVG的哪个部分.浏览器以不同的方式处理事情并不奇怪.

尝试定义宽度和高度:

<svg xmlns="http://www.w3.org/2000/svg" xlink="http://www.w3.org/1999/xlink" width="102px" height="102px">
  <rect height="100" width="100" style="stroke:#006600; fill: #00cc00"/>
</svg>
Run Code Online (Sandbox Code Playgroud)

或者,定义一个viewBox:

<svg xmlns="http://www.w3.org/2000/svg" xlink="http://www.w3.org/1999/xlink" viewBox="0 0 102 102">
  <rect height="100" width="100" style="stroke:#006600; fill: #00cc00"/>
</svg>
Run Code Online (Sandbox Code Playgroud)

或两者:

<svg xmlns="http://www.w3.org/2000/svg" xlink="http://www.w3.org/1999/xlink" viewBox="-50 -50 52 52" width="102px" height="102px">
  <rect height="100" width="100" style="stroke:#006600; fill: #00cc00"/>
</svg>
Run Code Online (Sandbox Code Playgroud)

以下是一些实例.

  • 谢谢robertc.所以我必须自己计算`svg`元素内的图纸尺寸,以便给它一个宽度和高度?我认为它会围绕其内容调整大小,就像说"div"一样. (2认同)
  • @David它不会围绕内容调整大小,因为'内容'是一个无限的平面;) (2认同)