有没有一个很好的理由为什么HTML没有用于关闭带有内容的标记的简写方法?

时间:2012-11-08 20:40:21

标签: html xml

我只是好奇。是否有一个理由为什么“更高权力”从未添加到HTML规范(或XML规范,就此而言)是一种用于关闭包含内容的标签的简写方法?

例如,假设我有以下html表:

<table>
    <tr><td>foo</td><td>bar</td><td>foo</td></tr>
    <tr><td>bar</td><td>foo</td><td>bar</td></tr>
    <tr><td>1</td><td>2</td><td>3</td></tr>
</table>

是否有任何理由不能使用速记标签关闭每个标签?

也许是这样的:

<table>
    <tr><td>foo</><td>bar</><td>foo</></>
    <tr><td>bar</><td>foo</><td>bar</></>
    <tr><td>1</><td>2</><td>3</></>
</>

这可以节省几个字节的数据,我能看到的唯一一个缺点是,如果没有给出命名引用,你就无法快速判断哪些标记(或多个标记)已被关闭。但是,如果您要动态生成内容并希望在数据中保存几个字节,这可能是一个有用的选项。

我很肯定我不是第一个想到这一点的人。为什么没有将这些功能添加到任何HTML或XML规范中?

5 个答案:

答案 0 :(得分:2)

这是完全有效的HTML:

<div>
    <p>My paragraph
</div>

如果我要用一个短标记替换结束</div>标记:

<div>
    <p>My paragraph
</>

浏览器如何知道您是要关闭<p>代码还是<div>代码?这个想法的主要问题是它引入了歧义,但显然它也降低了可读性,我相信其他人会想出其他的负面因素!

<强>更新

另请注意,由于您应该使用gzip压缩(通过在文本中查找重复的字符来工作)来提供页面,因此您实际上可以通过执行此操作来损害线上传输大小。在http://gzipper.com进行的快速测试证实了一个小文本:

<div><div><div><div><div></div></div></div></div></div> <!-- 45% compression -->
<div><div><div><div><div></></></></></> <!-- 25% compression -->

答案 1 :(得分:2)

HTML,由规范定义并包括HTML 4.01,确实有关闭内容元素的简写方法。这只是理论上的,但问题是为什么浏览器没有实现这样的功能。除了其他内容之外,在B.3.7 Shorthand markup中的HTML 4.01规范中提到了这些功能,它们包括NET(=空结束标记),例如。

<blockquote/foobar/

由正式定义等同于

<blockquote>foobar</blockquote>

规范说:“使用它们的文档符合SGML文档,但不太可能与许多现有的HTML工具一起使用。”从 no 浏览器实现HTML的意义上来说,这是轻描淡写的。这些规范,即作为SGML应用程序(虽然一些非常罕见的浏览器在这方面做了一些尝试)。这个问题仍然反映在HTML验证中(在经典意义上,不包括HTML5验证,它遵循自己的规则);请参阅Saga of Slashed Validators

那么为什么浏览器没有在这方面实施规范呢?从某种意义上说,采用一些现有的SGML解析器并将其包含在浏览器中会很容易。但解释是,浏览器是以特殊的方式编写的,快速,宽松和实用,很少或根本不关注广义标记等问题。 HTML规范在第一次浏览后写了很长时间,主要是标准化现有的做法,但也引入了一些新的原则。 HTML在形式上对SGML进行了改进,但浏览器供应商从未认真对待过这种情况。

答案 2 :(得分:1)

  1. 使用<b>foo <i>bar</b> baz</i>之类的宝石(本身不正确,但(某些?)浏览器正确解释)。
  2. 可选的结束标记,在@ JamesAllardice的回答中描述。
  3. 使用描述性结束标记可以(轻微地)捕获嵌套错误;请记住,您的结束标记可能距离其开头标记几个屏幕。
  4. 在这个广泛的宽带时代,“权力”更关注向后兼容性,而不是将HTML页面削减1-2%。
  5. “权力”通常在标准制定的十年周期内运作; 非常困难 任何在那里发生。

答案 3 :(得分:1)

具有讽刺意味的是,尽管不是一般性的,但是通过简单地完全删除大部分结束标记,您提供的表格标记的具体示例可以写得更短,有效且完全支持浏览器,如下所示:

<table><tr>
  <td>foo<td>bar<td>foo<tr>
  <td>bar<td>foo<td>bar<tr>
  <td>1<td>2<td>3</table>

答案 4 :(得分:0)

我想这取决于你在说什么标签。 例如:

Break-Line: <br/>
Link: <link />
Input: <input />
Img: <img />

这些可以被认为是短手的。

我同意你的看法。例如,当您使用其他语言编程并创建代码块并且仅使用括号时,它知道哪个括号关闭了代码块。

将来他们可能会做类似的事情。