CSS新世界
上QQ阅读APP看书,第一时间看更新

1.2 模块化的CSS新世界

CSS世界已经有了CSS2和CSS3,那会有CSS4吗?

答案是:不会有CSS4!实际上,现在连CSS3这个词都已经名存实亡了,因为CSS3已经解体了。

为什么说CSS3解体了呢?

因为CSS按照大版本的方式进行迭代实在是太低效了。低效的原因其实很好理解,如果CSS这门语言必须按照大版本迭代发布的话,只要其中一个版本有一个CSS特性存在极大的争议,那这个版本的CSS的发布时间就会延后。例如,CSS2.1的规范在2002年开始制定,而一直到2011年才成为推荐规范,整个过程足足花费了10年的时间,就是因为一些次要的CSS特性拖了后腿。

在Web前端领域,新技术的发展十分迅速,而CSS的规范又是基于当前环境制定的。如果CSS的规范从开始制定到最终浏览器完全支持需要横跨很多年,保不准这个CSS新特性很快就过时了,或者开发者都约定俗成使用其他方案替代实现了,那之前辛苦做的工作就白费了。CSS这门语言的竞争力和潜力也会因此下降,因为不能快速响应时代变化的语言不是一门好语言。

为了加速没有争议的CSS特性的标准化,W3C的CSS工作组做出了一项被称为“Beijing doctrine”的决定,该决定将CSS划分为更小的组件,并把这些组件称为模块。这些模块互相独立,各自按照自己的速度走向标准化。例如,CSS选择器模块已经到了Level 4了,弹性布局模块还是Level 1。

将CSS划分为独立的模块是一个非常明智的决定,浏览器厂商可以根据对自己需求的判断决定究竟对哪些模块进行支持,哪怕这个模块还处于草案状态。例如CSS的env()函数的规范还是草案状态,但是Chrome和Safari浏览器的厂商却快速响应,对其进行了支持。对开发者而言,如此迅速地支持新特性犹如一场及时雨。

近几年,浏览器陆续支持一个又一个新的CSS特性,这已经成为一种常态。得益于CSS这种模块化的划分,以及浏览器厂商的积极支持,我们可以非常及时地使用这些CSS新特性来让我们的Web应用程序变得更丰富多彩,毕竟有很多内部的项目是不需要考虑兼容性问题的。

当然,这种模块化的设计也不是没有弊端,最大的问题就是设计冗余。例如,弹性布局和网格布局中的对齐属性其实可以统一,但它们却是分离的,这就会徒增学习成本;分栏布局、弹性布局和网格布局中的间隙其实可以统一,但它们也都是分离的,各有各的间隙属性。好在纠正及时,现在这三大布局全部开始改用gap属性表示间隙,减少了因为模块化带来的设计冗余。

模块化策略带来的好处远远大于弊端,正所谓瑕不掩瑜,与带来的好处相比,模块化设计的弊端几乎可以忽略不计。从这个角度看,CSS2.1之后的CSS世界就是模块化的新世界,所以我称之为CSS新世界。这个CSS新世界带来了新的CSS属性,并让很多CSS2中模糊的概念有了明确的定义,如尺寸体系、逻辑属性、CSS值类型划分等。CSS新世界中各模块虽然发展独立,但是相互间还是有很多共性和联系的。因此,CSS新世界不仅是一个模块化的世界,还是一个缤纷多彩,同时又自成一体的严谨的世界。

最后,本书和《CSS世界》相互补充,《CSS世界》中讲解的都是CSS2.1的知识,本书讲解的都是CSS2.1之后的知识,再加上《CSS选择器世界》,这3本书中的内容一起构成CSS这门语言的完整面貌。