为什么在 DIV 中使用 SVG 元素时会出现滚动条?

3
我想要一个固定大小的 <div> 元素(通过 JavaScript 动态设置),它只包含一个 <svg> 元素。当这个 <svg> 大于父级 <div> 时,应该出现滚动条。当它比父级 <div> 小时,它的大小应该设置为与父级相同,但不应出现滚动条。

然而,实际效果与期望不符,以下是一小段代码:

<?xml version="1.0" encoding="utf-8"?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
        "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
  <head>
    <meta http-equiv="Content-Type" content="text/html;charset=utf-8">
    <script type="text/javascript" src="lib/jquery-1.4.4.js"></script>
    <script type="text/javascript" src="lib/jquery-ui-1.8.7.custom.min.js"></script>
    <script type="text/javascript" src="lib/jquery.svg.js"></script>
    <script type="text/javascript">
      $(document).ready(function() {
        $('#editor').svg();
      });
    </script>
  </head>
  <body>
    <div id="editor" style="width:500px;height:500px;overflow:auto"></div>
  </body>
</html>

这将创建一个几乎为空的页面,其中包含一个固定大小为500x500px的
- 和一个内部的。这个SVG有滚动条 - 尽管它们并不需要,因为尺寸是完美的匹配。
当演示被修改为只有时,这种情况很容易展示出来。
<?xml version="1.0" encoding="utf-8"?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
        "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
  <head>
    <meta http-equiv="Content-Type" content="text/html;charset=utf-8">
    <script type="text/javascript" src="lib/jquery-1.4.4.js"></script>
    <script type="text/javascript" src="lib/jquery-ui-1.8.7.custom.min.js"></script>
    <script type="text/javascript" src="lib/jquery.svg.js"></script>
  </head>
  <body>    
    <div style="width:500px;height:500px;overflow:auto"><div style="width:500px;height:500px"></div></div>
  </body>
</html>

现在一个与父级
完全相同大小的
内,滚动条出现了。
有人能告诉我为什么
的行为不同吗?
我如何将SVG嵌入到父级
中,在大小相同时不出现滚动条(并且在大小变大时出现滚动条)?
注意:这是在Firefox和Chromium中进行测试的。

如果您将编辑器包装如下,会怎么样? <div style="width:500px;height:500px;overflow:auto"><div id="editor"></div></div> - Shadow The Spring Wizard
1个回答

8

之所以有差别是因为 div 的默认显示值为 display: block;svg 的默认显示值为 display: inline;,所以您遇到了文本基线对齐的问题,在 div 中不会出现该问题。如果添加以下任一样式到您的CSS中,均可去除滚动条:

svg { display:block; }

或者;
svg { vertical-align: top; }

1
谢谢,svg { display:block; } 在我的情况下是正确的解决方案! - Chris
这真正为我解决了一个难题。如果你能多解释一点,那就太好了,这是我们遇到的基本问题。 - elmart
@elmart,我不确定在评论中我能否解释得比“文本基线对齐”更清楚,你可以尝试在Google上搜索相关的图表和资料。 - robertc

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接