2016-02-24 104 views
5

有人可以向我解释,为什么这段代码有效?为什么这个html代码有效?

<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01//EN"> 
    <html<head> 
    <title// 
    <p ltr<span id=p></span</p> 
    </> 

我期待收到您的回复。感谢您的关注

+3

为什么不应该这样? (你有很多不常用的HTML特性,如果你对它们中的一个有特定的问题,那么这可能会是一个更好的问题) – Quentin

+0

对我来说这似乎不合适。 –

+0

它引发7个警告。对我而言,这是无效的。如果您不关闭标签,则会显示警告。 –

回答

5

这些HTML代码是有效的,因为HTML 4.01允许这些事情,而尊重文档类型的互联网浏览器将显示没有问题。

如果您将文档类型更改为HTML 5,那么肯定会给出错误,因为HTML 5对于编写正确的HTML标签要求更严格。

HTML 4.01根据https://validator.w3.org/#validate_by_input没有错误):

<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01//EN"> 
    <html<head> 
    <title// 
    <p ltr<span id=p></span</p> 
    </> 

HTML 515错误根据https://validator.w3.org/#validate_by_input):

<!DOCTYPE html> 
    <html<head> 
    <title// 
    <p ltr<span id=p></span</p> 
    </> 

说明:

即HTML结构是有效的,因为根据HTML 4.0.1规范(https://www.w3.org/TR/1999/REC-html401-19991224/):

B.3.7速记标记

一些SGML SHORTTAG构建节省打字但SGML应用程序没有表现能力。尽管这些构造在技术上不会引入歧义,但它们会降低文档的健壮性,特别是在语言增强以包含新元素时。因此,尽管与属性相关的SGML的SHORTTAG构造被广泛使用和实现,但与元素相关的构造不是。使用它们的文档符合SGML文档,但不可能与许多现有的HTML工具一起使用。

的SHORTTAG构建中的问题有以下几种:

  • NET标签:
    <name/.../
  • 封闭开始标记:
    <name1<name2>
  • 空开始标记:
    <>
  • 空结束标签:
    </>

https://www.w3.org/TR/1999/REC-html401-19991224/appendix/notes.html#h-B.3.7引用。


因此基于该HTML 4。01规格,这意味着:

1  <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01//EN"> 
2  <html<head> 
3  <title// 
4  <p ltr<span id=p></span</p> 
5  </> 
  • 行1为HTML 4.0.1有效的文档类型。
  • 第2行有效<html>打开标签,关闭</html>标签没有必要。
  • 第2行也有效<head>打开标签,关闭</head>标签没有必要。
  • 第3行是一个有效的<title>开放标记,其中互联网浏览器读取<title// <p ltr<span id=p>只需<title>,关闭</title>标记是没有必要的。
  • 第4-5行是<title>标记的内容(内部HTML),它是</span</p> </>(这是因特网浏览器显示为页面标题的内容)。

这是我另外的解释。希望能够帮助你。

+5

“这些HTML代码是有效的,因为HTML 4.01允许这些东西” - 你基本上说它是有效的,因为它是有效的,这不是非常有用。 – Quentin

+1

“和尊重文档类型的互联网浏览器,将显示没有问题” - 并非如此。该代码示例使用了大多数浏览器都支持的* HTML特性。 – Quentin

+1

@Quentin我已经更新了我的解释,希望能解释一下。 –