我一直以为html在他的属性中需要引号:
<div class="service_definition">
或<div class='service_definition'>
但是最近我发现w3验证器不会将以下内容识别为错误:
<div class=service_definition>
如果我省略引号,那么可以吗?或者有任何限制吗?
答案 0 :(得分:13)
始终使用引号。
我不相信没有引号的HTML属性被归类为无效HTML,但它们可能会在以后的行中引起您的问题。
默认情况下,SGML要求使用分隔所有属性值 双引号(ASCII十进制34)或单引号 标记(ASCII十进制39)。单引号可以包含在内 当值由双引号分隔时的属性值, 反之亦然。作者也可以使用数字字符引用 代表双引号(“)和单引号(')。对于double 引号作者也可以使用字符实体引用“。
在某些情况下,作者可以指定属性的值 没有任何引号。属性值可能只包含 字母(a-z和A-Z),数字(0-9),连字符(ASCII十进制45), 句点(ASCII十进制46),下划线(ASCII十进制95)和冒号 (ASCII十进制58)。我们建议使用引号,即使它是 可以消除它们。
来源:http://www.w3.org/TR/REC-html40/intro/sgmltut.html#h-3.2.2
我认为它们是明确定义属性值何时开始和结束的好方法。
以class
属性为例,该属性可以包含多个以空格分隔的类:
<div class="classa classb" id="123">
这清楚地显示了我的课程为classa
和classb
的浏览器,其元素ID为123
。
取走引号,我们得到了:
<div class=classa classb id=123>
浏览器现在可以将其解释为3个类,没有id。 classa
,classb
和id=123
。
或者甚至可以将其解释为3个属性。 class="classa"
,classb=""
和id="123"
(甚至stackoverflow的语法样式也在努力解决这个问题!)
答案 1 :(得分:8)
规则取决于HTML版本。
在各种XHTML中,属性值必须始终以引号显示,因为XHTML是XML。验证者自然会检查这个。在浏览器实践中,它是不同的。在真正的XML模式中,缺少的引用中止文档解释:未显示内容,仅向用户显示错误消息(可能包含源代码的提取)。但是当XHTML作为HTML提供时,这是正常的方式(特别是由于旧版IE的XHTML文盲)浏览器通过HTML规则对其进行处理。
否则在HTML中,正式规则因规范而异,但浏览器接受没有引号的属性值。 HTML5草稿反映了这种自由态度:仅当值包含空格,换行符,坟墓(`),等号(=),小于符号(&lt;),大于符号(&gt;)时才需要引号, Ascii引用(“),或Ascii撇号(')。
你在实践中所做的事情很大程度上取决于惯例,它应该取决于同事或其他可能在你的代码上工作的人的意见,而不是公众舆论。许多人认为XHTML的限制性语法很酷。其他人可能会认为不必要的引用会扰乱代码甚至会产生一些风险:每当你需要成对使用某些字符时,总会有机会忘记关闭组件或者错误输入它。
答案 2 :(得分:5)
如果值仅包含以下字符,则可以省略属性值中的引号(参见名称的技术概念):
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/”。 - 有些浏览器更宽松。有些浏览器甚至可能接受带有起始引用但没有任何结束引用的元素。这种使用是非常糟糕的做法。
答案 3 :(得分:0)
w3验证器将它显示为我的错误:
An attribute value specification must be an attribute value literal unless SHORTTAG YES is specified.
答案 4 :(得分:0)
有时您可以使用不带引号的HTML属性。
我最近在SharePoint中创建了一个链接到公司Web应用程序的文本文档。使用href值(网站网址)的引号时收到错误消息。这在技术上是正确的。
我在DOM中注意到,浏览器会自动将一组引号添加到href值。所以我尝试输入没有引号的href值,这修复了导航错误。