是什么阻止我在HTML中使用任意标签?

Cas*_*Chu 9 html xml standards specifications

即使是新的HTML5标签也不足以描述结构而不会回退到divs.什么阻止我改变:

<div class="post">
    <div class="userinfo">
        <span class="name">Casey</span>
        <img class="avatar" src="..." />
    </div>
    <div class="body">
        <p>blah blah blah</p>
        <p>blah blah blah</p>
        <p>blah blah blah</p>
    </div>
</div>
Run Code Online (Sandbox Code Playgroud)

变成这样的东西:

<post>
    <userinfo>
        <name>Casey</name>
        <img class="avatar" src="..." />
    </userinfo>
    <pbody>
        <p>blah blah blah</p>
        <p>blah blah blah</p>
        <p>blah blah blah</p>
    </pbody>
</post>
Run Code Online (Sandbox Code Playgroud)

对我来说,第二个例子更清洁.是否有任何东西(即浏览器支持)阻止我这样做?

(我知道它本质上是什么,实际上是XML,但在这种情况下,问题就变成了,"浏览器支持对于呈现XML网页是什么样的?")

小智 6

一个原因是Internet Explorer(以及早期版本的Firefox)没有针对未定义的标记进行回退,并且最终忽略了它们的样式和嵌套.没有shiv,您的网站将在这些浏览器中可怕地破坏.


Mar*_*c B 5

您可以使用自己的标签,但问题是由于它们不是标准的,浏览器不会知道它们可能有匹配的结束标签。当然,该文档不会被验证为正确的 HTML/X-HTML。

<blah>
    This is some <span>test</span> test text with another <bogus>tag</bogus> tag
    within, which ends with a fake self-closing <tag />
</blah>
Run Code Online (Sandbox Code Playgroud)

浏览器将看到<blah>,而不是现在如何处理它,并将其视为本质上“无”而忽略它。然后他们会很高兴地解析到下一位,并看到一些纯文本,里面有一个有效的跨度。最终他们会到达</blah>并忽略它。

这就是 Javascript 和 CSS 必须支持打开 HTML 注释序列作为其各自语言定义的一部分的原因:

<script type="text/javascript">
<!--  // <--actually a part of the javascript spec, treated as a comment.
     alert('hey!');
//-->
</script>
Run Code Online (Sandbox Code Playgroud)

当 Javascript 首次被引入时,仍然有许多其他浏览器完全不知道 Javascript,因此它们会忽略标签,并愉快地输出您的 Javascript 代码。CSS 同上。

如果您确实需要自定义标签,您可以将文档生成为带有您自己的 DTD 的 XML,然后使用 XSLT 将其转换为有效的 HTML/X-HTML 文档。

  • *“浏览器将未知标签视为单例”*。这完全是错误的。浏览器将未知标签视为“容器”标签,而不是单例。打开 Web 检查器并查看页面“&lt;html&gt;&lt;body&gt;&lt;blah&gt;You'll see this text&lt;/blah&gt;&lt;/body&gt;&lt;/html&gt;”的文档树。如果您不相信,请尝试以下操作:`&lt;html&gt;&lt;body&gt;&lt;blah style="color:red;"&gt;您将看到此文本&lt;/blah&gt;&lt;/body&gt;&lt;/html&gt;` (2认同)