可以编造HTML标签吗?

9

我如何才能做到这一点:

<head>    
<style type="text/css">
red{
    display:block;
    background:red;
    height:20px;
    width:20px;
}
</style>
</head>
<body>

<red></red>

这会起作用吗?有什么会阻止它吗?

据我所知,浏览器将查找并根据选择器规则匹配css样式,只要您指定了所有必需的规则(我确定还有更多规则),那么有什么能阻止我在屏幕上看到一个小红框呢?


1
在 HTML5 中,这是可以的。在那里,您可以发明自己的标签。在 XHTML 和 HTML < 5 中,它只是无效的标记。但是,您必须关闭 body 标记并将整个标记包装在 html 标记中。 - Fidi
4
请告诉我 HTML 5 规范中哪一部分说明可以创造新的元素,我相信这样的规定并不存在。 - Quentin
1
@GeorgeStocker 为什么你关闭了一个更旧的问题,而选择了一个更新的问题? - tereško
@tereško 请查看http://meta.stackexchange.com/questions/171882/why-is-an-old-question-a-duplicate-of-a-new-one,了解原因。 - George Stocker
这个问题已被关闭为重复,因为我们希望“更好的提问”(即拥有最多浏览量、投票和良好答案的问题)作为规范答案存在。如果您对此有疑问(或者想开启新的元讨论),请参阅此元问题:http://meta.stackexchange.com/questions/171882/why-is-an-old-question-a-duplicate-of-a-new-one - George Stocker
显示剩余9条评论
5个回答

8

这是可能的,但不能在所有浏览器上直接使用,尽管它们对其有一定程度的支持。如果您真的想创建自己的HTML标签子集,您应该考虑为其创建自己的DTD。

DTD是文档类型定义,基本上是一个文件,浏览器会读取该文件以查看您特定的html标记子集中可用的标记。

本文描述了如何创建自己的DTD,但不建议这样做,因为它不是有效的HTML。


3
拥有一个DTD(文档类型定义),其中允许使用<red>元素并不会使该元素成为HTML,也不会改善浏览器对它的支持。 - Quentin
不过,这将防止您的页面在DTD中定义的新HTML方言的验证失败。如果您的浏览器正确实现规范,它也应该允许CSS样式化这些新元素,但众所周知,情况并非总是如此。 - ChrisR

3

这应该可以正常工作,但是如果您不创建自定义DTD,那么您的HTML将无法通过验证。


请原谅我的无知,DTD是什么? - Abhishek
文档类型声明。您告诉浏览器您的文件是什么类型,并将其链接到模式,以便它知道可接受(有效)和不可接受的“规则”。 - snowBlind
我知道当我说模式时,它听起来不太对劲。浏览器可能不在意,但这仍然是声明文档类型的目的。 - snowBlind
等等……如果浏览器不在意,它仍将遵循CSS定义的渲染规则,在实际应用中,最终用户将无法区分差异?只有“标准验证器”才会出现这种情况? - Abhishek
不违背Quentin的说法,但是在某些情况下,声明DTD或不声明DTD会导致某些HTML/CSS代码无法正确显示...主要是在IE浏览器中。因此,我不会说“浏览器不关心”。 - snowBlind
显示剩余3条评论

2
“Is it possible to make up html tags?” 你可以加入工作组并提出新元素。
“这能行吗?” 对于某些“行”的定义来说,它可能会对Internet Explorer、屏幕阅读器、搜索引擎等造成不友好的影响。但它不会是HTML。
HTML有各种有用的语义元素(以及一些非语义元素),可以通过class属性扩展(在HTML 5规范(草案)中可能还包括role)。请坚持使用这些元素。

1
使用模板/宏等处理繁琐的工作。不要尝试自行重新设计HTML。 - Quentin
绊倒我?怎么可能呢?如果我要实现几个-webkit-特定的功能(3D CSS),那么我已经排除了很多浏览器... - Abhishek
当某些功能不可用时,事物应该被设计成优雅地降级,以避免出现无法工作的情况。 - Quentin
好的,伙计,就这样吧,我们结束了,好吗? :-) - Abhishek
1
@Quentin - 在HTML5中没有role。与XHTML2相反,在HTML5中,role属性仅限于WAI-ARIA角色,因此只允许使用一组短的固定值。有关HTML5的可扩展性点,请参见此处:http://www.w3.org/TR/html5/infrastructure.html#extensibility - Alohci
显示剩余3条评论

1

尽管为红色元素提供CSS规则时会显示它,但它仍然是文档中的外来物。例如,像id、class或style这样的属性不会像通常一样被浏览器识别。因此,在脚本中无法通过id获取元素,并且无法通过CSS中的类选择器为元素设置样式。但是,XmlDom方法(如getElementsByTagName)可以正常工作。在引入红色元素时要注意这一点。


当然,这并不是一个面向生产的方法,这只是我偶然发现并变得好奇。但是,是的,我已经学会了在尝试“玩弄W3C”HTML标准时保持谨慎。 - Abhishek

0

我可以建议一种使用替换的 PHP 技巧。

<?
  function red_rpl($buffer)
  {
    $buffer = str_replace('<red>', '<div class="red">', $buffer);
    $buffer = str_replace('</red>', '</div>', $buffer);
  return $buffer;
  }
  ob_start('red_rpl');
?>

<style>
  .red {
    display:block;
    background:red;
    height:20px;
    width:20px;
  }
</style>

<red></red>

DOM 中不会有任何新的标签,但是你的源文件看起来会更加漂亮 :)


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接