我应该在HTML页面中使用非标准标签来突出显示单词吗?


20

我想知道在HTML页面中出于某些自定义目的使用非标准标记是一种好的做法还是合法的做法。

例如:

Lorem ipsum dolor坐下,一直保持着安静的状态。Nullam结果,felis坐在amet suscipit laoreet,nisi arcu accumsan arcu,vel pulvinar odio magna suscipit mi。

我想突出显示“ consectetur adipiscing精英”的重要性,并突出显示“ nisi arcu accumsan arcu”。

因此,在HTML中,我将输入:

Lorem ipsum dolor坐在,<important> consectetur adipiscing精英</ important>。Nullam结果,felis坐了acu suscipit laoreet,<highlighted> nisi arcu accumsan arcu </ highlighted>,vel pulvinar odio magna suscipit mi。

并在CSS中:

important {
 background: red
 color: white;
}

highlighted {
 background: yellow;
 color: black;
}

但是,由于这些不是有效的HTML标签,可以吗?


56
<span class=..>
杰克·伯杰

12
根据定义,如果它们是自定义的,则它们不是HTML标记(已标准化)。它们只是没有特定含义的元素。
Oded


14
<em>基本上是你的<important><mark>是你的<highlight>
Peter C

3
你是对的。在HTML5规范<strong>是更适合的重要性比<em>是。我的错。
彼得

Answers:


50

不,这不是一个好习惯。您应该使用已经有意义的,有意义的标签(也许<em>在这种情况下),并应用CSS样式来满足您的设计要求。


3
大概他对课程不熟悉。语法是:HTML <em class="myclass">sample text</em>CSS .myclass: { background: red; etc. } 您可以为大多数标签(不仅是)提供类em。通常div还是span文本。 另请参阅
BlueRaja-Danny Pflughoeft 2012年

@ BlueRaja-DannyPflughoeft-在整个代码中散布的类也是处理此问题的错误方法。您最好在容器上使用带有一两个类的后代选择器。
Wyatt Barnett 2012年

14

您的问题询问这是“ 良好做法还是合法 ”。

首先:这是合法的 -至少是可以容忍的。浏览器一直被编程为处理它们不了解的标签,即使这意味着他们只是忽略它们。此HTML代码:

Some <b>bold</b> and some <slanted>italic</slanted>.

每个单独的浏览器都将显示为:

一些粗体和一些斜体。

此外,大多数浏览器将允许您在CSS中设置该元素的样式。因此,如果添加以下CSS定义:

slanted { font-style: italic; }

现在浏览器将呈现以下内容:

一些粗体和一些斜体

真: 自己尝试一下。顺便说一句,这是Web开发人员用来确保新HTML5标签在旧版浏览器中正确显示的一种技巧。

但是,这还不完整。完整的答案是否定的,这不是一个好习惯。您可能已经注意到我使用了“ 浏览器”一词。不幸的是,IE9之前的所有版本的Internet Explorer都无法实现此行为。在IE8和更早版本中,上面的代码仍将如下所示:

一些大胆和一些斜体。

Dive Into HTML5中对问题进行了非常详细的描述,您还将在其中找到解决方法的详细信息。但是,该解决方法需要JavaScript,因此它不是纯HTML解决方案,并且不能在所有情况下都适用。

因此,简短的答案:仅坚持使用标准HTML元素,并根据需要在CSS中对其进行样式设置。


不合法 规范定义了允许的元素。浏览器从作者错误中恢复的能力并不能使作者错误正确。
昆汀

在哪里可以找到不合法的地方?我尝试在HTML规范中进行搜索,但找不到很好的参考。
Dibbeke'2

2
@DavidDorward是的,我明白你的意思。我的意思是,浏览器保证在看到未知标签时不会损坏-与之相反,缺少围绕未封闭标签的保证。因此,这里的正确术语也许是“宽容的”而不是合法的。我已经相应地更新了答案。
马克·惠特克

@DavidDorward这是绝对合法的。W3C甚至在HTML5规范中甚至指出“对于该规范未定义的HTML元素必须使用HTMLUnknownElement接口”。如果那是不合法的,他们会这样说。我认为,对于UnknownElement还是Microformats是更好的Web语义方法而言,这是一个大问题。无论哪个更好,两者都是合法的。

1
从规范开始与HTML规范的早期版本不同,此规范详细定义了对无效文档和有效文档的所需处理。但是,即使在大多数情况下,对无效内容的处理都是明确定义的,但文档的一致性要求仍然很重要
Quentin

8

如果<important/>出于特定原因需要保留的语义,则可以使用XSL将自定义标签转换为有效的HTML。您可以在此处阅读有关此主题的更多信息:

http://www.w3.org/Style/XSL/WhatIsXSL.html

http://www.4guysfromrolla.com/webtech/081300-2.shtml

http://www.ibm.com/developerworks/xml/library/x-tiphtml/index.html

http://www.siteexperts.com/tips/xml/ts01/page5.asp

http://www.htmlgoodies.com/beyond/xml/converting-xml-to-html-using-xsl.html

<important/>最终的HTML输出中仍然没有,但是您可以将其自动转换为<span class="important"...


8

这里有很多答案,解释了为什么您不应该创建自己的自定义标签。可以说,它们都是不正确的。

WHATWG对自定义标签的分析得出的结论是,与设计通用div的样式相比,自定义标签是可接受的,符合标准的(因为未定义标签的处理已得到很好的定义)并且更易于访问。

