我只是好奇。是否有一个理由为什么“更高权力”从未添加到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规范中?
答案 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)
<b>foo <i>bar</b> baz</i>
之类的宝石(本身不正确,但(某些?)浏览器正确解释)。答案 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 />
这些可以被认为是短手的。
我同意你的看法。例如,当您使用其他语言编程并创建代码块并且仅使用括号时,它知道哪个括号关闭了代码块。
将来他们可能会做类似的事情。