【问题标题】:Should SVG contents be visible outside an embedded <svg> by default? [closed]默认情况下,SVG 内容是否应该在嵌入的 <svg> 之外可见? [关闭]
【发布时间】:2012-04-09 17:41:22
【问题描述】:

过去,我回答了一个关于 SVG 图像在 IE9 中没有被“裁剪”(overflow: hidden) 的问题,而所有其他支持的浏览器都这样做了。答案是here。

今天,在再次查看 HTML5 Boilerplate 时,我注意到他们声称他们 "[correct] overflow not being hidden in IE9" 使用以下代码:

svg:not(:root) { overflow: hidden; }

我正在寻找某人通过指出 HTML5 或 SVG 规范中的其他注释来确认或否认我的原始研究。我找不到任何东西,但我想确定我没有遗漏任何东西。

我能找到的最好的是他们正在尝试应用规则 7 here,但这应该只适用于 SVG 文档,例如通过 img 标记或直接加载时。

【问题讨论】:

  • 感谢标题编辑@Phrogz。我不知道如何准确地总结这个问题。
  • @casperOne 如何要求澄清规范不是一个真正的问题?我可以看到措辞很差,但我看不出它如何适合您标记的类别。是不是太本地化了?
  • 您希望有人澄清某人是对还是错。我可以重新打开它,但我会再次将其关闭为“不具建设性”。
  • @casperOne 我知道你来自哪里,但我实际上是在寻求帮助来理解他们的解释(大多数浏览器和样板)与我的。具体来说,我在我的研究中出了什么问题。关于“谁是对的”的唯一参考是我从先前的答案中引用了自己(很差地)来说明我首先要问的原因。不过感谢您提供的信息,我会记住它以备将来使用。
  • 问题既有效又具有建设性。他要求澄清不同浏览器以不同方式实现的规范,如果没有别的,这与浏览器开发相关..

标签: html css svg w3c html5boilerplate


【解决方案1】:

SVG 规范有这样的说法:http://www.w3.org/TR/SVG/styling.html#UAStyleSheet

似乎类似于 Firefox 和 Chrome 不做的事情?

【讨论】:

  • 不错,不过(根据我的回答)Chrome 和 FF 都使用相同的稍作修改的版本。 (也许这方面有勘误表?)这意味着 IE 没有这个 UA 表是错误的。但是,它并没有完全解释为什么overflow:visible 不会导致溢出路径出现在 Chrome/FF 中。这可能是一个单独的问题,但是对要渲染的 SVG 的“边界”的期望是什么?界限何时会超过明确的height 和width?
  • This discussion 是相关的。
  • 感谢您指出这一点。似乎 SVG 命名空间元素的默认所需样式表中的冲突与上面的规则 7 + w3.org/TR/SVG/styling.html#Scope 冲突?
  • 在阅读了上述讨论链接、答案中的链接并重新阅读规范后,现在规范要求的 UA 样式表现在使 IE9 无效是有道理的。感谢您的帮助!
【解决方案2】:

使用您指定的理由(特别是the spec 的第五和第七个要点),您的原始答案对我来说似乎是正确的。

IE 是正确的而 Webkit 和 Firefox 不是正确的似乎极不可能。但是,您怀疑第七个要点是区别因素。

如果您在 Chrome 中加载 this test case 并使用开发者工具检查 SVG,您将看到:

(user agent stylesheet)

svg:not(:root), symbol, image, marker, pattern, foreignObject {
  overflow: hidden;
}

如果您在 Firebug 中启用“显示用户代理 CSS”,您会在 Firefox 中看到此规则:

svg.css (line 49) &lt;System&gt;

svg:not(:root), symbol, image, marker, pattern, foreignObject {
  overflow: hidden;
} 

最后,如果您编辑测试用例以添加svg { overflow:hidden },那么 IE 在视觉上与其他浏览器匹配。

因此,在我看来,所有三种浏览器的行为都符合规范,但 Chrome/Safari/FF 都有更符合大多数用户期望的 UA 规则。

如果我可以不理会,这就是我要停止回答的地方。

但是,如果您edit the test case to add svg { overflow:visible },Chrome 和 Firefox 都不会“正确”显示溢出的内容。我不确定如何用这个答案的其余部分来解决这个数据点。 :/

【讨论】:

  • 意见(不回答):没有 Chrome 和 Firefox 的行为,暗示&lt;svg width="4" height="4" viewBox="0 0 1 1" style="overflow:visible"&gt; 需要找到整个内容的边界框并将 SVG 的全部内容呈现在每个世界单位 4px。这与我想要的 SVG 完全相反,我认为必须有一个规范来定义要渲染的 SVG 内容的范围。而且我怀疑 IE9 错过或误解了这个规范(我找不到)。
  • 感谢您的详细解答。 (也有意见)我同意大多数人,尤其是那些更熟悉二进制图像和图像标签的人,不会期望 SVG 图像默认溢出。将 必须 实现的默认 UA 与规则 7(关键字 SVG 文档)+w3.org/TR/SVG/styling.html#Scope 进行比较时,@Robert 上面的链接带来了一个有趣的裁决冲突
  • 在将所有内容与您的讨论链接和上面的 UA 样式表链接放在一起后,我看到了 IE9 的错误所在。规则 7 确实适用,不是作为单独的规则,而是与 overflow 中的所有规则结合使用,作为对 UA 的警告,即视口的默认样式为 overflow: hidden。
猜你喜欢
  • 1970-01-01
  • 2023-01-11
  • 2021-05-03
  • 1970-01-01
  • 1970-01-01
  • 2022-11-20
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多