在所有机械意义上,<x-accordion> </ x-accordion>都不比<div class =“ accordion”> </ div>差。在没有“ x手风琴”(或组件模型支持)定义的情况下,两者都具有相同的含义,都可以以相同的方式进行样式设置。一个是HTMLUnknownElement,另一个是HTMLDivElement,它们的API表面是相同的。

您应该做的事情(OP并未这样做)是按照惯例在所有自定义标签前面加上“ x-”。这清楚地表明您希望此标记位于文档的本地,并避免与以后的规范元素发生冲突。

有人认为,由于某些流行的浏览器无法以符合标准的方式处理自定义标签,因此您不应使用它们。但是,不兼容的浏览器的行为是其自身的问题,最好不要强迫您编写非语义标记。对于该问题,有Java和非Java的解决方案,应仅适用于您希望专门支持的那些不兼容的浏览器。

话虽如此,如果规范(<mark>)中存在一个标签,该标签明确涵盖了您创建的标签(<highlight>)的语义,那么使用现有标签无疑是更可取的。


如果有人希望标记一些文本(例如“ Dm7”),以便单击该文本将使动画手风琴演奏D小调第七和弦,那么“ x手风琴”方法是否是一种不错的选择?如果手风琴的Java脚本需要其他信息,应该如何最好地注明呢?作为<x-accordion data-notes="D2 D3 F3 A3 C4">Dm7</x-accordion>
2014年


4

在实际方面,没有必要使用新标签来突出显示。如果您更喜欢将斜体作为默认(非CSS)渲染,或者更喜欢将粗体作为默认设置,则可以使用emi标签。如果出于某种原因,您希望将默认渲染作为普通文本(即不突出显示),请使用。在每种情况下,您都可以使用属性来区分此用法和标记可能需要的其他用法。strongbspanclass

就这些元素的语义而言,HTML规范和(HTML5)草案是晦涩难懂的,但这不必引起任何大的麻烦。


7
-1这是个坏建议。在emstrong当它是语义上是正确的话,而不是当你想粗体或斜体标签应使用。您可以使用CSS更改演示文稿。
DisgruntledGoat 2012年

2

不可以,尽管允许从XHTML中的另一个名称空间添加新标签,但是强烈建议不要处理未指定的HTML标签。


2

嗯,这是合法的,因为您不会因为这样做而被捕。但是,如果W3C的刺客出现在您家门口,请不要感到惊讶。

首先,其他开发人员不会知道他们的意思。在的情况下,<important><highlight>他们,但如果你使用这样的,比如说<set>,你可能知道你指的是数学集合,但别人读你的代码可能会误以为是别的东西。没有规范给出答案,可能会造成很多混乱。

其次,如果W3C认为某个<important>元素是一个好主意,但认为它应该意味着一个紧急通知,例如

<important>This site is going to be down for maintenance 2/29/2012.</important>

然后你就被搞砸了。浏览器和您的开发人员会很困惑。他们可能会强迫您使用正则表达式解析代码,直到您发疯为止。我们都知道结果如何。

第三,IE <9不允许您在没有一点技巧的情况下为未知元素设置样式。不是一件大事,但很烦人。

最后,在这种情况下,<important><highlight>已经存在!<strong><mark>你在找什么。根据HTML5规范

强元素对其内容表示非常重要。

mark元素代表一个文档中标记或突出显示的文本内容,以供参考...

如果您不将其用于“参考目的”,则<span>带有类的a就可以了。


2

http://www.w3.org/TR/html5/elements.html

这是修订版1.5612。

作者不得使用本规范或其他适用规范所不允许的元素,属性或属性值,因为这样做会使将来扩展该语言的难度大大增加。


1
这是一个很好的答案的开始;但是,总的来说,增加编写该指南的一些理由将是有帮助的。此外,通常还倾向于添加其他替代策略以达到相同效果,但符合准则。
JustinC

1

在这里忽略其他所有人的意见。

这不是一个好习惯,主要有两个重要原因:

首先,完全有可能标准委员会决定在某个时候包含一个名为的标签<important>,最终导致您对其进行使用。当然,可能要花点时间。.但是您可能会浪费时间将其淘汰。

其次,(这是真正的原因),继承您代码的程序员要么将您的非标准方法不断地用非标准方法说“ wtf”,要么同样有可能完全被您的含义弄糊涂已经做了,只是沮丧地退出了。

所以,很好。您永远不会知道,您可能最终有一天会要求他们中的一个工作。


0

不,您不能创建自己的HTML标签,因为您将不得不让所有主要的浏览器来实现它们,当前,当浏览器找到无法识别的标签时,它们会忽略其中的所有内容,因此除非您想让自己的浏览器创建新的标签是没有意义的,即使那样,它们也只能在您的浏览器中使用。

您可以尝试为他们向w3c提交用例,但我怀疑这样做会成问题。


0

不,由于其他所有答案提供的所有原因,这不是好习惯。除了要重申这些要点外,我想提出一个我在那些答案中没有看到的选项!

如果没有现有标签的语义含义符合您的目标,则可以data-*在HTML 5规范中结合使用CSS和new 属性。当然,这将与您选择的大多数标签一起使用。

例:

Lorem ipsum dolor sit amet, 
<span class="important" data-type="important">consectetur adipiscing elit</span>. 
Nullam consequat, felis sit amet suscipit laoreet, 
<span class="highlighted" data-type="highlighted">nisi arcu accumsan arcu</span>, 
vel pulvinar odio magna suscipit mi.

尽管这不是一个完美的解决方案,但是由于没有明确定义data-*属性的语义,因此至少可以为已知data-type属性含义的人员提供其他信息。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.