HTML的历史与历史遗留问题

时间:2021-06-22 12:37:57

1.

<style type="text/css">

从前,HTML的设计者认为以后应该还会有其他样式,不过如今我们已经醒悟,事实表明,完全可以只使用<style>而不带类型属性(即type是可选的),所有浏览器都知道你指的是CSS。

————《Head First HTML与CSS》P29

 

2.

<br>

HTML5规范明确指出:使用元素应该完全从元素的语义出发。但是为了大家轻松一点,规范也明确表示:对于某些元素,传统上与其联系在一起的样式也是语义的一部分。........然而许多其它的元素含义却比较含糊,实际上与呈现方式颇有瓜葛,有悖HTML5标准的目标。

————《HTML5权威指南》P126

换行标签我感觉也是历史遗留的问题,但是这个问题又不是很大——因为在HTML中,不同的文本结构本身就是靠换行来区分的,所以“换行”这个效果就如HTML5的规范所说的,样式效果成了语义的一部分。这也是新标准下没有取消这个标签的原因之一吧。

 

3.关于/在void中要不要加的问题。

4.img为什么是inline元素?

根据https://www.zhihu.com/question/25402556/answer/30728140下贺师俊的回答和https://www.zhihu.com/question/20495297下的众多回答,我推测这也是一个历史遗留问题。

目前很多东西还不懂,这个坑先不填。等到我切图熟练、看完HTML5权威指南、CSS权威指南、工作一年左右后,再考虑这个问题。(结合收藏夹中瓶颈一栏的文章一起)

 

5.HTML的发展历史线

1989-1991:HTML1.0~2.0,页面不好看,不过至少支持超文本,没有人关心表现。

1995:HTML3,漫长的浏览器战争由Netscape和Microsoft打响,受害者是web开发人员。期间每个浏览器公司都在不断增加自己的专用扩展包,试图保持领先。那时通常要写两个单独的web页面,一个用于Netscape浏览器,一个用于Internet Explorer浏览器。

1998:HTML4,浏览器大战终止于万维网协会(World Wide Web Consortium=W3C)之手。结束之后开始推行一个标准计划:将HTML的结构和表现分解到两种语言,负责结构的HTML和负责表现的CSS。

1999:HTML4.01,几乎所有浏览器都能很好地显示内容了。

2001:XML出现,并且与HTML融合为XHTML1.0。由于开发人员更喜欢灵活的HTML改进版,而不是XHTML的严格,变革在酝酿。

2009~2012~未来:HTML5横空出世。

————————《Head First HTML与CSS》P222.   

 

6.HTML与HTML5

<!doctype html>

这里的“html”不再代表某个版本号,而是代表“最新的标准的HTML”,换句话说,以后出了“HTML6”,只要这个规则不变,则到时这样写,浏览器就会认为你在使用“HTML6”而不是HTML5.换句话说,HTML5开始,HTML标准将变成一个“活的标准”,这意味着她会根据需要继续发展和变化,不过不会再有固定的版本号。

你没听错,HTML不会再有版本6、7、8....这也是为什么上面我用双引号把HTML6括起来的原因。制订标准的人已经把这个规范变成了一个活的标准,会随着技术的发展形成相应的文档,所以不再有版本号。你甚至可以不再把她叫做HTML5,因为从现在开始它只是HTML。

为什么会设定成这样的“活标准”呢?这里的关键原因是向后兼容性——向后兼容(Backwards Compatibility)表示我们可以继续向HTML增加新的内容,浏览器(最终)会支持这个新内容,不过她们还会继续支持原来的内容。所以你今天写的HTML页面将会继续正常工作,甚至以后增加了新特性之后页仍然能很好地工作。

如果规范明天改了呢?我该怎么办?

如果你今天编写了稳定可靠的HTML,即使明天规范改变了,比如增加了一个新元素,你还能像以往一样使用你的HTML。是否使用这个新元素由你来决定;如果规范对你之前的工作有所改变,比如改变了一个元素或属性的工作方式,那么浏览器会继续支持你使用的老方式,同时支持新方式,这正是向后兼容的含义。

————————《Head First HTML与CSS》P228

在这我不得不思考,是什么原因导致了要保证向后兼容。在我看来,这是一种妥协的结果。一般情况下,语言的特性最好是经过深思熟虑后、一段时间的实践后再写入规范,变成真正的规范。但在这个过程中,不可避免要涉及到过去的特性。有些特性在过去没有发现弊病加入了规范,然后被写成代码运行,实际环境中,不可能把这些已经运行的代码全部重构,所以后来即使发现了某个特性有问题,也不能在新的语言版本中完全删除,只能是对其进行修补;或者是允许其存在另设一个新特性推广,在以后的历史中慢慢淘汰掉她。不管是用哪种办法,都是对过去特性的一种妥协,也就是“向后兼容”出现的原因。但这两种方法也并不意味着使规范变成像HTML这样的“活规范”(C++就是几年你才进行一次统一的大改),那么这样的动机是什么呢?