空开始标记如何在HTML4中工作?

时间:2014-05-12 15:33:30

标签: html4 sgml

HTML4规范提到了various SGML shorthand markup constructs。虽然我理解其他人做了什么,但在HTML验证器的帮助下,我无法理解为什么有人想要一个空的开始标记。它甚至不具有属性,因此它不是较短的<span>

1 个答案:

答案 0 :(得分:2)

SGML definition of HTML4启用空启动功能。其中有一个有趣的部分。

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>

在此示例中,列表有两个类,plusminus用于正面和负面参数。但是,网站管理员很懒(而且并不关心HTML4不支持这一点),并决定使用空的开始标记,以便不为下一个元素指定class。由于<li>具有可选的结束标记,因此会自动关闭之前的<li>代码。