有没有办法在HTML5中创建自己的HTML标签?

Raa*_*dor 106 html5

我想创造类似的东西

<menu>
    <lunch>
        <dish>aaa</dish>
        <dish>bbb</dish>
    </lunch>
    <dinner>
        <dish>ccc</dish>
    </dinner>
</menu>
Run Code Online (Sandbox Code Playgroud)

可以在HTML5中完成吗?我知道我可以做到

<ul id="menu">
    <li>
        <ul id="lunch">
            <li class="dish">aaa</li>
            <li class="dish">bbb</li>
        </ul>
    </li>
    <li>
        <ul id="dinner">
            <li class="dish">ccc</li>
        </ul>
    </li>    
</ul>
Run Code Online (Sandbox Code Playgroud)

但它的可读性低得多:(

Tim*_*rez 145

您可以在浏览器中使用自定义标签,但它们不是HTML5(请参阅自定义元素是否有效HTML5?HTML5规范).

假设您要使用名为的自定义标记元素<stack>.这是你应该做的......

步骤1

在CSS样式表中规范化其属性(想想css重置) - 示例:

 stack{display:block;margin:0;padding:0;border:0; ... }
Run Code Online (Sandbox Code Playgroud)

第2步

通过将此脚本附加到头部,使其在旧版本的Internet Explorer中工作(重要!):

 <!--[if lt IE 9]> 
 <script> document.createElement("stack"); </script>
 <![endif]-->
Run Code Online (Sandbox Code Playgroud)

然后,您可以自由使用自定义标签.

<stack>Overflow</stack>
Run Code Online (Sandbox Code Playgroud)

随意设置属性...

<stack id="st2" class="nice"> hello </stack>
Run Code Online (Sandbox Code Playgroud)

  • 完全正确.不是一个很棒的主意.但绝对正确.您可以在页面上创建自己的标记,并使它们全部向后兼容IE6,只需添加一个您想要使用的所有标记名称的数组,然后在for循环中创建每个标记名称,在你的页面头部,在你开始使用其中任何一个之前.这就是html5shim的首要工作方式.只是准备好在旧的IE中设计它们.而且,虽然我说这对于内部使用是可以的,但实际上并不是我想要教人们做事.完全没有. (18认同)
  • 我同意,编写自己的标签不适合胆小的人.确保彻底测试.我想说一件事......不要为IE6写CSS.完全浪费资源,并进一步使用甚至微软认可的这种可怕的产品. (13认同)
  • 有时......需要设定新的标准.;-) (9认同)
  • 非常重要的说明:虽然*browsers*支持创建自定义元素,但HTML5标准并未正式支持它.**技术上**,自定义元素是禁止的.你可以做到这一点,并使你的HTML看起来很好,语义上很重要,但如果你这样做,你就会违反标准 - 如果你关心的话.:) (5认同)
  • @alexwells - Chrome,FF,Safari,IE 7-9 (2认同)
  • 回到所有这些重要且"doctype"有意义的日子里,您可以下载doctype定义,修改它然后在您的站点上引用它(或者使用它在自定义解析器中进行验证,如Xerxes). (2认同)

mar*_*rio 26

我对这些答案不太确定.正如我刚刚读到的那样:"在HTML中总是允许标记."

http://www.crockford.com/html/

这里的重点是,HTML基于SGML.与具有其文档类型和模式的XML不同,如果浏览器不知道一个或两个标记,则HTML不会变为无效.想想<marquee>.这还没有达到官方标准.因此,虽然使用它使您的HTML页面"正式未经批准",但它也没有打破页面.

然后是<keygen>,它是特定于Netscape的,在HTML4中被遗忘并重新发现,现在在HTML5中指定.此外,我们现在还有自定义标记属性,例如所有HTML5标记上允许的数据-XyZzz ="...".

