HTML的历史与历史遗留问题
1.
从前,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++就是几年你才进行一次统一的大改),那么这样的动机是什么呢?
HTML的历史与历史遗留问题的更多相关文章
- MySQL_产品昨日库存与历史入库历史出库成本_20161124
产品昨日库存与历史入库历史出库成本 SELECT d.ID,a.*,e.昨日订单额 ,b.昨天入库额,b.历史2天,b.历史3天,b.历史4天,b.历史5天,b.历史6天,b.历史7天,b.历史8天, ...
- 芒果TV For Windows10 成长历史 & 迭代历史 & 新闻报道
芒果TV 是国内领先的基于Windows10操作系统并支持Windows10全系列设备的视频应用和内容服务商. Win10商店版<芒果TV>是湖南快乐阳光互动娱乐传媒有限公司专门为Wind ...
- [No000037]操作系统Operating Systems操作系统历史与硬件概况History of OS & Summaries!
培根:读史使人明智 操作系统的简史 (1955-1965) 计算机非常昂贵,上古神机IBM7094 ,造价在250万美元以上 计算机使用原则:只专注于计算 批处理操作系统(Batch system) ...
- Linux系统bash shell之历史命令
1.相关变量: HISTSIZE: 定义命令历史记录的条数 HISTFILE: 定义命令储存的文件,一般是 ~/.bash_history HISTFILESIZE: 定义了历史文件记录历史的条数 H ...
- bash的快捷键、特殊参数、历史命令、相关文件
bash快捷键 Emacs风格 ctrl+p: 方向键 上 ↑ ctrl+n: 方向键下 ↓ ctrl+b: 方向键 ← alt+f: 光标右移一个单词 ctrl+f :方向键 → alt+b: 光标 ...
- 2018-01-15 History in Threads: 火狐插件实现浏览历史按主题显示(树)
History in Threads似乎是唯一一个业余项目里有确认用户的. 大部分JavaScript源码(300+行)也用了中文命名. 插件功能很简单, 就是根据网页点击顺序生成树, 每个树可以认为 ...
- 如何在Maven官网下载历史版本
如何在Maven官网下载历史版本 历史版本一般会隔一段时间,便找不到,官网会及时显示的是最新版本.不多说,直接进入. https://archive.apache.org/dist/maven/bin ...
- [dt]世纪历史长河年代表
年代口诀 夏商与西周, 东周分两段, 春秋和战国, 一统秦两汉, 三分魏蜀吴, 二晋前后延, 南北朝并列, 隋唐五代传, 宋元明清后, 皇朝至此完. 中国历史长河年代表 参考: 中国历史朝代顺序表.年 ...
- bash特性-命令历史命令行编辑
bash: GUI:Gnome,KDE,XFCE CLI:sh,csh,bash,ksh,tcsh,zsh shell,子shell tree:查看目录树 pstree:查看进程目录树 bash: 1 ...
随机推荐
- 使用sql compare生成的sql语句
创建表以及主键 判断表是否存在 OBJECT_ID 判断主键是否存在 SELECT 1 FROM sys.indexes WHERE name = N'PK_LISA_NoUseWebpartRepl ...
- Oracle安装:silent安装方式
之前一直是通过图形界面来安装oracle,这次上机考试说用silent (静默)形式安装.一点头绪都没有,虽然当时提供了oracle官方文档. 遂查找资料,安装了一下: 一.准备工作: 1.系统参数调 ...
- you are the one(区间dp)
传送门 You Are the One Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Othe ...
- 为什么python2.7中用Process创建子进程的语句之前必须加#if
from multiprocessing import Process import os def run(name): print 'The child process '%s' (pid %d) ...
- YUIDoc的使用方法小结
一.YUIDoc概述以及安装YUIDoc是为YUI Library用来生成HTML版API文档的一系列工具集,文档的生成完全基于JavaDoc风格的代码注释规则.该工具是基于Python语言编写,并且 ...
- 用 SDL2 进行事件驱动编程
其实没必要说得太复杂...就是读取用户输入啦. 沿用上一篇的代码,加入事件轮询. 环境:SDL2 + VC++2015 下面的代码将打开background.png和event.png,将backgr ...
- 关于tensorflow中维度的问题
一直对TF中tensor的reduce操作涉及的axis(reduction_indices)计算一知半解,这里系统总结一下,避免继续走弯路: 1.本质上来说,reduce_xxx都是降维操作,沿某个 ...
- 堆、栈的区别 <转载>
本篇非作者原创,转子链接,仅供学习记录. 一.预备知识—程序的内存分配 一个由C/C++编译的程序占用的内存分为以下几个部分 1.栈区(stack)— 由编译器自动分配释放 ,存放函数的参数值 ...
- Ruby 全局变量,实例变量,类变量
class Computer $manufacturer = "Mango Computer, Inc." # “$" 是全局变量关键字 @@num_of_instanc ...
- Python解释器的安装步骤
Python是一门强大的语言,目前已支持所有主流操作系统,在Linux,Unix,Mac系统上自带Python环境,在Windows10系统上需要安装一下,超简单 1. 打开官网 https://w ...