从我去年接触前端,到现在,我似乎都没有特意去研究过web标准。我只知道传统上推崇结构样式行为分离,js、css、html各司其职,
不推荐在文档的节点上写类似<p onclick=“fn()”>的事件绑定,而是js中获取节点再绑定事件;
不推荐在js里操作css样式,而是通过改变DOM节点的类名实现效果,等等。
这些都是实践中大家遵循的“规范”,然而Web标准,实际上说了哪些内容?
为什么会有WEB标准?
W3C提到:
由于存在不同的浏览器版本,web 开发者常常需要为耗时的多版本开发而艰苦工作。当新的硬件(比如移动电话)和软件(比如微浏览器)开始浏览 web 时,这种情况开始会变得更加严重。
为了 web 更好地发展,对于开发人员和最终用户而言非常重要的事情是,在开发新的应用程序时,浏览器开发商和站点开发商共同遵守标准。
web 的不断壮大,使得越来越有必要依靠标准实现其全部潜力。web 标准可确保每个人都有权利访问相同的信息。如果没有 web 标准,那么未来的 web 应用,包括我们所梦想的应用程序,都是不可能实现的。
同时,Web 标准也可以使站点开发更快捷,更令人愉快。为了缩短开发和维护时间,未来的网站将不得不根据标准来进行编码。开发人员不必为了得到相同的结果,而挣扎于多版本的开发。
嗯,所以说白了就是为了 消除各大厂商在实现web功能时各行其是导致的浏览器兼容性问题。
在开发者层面上,则是让开发者的代码可以在不同厂商、不同版本的客户端被正常访问。
突然想到最近看到的一些公司的招聘还要求兼容IE5、IE6,我就一阵哆嗦。
WEB标准有哪些东西?
百度上说
WEB标准不是某一个标准,而是一系列标准的集合。网页主要由三部分组成:结构(Structure)、表现(Presentation)和行为(Behavior)。对应的标准也分三方面:结构化标准语言主要包括XHTML和XML,表现标准语言主要包括CSS,行为标准主要包括对象模型(如W3C DOM)、ECMAScript等。
所以,当我们在学习前端三把剑的时候,我们已经在不知不觉地遵守了部分WEB标准,因为标记语言、脚本语言本身也在不断标准化。
当我们开始学习html的时候,书本上、教程网站上会告诉我们:
html标签往往是成对存在的,标签要闭合,像<img /> <br />这样的标签要加“/”表示闭合。
标签名要小写,html特性大小写不敏感,特性的值要加双引号。
這些是结构层面的标准。
事实上,至今的WEB标准还真不少:HTML4.0(当然现在大家更多提到的是H5)、css2.0、xhtml1.0(号称更严谨的html),ECMAScript等等。
但是标准并不等于事实标准。
因为标准中的一些较新内容并未有被各个浏览器实现。
像ES6,和ES5相比确实有些激进,以至于像promise、解构赋值之类的,只有部分浏览器原生实现了。所以大家不得不通过babel转码。
而作为开发者,我们更多时候只要遵循语言本身的规范,合理使用标记语言,让标签语义化,在构建页面时遵循三者分离,在写逻辑时少用兼容性不好的api,页面就挺符合web标准了。
另外,当我们说web标准兼容性好时,其实指的是向后兼容性好。对于旧版本的浏览器,支撑成度不一,所以有时候我们想使用一些新api时,需要给页面代码添加polyfill。