HTML4 规范提到了各种 SGML 速记标记结构。虽然我了解其他人在做什么,但在 HTML 验证器的帮助下,我无法理解为什么有人想要一个空的开始标签。它甚至不能有属性,所以它不是更短的<span>
.
1 回答
HTML4的SGML 定义启用了空开始功能。在其中,有一个有趣的部分具有功能。
FEATURES
MINIMIZE
DATATAG NO
OMITTAG YES
RANK NO
SHORTTAG YES
LINK
SIMPLE NO
IMPLICIT NO
EXPLICIT NO
OTHER
CONCUR NO
SUBDOC NO
FORMAL YES
APPINFO NONE
特征的重要部分是MINIMIZE
部分。它启用OMITTAG
了 HTML 的标准功能,允许省略开始或结束标签。这特别允许您编写类似的代码<p> a <p> b
,而无需关闭段落。
更重要的部分是SHORTTAG
特征,它实际上是一个类别。但是,由于它没有展开,SGML 自动假定其中YES
的所有条目。它包含以下类别。如果您对 SGML 中的其他速记功能不感兴趣,请随意跳过此列表。
ATTRIB
,它处理属性,并具有以下选项。DEFAULT
- 定义属性是否可以包含默认值。<p>
这允许在不定义每个属性的情况下进行编写。<p id="" class="" style="" title="" lang="en" dir="ltr" onclick="" ondblclick="" ...></p>
毕竟没有人愿意写作。嘿,我什至放弃了尝试写这一切。这是一个普遍支持的功能。OMITNAME
- 如果属性和值具有相同的名称,则该值是可选的。例如,这允许写作<input type="checkbox" checked>
。这是一个普遍支持的特性(尽管 HTML5 将默认值定义为空字符串,而不是属性名称)。VALUE
- 允许写入不带引号的值。例如,这允许编写代码<p class=warning></p>
。这是一个普遍支持的功能。
ENDTAG
,它是包含以下选项的结束标签的类别。UNCLOSED
- 允许在结束前一个标签之前开始一个新标签,允许像<p><b></b</p>
.EMPTY
- 允许未命名的结束标签,例如<b>something</>
. 他们关闭仍然打开的最新元素。
STARTTAG
,它是包含以下选项的开始标签的类别。NETENABL
- 允许使用 Null End Tag 表示法。值得注意的是,这种表示法与 XHTML 不兼容。无论如何,该功能允许编写类似 的代码<b/<i/hello//
,这意味着与<b><i>hello</i></b>
.UNCLOSED
- 允许在结束前一个标签之前开始一个新标签,允许像<p<b></b></p>
.EMPTY
- 这是要求的功能。
现在,重要的是要了解它的EMPTY
作用。虽然<>
一开始可能看起来毫无用处(嘿,当 Validator 之外没有任何东西支持它时,你怎么能确定它的作用),但实际上并非如此。它打开前一个兄弟,允许如下代码。
<ul>
<li class=plus> hello world
<> another list element
<> yet another
<li class=minus> nope
<> what am I doing?
</ul>
在此示例中,列表有两个类,分别plus
用于minus
正参数和负参数。然而,网站管理员很懒(并且不关心 HTML4 不支持这一点),并决定使用空开始标记以便不指定class
下一个元素。因为<li>
有可选的结束标签,这会自动关闭前一个<li>
标签。