使用自定义HTML标签

在我的html,我很好奇,如果它是使用独特的标识符,如<toys> </toys>来保存图像,而不是<h2>在语义上是正确的。 例如:

是否最好有: <toys class="grid_4 push_2">&nbsp</toys>

与CSS:

  toys { background: url("toys.png") no-repeat scroll 0 0 transparent; width: 181px; height: 93px; margin-top: -8px; } 

而不是:我目前有: <h1 class="grid_4 push_2">&nbsp</h1>

与CSS:

  h1 { background: url("toys.png") no-repeat scroll 0 0 transparent; width: 181px; height: 93px; margin-top: -8px; } 

是否使用像<toys>这样的唯一标识符在语义上是正确的?

最好避免使用自定义标签,因为您永远不知道这些标签什么时候可以变得标准化,并在未来有特殊用途。

如果您想避免使用标题标签,那么对于您的示例最好的做法如下:

 <div class="toys grid_4 push_2">&nbsp</div> .toys { background: url("toys.png") no-repeat scroll 0 0 transparent; width: 181px; height: 93px; margin-top: -8px; } 

此外:

如果您在devise页面时不使用标准的html标签,那么当样式被禁用时,它们将不会以任何有组织的方式出现。 这不是一个问题,但是如果出于任何原因,您需要查看没有样式的“玩具”列表,那么除非您使用带有<li>标签的<ul><ol> ,否则运气不好。

更新:

正如Flimzy在评论中指出的那样,自定义HTML元素现在有自己的W3C规范。 但是,他们还没有完全支持。

  • 规格: https : //www.w3.org/TR/custom-elements/
  • 支持: http : //caniuse.com/#feat=custom-elements

这些回应大部分都是很好的一般性build议,但是对于这个问题,我认为是完全合法的。

HTML5已经是一个移动的目标; 浏览器实现规格和不同的创新步伐。 没有单一的东西叫“有效的HTML”,至less不是值得使用的。 如果你正在为地球上的每个人和机器人/爬行者build立一个公共页面,那么你已经不得不A)检测客户端并相应地进行自定义,复杂的/高级的页面或者B)使它真的非常简单明了。 另一方面,如果你把它放在局域网上,或者把它藏在login墙后面,或者在前沿发展,并且计划频繁更新,那么你应该随意地自由地进行创新。 浏览器开发者和规范编写者迎合他们的需求,你也可以做同样的事情。

所以,如果你想要一个自定义标签,请仔细select(这里我要指出的是,成为浏览器实现规范的一部分的可能性是完全可以忽略不计的),然后去做。 为了使你的CSS在IE中工作,你必须像html5shim那样做,并在你的javascript中调用document.createElement('toys')。

我还要补充一点,习惯元素正在得到自己的标准和支持,但目前的共识是,它们都应该有一个“ – ”的名字。 所以我会推荐像“X玩具”或“我的玩具”,而不是“玩具”。 就我个人而言,我并不满足于这个惯例,但是我明白了原因。

你当然可以 ; 但是,这样做通常不是一个好主意 。 在很多方面,HTML5正在转向类似的东西,但通用化; 具有特定的标签,虽然支持不同浏览器之间可能会有非常不同的结果。

更新(因为所有的答案都是旧的):

从Web组件开始,API在每个主要浏览器中都得到了实现,在我看来,您将来无法避免使用自定义标签。 我认为Web组件很容易成为主stream。 整个理论build立在它上面:自定义标签,自定义属性自定义JS附加到这些元素。

所以我说:现在使用你自己的标签并不是坏事,但你仍然需要考虑与SEO相关的build筑。

是的,这在语义上是正确的。

然而,这是无效的语法,因为HTML有一组定义的标签。

你可以在一些浏览器中解决这个问题。

这就是说,这样做的好处是什么? 这实际上只会使需要维护源代码的人受益。

仅供参考,您所提议的几乎是XML。

我同意@superUntiled,你应该好好使用CSSselect器(类和ID)。 所以如果你有一个“玩具”types的对象,你应该为该对象创build一个类。 然后,您可以使用select器.toyselect所有使用CSS的cars

像这样的东西:

 <style> .toy { color: red; } </style> <p class="toy">My little car</p> 

当然,如果你定义了一个标签,并且在你的样式表中定义它应该做什么,那么应该把它绑定起来? 即使您的新标签后来变得标准化,您的样式表也会覆盖标准 – 毕竟这是样式表的作用。

例如,我经常需要在我的页面上控制换行符。 而不是使用笨拙的

 <span style="white-space:nowrap">bla bla bla</span> 

每次,我把我的非破碎的文本放在我自己的标签中,并在我的样式表中定义:

 nbr { white-space:nowrap; } 

所以

 <p> This is some text. <nbr>This is some more text.</nbr></p> 

会出现在一行,如果有空间,否则第二句将出现在下一行。 或者,确切地说,在所有浏览器中,除IE的旧版本以外。 为了铸铁,我添加了以下每个页面[头]部分(在WordPress中,只需要添加到主题的header.php): –

 <!--[if lt IE 9]> <script> document.createElement('nbr'); </script> <![endif]--> 

还是我错过了什么?

如果你的文档types被设置为XHTML,你应该没问题。 但是它通常对于HTML文档types无效。

你不想制作自己的标签。

HTML标签是在HTML规范中定义的。

代替:

 <h1 class="grid_4 push_2">&nbsp</h1> 

你应该这样做:

 <h1 class="toys">&nbsp</h1> 

但是,如果您使用XML,您可以自己制作标签。

但是请注意,并不是所有的浏览器都支持你的标签,你将无法使用CSS来devise它们。

新的HTML5标签也是如此