【问题标题】:Is the XMLNS attribute for SVGs valid in HTML5?SVG 的 XMLNS 属性在 HTML5 中有效吗?
【发布时间】:2014-08-22 13:17:34
【问题描述】:

我非常喜欢将 SVG 的内联用于矢量图标和类似用例。最近,在 Internet Explorer 8 中进行测试时,我发现 xmlns 属性的存在导致 HTML5Shiv 失败。我提交了一份问题报告 (https://github.com/aFarkas/html5shiv/issues/167) 只是为了收到 XML 不属于 HTML5 的尖刻回答。

SVG 虽然是 XML,但似乎已被接受为最佳实践,并且经常被推荐用于 HTML5,因此我得到的响应似乎很愚蠢。

我的问题是 XMLNS 在 HTML5 中使用是否有效?大多数教程似乎都推荐它(甚至是 HTML5Rocks:http://www.html5rocks.com/en/tutorials/svg/mobile_fundamentals/),除了它能够破坏 HTML5Shiv 之外,我还没有发现任何东西告诉我它在 HTML5 中是无效的。

我的问题的第二部分是删除该属性是否会造成伤害。如果我删除“xmlns”属性,我会在不同的浏览器中看到哪些错误?

我已将其从我的代码中删除,没有发现任何问题,但我想再次检查。

编辑

我包含了导致问题的 HTML/XML。请注意,只需删除“xmlns”部分即可解决此问题。

 <header>
   <div>
     <a href="#navigation" class="page_nav_btn" id="navBtn" >
       <svg xmlns="http://www.w3.org/2000/svg" width="22" height="18" viewBox="0" version="1.1">
         <switch>
           <g stroke="none" stroke-width="1" fill="none" fill-rule="evenodd">
             <g transform="translate(-1.000000, 0.000000)" fill="#FFFFFF">
               <rect x="0" y="0" width="23" height="3"/>
               <rect x="0" y="7" width="23" height="3"/>
               <rect x="0" y="14" width="23" height="3"/>
             </g>
           </g>
           <foreignObject>
             MENU
           </foreignObject>
        </switch>
      </svg>
    </a>
  </div>
</header>

【问题讨论】:

  • 其实我回答了你的问题:github.com/aFarkas/html5shiv/issues/167#issuecomment-53069093。如果您将有效的多语言标记与 xmlns 属性结合使用,我无法复制此问题。我可以看到一个问题,如果代码不满足多语言标记,但仍使用 xmlns 属性。因此,如果这导致您的问题,我不认为这是一个 html5shiv 问题。但我需要更多信息。
  • 是的,我看到了,谢谢。删除该行可以解决问题,并且似乎不会导致任何其他错误。如果你想看的话,我会把原始代码放在下面。同样,这个问题只出现在 IE8 中
  • 是的,我需要 HTML。

标签: xml html validation svg


【解决方案1】:

在任何随机属性都被允许的意义上是允许的,但在作为 text/html 的文档中,html 解析器在其他情况下是 ignored

【讨论】:

  • 我或多或少知道这一点。但是,似乎通常建议将其包含在 text/html 文档中。更具体地说,我想知道如果 HTML5 忽略它,为什么经常推荐它。
  • 如果你有独立的 SVG 文档作为 image/svg+xml 或 text/xml 是必需的,推荐那些对 html 有这种要求的人推荐
  • @Zack current HTML5 specs suggest:“鼓励交互式 HTML 用户代理提供一种将任何 SVG 片段导出为 XML 命名空间格式良好的 XML 片段的方法”;也就是说,HTML5 代理应该有办法插入所有命名空间、关闭所有标签并引用所有属性。但这并不常见,因此拥有可以剪切并粘贴到独立 SVG 文件中的干净 XML 代码通常很有用。作为默认命名空间声明,它应该不会引起问题,但您不能在 HTML5 中使用自定义前缀。