【问题标题】:Can you define your own self-closing tag in HTML5?你能在 HTML5 中定义你自己的自闭标签吗?
【发布时间】:2013-07-17 12:47:55
【问题描述】:

我已经阅读了this主题,但我仍然有疑问。 有没有办法定义 void 标签?

我试过这个:

<icon class="home"/> (know that slash isn't obligatory)

但是,如果这个标签FF关闭后还有文字内容的话。

<icon class="home"/> Go home

制作

<icon class="home">Go home</icon>

我应该在某个地方定义标签是 void-element 吗?还是用 HTML5 做不到?

【问题讨论】:

  • “空标签”是什么意思?
  • 简短的回答是您不应该这样做。以防万一,Twitter 使用i 标签作为图标——这是“错误的”,但它确实有效。但是,有一些非常先进的东西可以让你做到这一点。简而言之,如果您在学术上提问,这是 HTML 令人兴奋的新部分,如果您在实践中提问,请不要! :)
  • 啊,自动关闭。对。

标签: html tags


【解决方案1】:

这目前不是一个答案,因为它没有完全解决问题,但它不适合评论部分。

如果解析为 html5 规范,浏览器会忽略 /&gt; 中的 /MathLMSVGforeign elements 除外,因为对于此 模块的元素他们的规格有自封闭元素,所以它需要保持有效)

规格的相关部分:

(浏览器应该如何处理丢失的标签以及它们忽略/的相关部分丢失了,我需要查一下)

如果元素是void element,则不会生成结束标签,因为它不需要。

对于其他元素,如果缺少结束标记,则会创建它。 所以如果你写这样的东西:

<div>
    <div/>test
</div>

这会导致

<div>
    <div>test</div>
</div>

因为/ 被忽略了。

自定义元素默认为non-void。我知道Custom Elements 有一个草稿,但老实说,我不知道某些浏览器是否已经支持它。但即使是这样,你也会遇到向后兼容的问题。所以我不建议使用它。

即使这样定义一个不以x- 为前缀的标签名称也是一个坏主意,因为如果稍后使用您选择的名称的规范添加一个元素,并且如果它具有其他含义,您将遇到问题。

只要我有时间查看规格,我就会提供相应的缺失部分来证明这一点。

【讨论】:

  • 这个答案有一些错误。 HTML5 规范定义了自己的解析外部元素的规则,它不遵守 XML、SVG 或 MathML 规范。例如,XML 标记名称区分大小写,但内联 SVG 和 MathML 标记名称不区分。
【解决方案2】:

你不应该定义自己的 HTML 标签,句号。

HTML 很有用,因为它是一组公认的标签含义。

(例如,浏览器使链接可点击,因为我们已经同意(通过 HTML 规范)&lt;a&gt; 标记是指向另一个页面的链接。)

可以创建自己的标签,但它们对除您自己以外的任何人都没有任何意义。

出于给定目的,这可能没问题,但您实际上不再使用 HTML。

【讨论】:

  • 但是如果我在 CSS(和 JS)中定义所有显示内容,那么标签将对所有人都友好,并且浏览器会正确解析它。
  • @non:是的,但正如我所说,这对除了你之外的任何人都没有任何意义。 (正如我也说过的,这可能对你的目的没问题——我不清楚你的目的是什么。)
  • 我认为这一观点已经被自定义标签倡议所取代。您可以通过选择正确的名称、添加适当的样式和/或 JavaScript 行为等来赋予自定义标签意义。“不是真正的 HTML”是正确的,直到自定义标签成为浏览器中的一个可行选项并且本身已经标准化(作为一个过程) . HTML5 自定义标签,它 HTML,即使是语义上有效的HTML提供的标签也被正确定义和使用。另一种选择是&lt;div class="foo"&gt; 汤。
  • @flow:“你通过选择正确的名称来赋予自定义标签意义”——除非你在某个地方描述了这个意义是什么,否则你并没有可靠地赋予它意义给其他人。
  • @PaulD.Waite 人类不是 HTML 的主要目标受众,是吗?只要您保持代码干净,那么&lt;my-icon name="foo"&gt; 而不是&lt;span class="my-icon" data-name="foo"&gt; 有什么问题?我可能会避免在常规网站中使用此类自定义标签,但如果您正在制作 hml5 应用程序,我不明白为什么自定义标签会造成任何伤害。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2012-07-04
  • 1970-01-01
  • 2018-06-05
  • 1970-01-01
  • 2011-06-27
  • 2015-07-25
  • 2011-05-30
相关资源
最近更新 更多