2012-03-23 43 views
2

我一直认为HTML需要加上引号在他的性质:不带引号的HTML属性?

<div class="service_definition"><div class='service_definition'>

但最近我注意到,W3验证不承认以下为错误:

<div class=service_definition>

因此,如果我省略引号,这是否正确?还是有任何限制?

+0

并考虑到如果您使用xhtml,您**必须**总是使用引号。请参见[xhtml与html4的区别](http://www.w3.org/TR/xhtml1/#h-4.4)。 – PhoneixS 2012-03-23 10:26:23

+0

什么版本的html? – 2017-06-22 17:42:37

回答

9

始终使用引号。

我不认为没有引号的HTML属性被归类为无效的HTML,但它们可能会导致您在后续的问题上出现问题。

By default, SGML requires that all attribute values be delimited using either double quotation marks (ASCII decimal 34) or single quotation marks (ASCII decimal 39). Single quote marks can be included within the attribute value when the value is delimited by double quote marks, and vice versa. Authors may also use numeric character references to represent double quotes (") and single quotes ('). For double quotes authors can also use the character entity reference ".

In certain cases, authors may specify the value of an attribute without any quotation marks. The attribute value may only contain letters (a-z and A-Z), digits (0-9), hyphens (ASCII decimal 45), periods (ASCII decimal 46), underscores (ASCII decimal 95), and colons (ASCII decimal 58). We recommend using quotation marks even when it is possible to eliminate them.

来源:http://www.w3.org/TR/REC-html40/intro/sgmltut.html#h-3.2.2


我觉得他们的明确定义,当一个伟大的方式的属性值开始和结束。

采取例如class属性,它可以通过空格分隔多个类:

<div class="classa classb" id="123"> 

这清楚地表明我的课是classaclassb,与123的元素ID的浏览器。

拿走引号,我们已经有了:

<div class=classa classb id=123> 

浏览器现在可以将此解释为3类,没有编号。 classaclassbid=123

或者它甚至可以将其解释为3个属性。 class="classa"classb=""id="123"

(即使计算器的代码着色系统与这一个挣扎!)

+1

所以这是验证器的错误? – Shylux 2012-03-23 09:55:22

+0

@Shylux没有它的错误,它只是非常不推荐。看我的编辑。 – Curt 2012-03-23 09:57:06

+0

验证器不一定总是正确的,特别是因为HTML是一种非常“个人风格”的代码,我不会建议遵守它的每一条规则。只需使用whats标准,并在所有浏览器中都可以使用 – rickyduck 2012-03-23 10:01:30

5

可以省略从属性值引号如果该值由下列字符的唯一(CF的技术名字的概念):

letters of the English alphabet (A to Z, a to z) 
digits (0 to 9) 
periods . 
hyphens - 

因此,WIDTH = 80和ALIGN = CENTER是WIDTH = “80” 和ALIGN = “CENTER” 法律速记。对HREF = foo.html之类的URL的引用是可以接受的,但是通常在用于属性时URL必须被引用,例如, HREF = “http://www.hut.fi/”。 - 一些浏览器更宽容。一些浏览器甚至可以接受含有开始报价的元素,但没有任何结束报价。这种使用是非常糟糕的做法。

参考http://www.cs.tut.fi/~jkorpela/HTML3.2/3.4.html

0

W3的验证表明这对我的错误:

An attribute value specification must be an attribute value literal unless SHORTTAG YES is specified. 
7

的规则依赖于HTML版本。

在所有类型的XHTML中,由于XHTML是XML,因此属性值必须始终显示在引号中。验证器自然会检查这一点。在浏览器实践中,情况有所不同。在真正的XML模式下,缺少报价会中止文档解释:内容未显示,仅向用户显示错误消息(可能包含源代码的摘录)。但是,当XHTML被用作HTML时,这是正常的方式(特别是由于旧版IE浏览器的XHTML文盲),浏览器通过HTML规则处理它。

否则,在HTML中,正式规则因规格而异,但浏览器接受不带引号的属性值。 HTML5草案反映了这种自由主义的态度:只有当值包含空格,换行符,严重(`),等号(=),小于号(<),大于号(>),Ascii引号(')或Ascii撇号(')。

你在实践中做了什么很大程度上是一个惯例问题,它应该取决于同事或其他可能为你的代码工作而不是公众舆论的人的意见。许多人认为XHTML的限制性语法很酷,其他人可能会认为不必要的引号会混淆代码,甚至存在一些风险:无论何时需要成对使用某些字符,总会有忘记关闭组件或忘记它的机会。

0

有时您可以无需使用HTML属性标记。

我最近在SharePoint中创建了一个链接到公司Web应用程序的文本文档。在为href值(网址)使用引号时,我收到了一条错误消息。这在技术上是正确的。

我注意到在DOM中,一组引号被浏览器自动添加到href值。所以我尝试输入没有引号的href值,这固定了导航错误。