因此,虽然您不应该发明自己的整个自定义未指定标记沙拉,但并不完全禁止在HTML中使用自定义标记.但是,除非您希望使用+ xml Content-Type发送它或嵌入其他XML命名空间,例如SVG或MathML.这仅适用于SGML限制的HTML.

  • 这就是[规范](http://www.w3.org/TR/html401/appendix/notes.html#notes-invalid-docs)所说的:"此规范没有定义合规用户代理如何处理......元素...未在本文档中指定.\ [...]我们建议采用以下行为:如果用户代理遇到无法识别的元素,则应尝试呈现元素的内容.\ [...]作者并且用户不能依赖于特定的错误恢复行为" - 恕我直言,这意味着Crockfor错了一次. (8认同)
  • 我的意思是,他没有用任何东西支持他的陈述.仅仅因为道格拉斯·克罗克福德说道,这并不意味着它是真的. (6认同)
  • "因此,在使用它时,你的html页面"官方未经批准",它也没有破坏页面." - 嗯,尝试在Internet Explorer中设计您的发明元素.它不会起作用.你可能不会认为那个坏了,但是自定义标签无效并且在Internet Explorer中不起作用的事实,我看不出你怎么能说它们是"允许的". (5认同)
  • @Costa:HTML很有用,因为它是一组商定的标签含义.例如,浏览器可以点击链接,因为我们已经同意(通过[HTML规范](http://www.w3.org/TR/2011/WD-html5-author-20110809/spec.html)) <a>`标签是指向另一个页面的链接.你可以创建自己的标记沙拉,但它对除了你自己以外的任何人都没有意义.对于给定的目的,这可能没问题,但您不再使用HTML了. (4认同)
  • 同样感兴趣的是:http://www.librador.com/2009/10/20/Styling-undefined-tag-names-in-HTML/"你可以在HTML中使用任何标签名称,它将成为DOM,可以设计风格." (2认同)

Dan*_*nes 6

正如迈克尔在评论中所说,你想要做的事情很有可能,但你的命名是错误的.您不是"向HTML 5添加标记",而是使用自己的标记创建新的XML文档类型.

我在上一份工作中为一些项目做了这个.一些实用的建议:

  1. 当你说你想"将它们添加到HTML 5"时,我假设你真正想要的是你希望页面在现代浏览器中正确显示,而不必在服务器端做很多工作.这可以通过在xml文件的顶部插入"样式表处理指令"来完成,例如<?xml-stylesheet type ="text/xsl"href ="menu.xsl"?>.将"menu.xsl"替换为您创建的XSL样式表的路径,以将自定义标记转换为HTML.

  2. 注意事项:您的文件必须是格式良好的XML文档,包含XML标头<xml version ="1.0">.关于诸如不匹配的标签之类的东西,XML比HTML更挑剔.此外,与HTML不同,标签区分大小写.您还必须确保Web服务器正在使用适当的mime类型"application/xml"发送文件.如果文件扩展名为".xml",Web服务器通常会配置为自动执行此操作,但请检查.

  3. Big Caveat:最后,正如我所描述的那样,使用浏览器的自动XSL转换,最好只用于调试以及有很多控制权的有限应用程序.我成功地在我的上一个雇主那里建立了一个简单的内联网,最多只能由几十个人访问.并非所有浏览器都支持XSL,并且那些浏览器不支持完全兼容的实现.因此,如果要将页面发布到"狂野"中,最好将它们全部转换为服务器端的HTML,这可以通过命令行工具或许多XML编辑器中的按钮来完成.


Luk*_*keN 5

在HTML中创建自己的标记名称是不可能/无效的.这就是XML,SGML和其他通用标记语言的用途.

你可能想要的是什么

<div id="menu">
    <div id="lunch">
        <span class="dish">aaa</span>
        <span class="dish">bbb</span>
    </div>
    <div id="dinner">
        <span class="dish">ccc</span>
    </div>
</div>
Run Code Online (Sandbox Code Playgroud)

或代替<div/>,并<span/><ul/><li/>.

为了使它看起来和功能正确,只需挂钩一些CSS和Javascript.

  • 不,不是.SGML是在XML出现之前很久就制作完成的. (5认同)

小智 5

自定义标签可以在 Safari、Chrome、Opera 和 Firefox 中使用,至少就使用它们代替“class=...”而言是这样。

css 中的绿色 {color: green} 适用于

<green>This is some text.</green>
Run Code Online (Sandbox Code Playgroud)


小智 5

我只想在前面的答案中添加一个含义,即只为自定义元素使用双字标签.它们永远不应该标准化.


例如,你想使用标签<icon>,因为你不喜欢<img>,而你也不喜欢<i>......

好吧,请记住,你不是唯一一个.也许在将来,w3c和/或浏览器将指定/实现此标记.

此时,浏览器可能会为此标记实现本机样式,并且您的网站设计可能会中断.

所以我建议使用(根据这个例子)<img-icon>.


事实上,标签<menu>是明确定义的,即不是如此使用,而是定义.它应该包含<menuitem>哪些行为<li>.