龙空技术网

十年沉积打造《CSS世界》

异步社区 99

前言:

此刻同学们对“css世界和css新世界哪个好”大致比较关心,你们都想要剖析一些“css世界和css新世界哪个好”的相关知识。那么小编也在网上汇集了一些对于“css世界和css新世界哪个好””的相关资讯,希望小伙伴们能喜欢,小伙伴们快快来学习一下吧!

要深入理解一个事物之前,最好先对其整体有个大概了解,这样才不至于蠡测管窥。如果把CSS比作一座大山,则我们对整体的认知就好比知道这座山的位置、山势、道路状况等,这样,当我们深入其中的时候,就不容易迷路,不会做出错误的决策。

例如,对CSS这门语言特性的描述就有助于对CSS的整体认知。具体表现为:擅长C++或者Java之类的程序员学习CSS往往没有如鱼得水的感觉,其背后的原因是,典型的计算机开发语言看重逻辑思维和抽象能力,但是CSS这门语言本身并无逻辑可言,看重的是特性间的相互联系和具象能力。

具象往往以情感为纽带,无意识不自觉产生,是非常感性的一种能力,这往往是偏理性的程序员所不擅长的。在某些程序员眼中,CSS属性就是干巴巴的属性,无法建立类似“人与人关系”这种很情感化的联系,于是学习CSS总是只得其形、不得其髓。

当然,认知可以从多个角度进行。例如,接下来要介绍的CSS“世界观”以及CSS的历史故事,可以让我们多种角度同时进行认知,对CSS这门语言的理解更为准确和丰满。

1.1 CSS世界的“世界观”

对于CSS这门语言,我学习和研究已经有10年之久,在点点滴滴的积累中,逐渐形成了一套完整的体系。在CSS这个世界中,CSS并不是一个机械枯燥的语言,所有属性都是有血有肉、有着不同个性和身世的个体。不同的个体可以碰撞出不同的火花,激荡出异彩纷呈的故事。

这里,我们不妨“脑洞大开”一下:如果把CSS世界拍成动漫的话,会是什么样子?

首先,动漫名可以叫作《建筑神域》,讲述一群建筑魔法师为国家存亡惊心动魄战斗的故事。然后,出现了“Chrome王国”的几位建筑魔法师日常训练的画面。只见名为width的魔法师手持名叫选择器的法器,准确指向称为div的最普通的块状建筑魔法石,口中念道:“层叠天星,幻化有形,50%,变!”只听见一声清脆的“啪”,div魔法石宽度变成了原来的一半。然而,width却锁眉摇头,口中喃喃念道:“1毫秒,还不够快,还要再练,不然在和‘IE王国’的战斗中很难占得先机!”(如图1-1所示)。

图1-1 CSS世界观示意1

此时,width突然发现前面1米之处有一块span之石,具有class=test的特殊标记,立即拿出法器,念道:“类名之石,test为名,为我选择,出!”话音刚落,span之石蓝色荧光一闪,明眼人都能看出来,width魔法师和span魔法石现在处于契约状态。width继续念道:“层叠天星,幻化有形,50%,变!”但span魔法石却没有任何变化,此时width一拍自己的脑门,似乎明白了什么,转过头对旁边的display魔法师大声叫道:“小D,这边这边,过来帮个忙……来呀,快点……”

只见display迅速结束自己的练习,屁颠屁颠跑过来:“咋啦?”

“此为内联之石,我无法驾驭,你帮我重塑一下。”

“小问题!正好,魔法师技能委员会刚通过了我的一个新法术,我给你秀一秀?”

“哟,不错啊,快让我瞅瞅!”

“好嘞!”只见display拿出自己的法器,念道:“类名之石,test为名,为我选择,出!”紧接着,“层叠天星,幻化有形,flex,变!”

只听见一声清脆的“啪”,在两人的合作之下,span魔法石宽度也变化了(如图1-2所示)。

图1-2 CSS世界观示意2

“哟,很酷嘛!”width对display竖着大拇指称赞道。

只见display腼腆一笑,小手在面前轻轻一挥:“就算你这么夸我,人家也不会开心的啦……”

从上面的描述可以看出,在CSS世界中,HTML是魔法石,选择器就是选择法器,CSS属性就是魔法师,CSS各种属性值就是魔法师的魔法技能,浏览器就是他们所在的“王国”,“王国”会不断更新法律法规(版本升级),决定是否允许使用新的魔法石(HTML5新标签新属性),是否允许新的魔法师入“国籍”(CSS3新属性),或者允许魔法师使用某些新技能(CSS新的属性值),以及是否舍弃某些魔法技能(如display:run-in);操作系统就是他们所在的世界,不同的操作系统代表不同的平行世界,所以,CSS世界有这么几个比较大的平行世界,即Windows世界、OS X世界以及移动端的iOS世界和Android世界。不同世界的浏览器王国的命运不一样,例如,在OS X世界中,IE王国是不存在的,而Safari王国却异常强大,但在Windows世界中,Safari王国却异常落寞。

以上这一切就构成了完整的CSS世界的“世界观”。

下面回答一个很重要的问题:为何要这样认识CSS世界呢?

首先,将抽象的CSS直接和具体的现实世界相对应,更加易于理解。试想一下,对于普通人,理解魔法师和魔法石是不是要比理解CSS代码容易得多?其次,以完整的体系来学习CSS要比单纯关注属性值理解得更加深刻,可以培养从宏观层面认识与理解CSS的习惯。再次,这也方便我们记忆,枯燥的代码总是过目就忘,鲜活的角色总是印象深刻。最后,这样也可以让本书散发出与众不同的气质。

1.2 世界都是创造出来的

世界都是创造出来的。很自然,CSS世界也是一点一点创造出来的。这世间上的事情只要发生了,都是有原因的。CSS世界的出现也不例外。

下面我们就来看一下CSS世界出现的历史。虽然我知道,有些人对这些历史可能不感兴趣,但是要想深入理解CSS属性的一些设计原因、表现原理还真离不开当时的历史环境。

大家可能都听说过马云1995年去美国,第一次接触了互联网,在这个时间点,HTML才是第一版且诞生没几年,W3C才刚刚成立,CSS还没出现。那时候的互联网几乎都是文字信息,显示一张图片都是要上天的感觉。

大家可能没意识到,那个时候前端的发展和现在一样快,设计师要求越来越多,HTML也越来越庞杂。急需要其他专门负责样式的语言,据说当时有几个样式表语言,最后是CSS胜出了,为什么呢?它的胜出靠的是“层叠”特性。

CSS全称是Cascading Style Sheets,翻译成中文就是“层叠样式表”。所谓“层叠”,顾名思义,就是样式可以层层累加,比方说页面元素都继承了12像素的大小,某标题就可以设置成14像素进行叠加。发现没?这种层叠策略对于样式的显示是相当的灵活。

于是,从1996年12月17日CSS1诞生后,CSS在样式呈现领域可谓所向披靡,没有遇到任何竞争对手。1998年5月12日CSS2发布,推行内容和表现分离,表格(table)布局开始落寞。

1998年腾讯、新浪和网易成立,当时搜狐则成立1年不到。那个时候是门户的时代,人们更关注的是信息的获取,所以网站的功能主要就是信息展示,信息是什么?在那个时代,在互联网领域,信息就是图片和文字。换句话说,那时候的网站前端技术关心的是图片和文字的呈现,而CSS2(包括9年之后,也就是2007年才出现的CSS2.1)都是为图文展示服务的。

我再重复一遍:CSS世界的诞生就是为图文信息展示服务的。这句话在本书中会非常频繁地出现,知道这一点你就会明白很多事情。

好,下面让我们回到本节开头的那句话——“世界都是创造出来的”!为何我要反复强调这句话呢?如果站在造物主的角度去思考CSS世界的种种表现,很多问题就会迎刃而解。

现在给你机会当一回造物主,让你自己重新构建一个CSS世界,唯一的要求就是,这个世界要非常便于图片和文字的呈现,你会去如何构建呢?

1.3 CSS完胜SVG的武器——流

在2003年1月,SVG 1.1被确立为W3C标准。你没看错,是2003年。要知道,CSS 2.1是2007年才发布的。考虑到SVG开始火起来是最近几年,也就是差不多10年的时间,SVG都默默无闻,鲜有人问津,到底是怎么回事呢?

很多人认为SVG的竞争对手是Flash。对,是竞争对手。但是,现在看来,SVG显然要比Flash优秀很多,SVG开放、标准,和CSS和JavaScript都能很方便地进行交互,如果单纯SVG和Flash比,难说谁胜谁负。在我看来,造成SVG被冷落10年的原因不是别的,正是看似毫不相关的CSS,SVG是被CSS给打败的。

正如上面提到的,在很长一段时间里,网站的主要功能都是图片和文字信息的展示,但是,SVG的强项是图形,其文字内容的呈现实在不敢恭维。举个例子,在CSS中写上一段文字,这段文字会自然换行、多行显示,于是,可以像书本一样阅读;但是,在SVG中,文字要自动折行,感觉有点儿赶鸭子上架——强人所难。人家一看,SVG连基本的文字排版都做不好,要SVG何用?于是,SVG被“打入冷宫”,CSS一如既往被重用。

但是,如今技术得到了发展,Web呈现更加复杂和丰富多彩,图文显示仅仅是网页功能的一部分,于是,矢量且图形领域颇有造诣的SVG开始迎来了自己的第一春。

不知大家有没有思考过这样的问题:为什么CSS世界的图文显示能力那么强?为什么它可以抑制SVG这么多年?

答案就是:流!

1.3.1 何为“流”

和CSS有过亲密接触的人一定听过“文档流”这个概念,我个人总是习惯把“文档”二字去掉,直接称为“流”(纯粹个人爱好,因为够简洁)。听过它的人很多,但是,深入思考过“何为流?”这个问题的人怕是就没这么多了。

那究竟CSS世界中的“流”指的是什么呢?“流”实际上是CSS世界中的一种基本的定位和布局机制,可以理解为现实世界的一套物理规则,“流”跟现实世界的“水流”有异曲同工的表现。

现实世界中,如果我们让水流入一个容器,水面一定是平整的;我们在水里面放入物体,如普通的木头,此时水位就会上升,木头多半浮在水面上,但只露出一点点头,如图1-3所示。这些现象我们都会认为是理所当然的,因为这就是我们从小接触的一套物理规则。我们知道这套规则,就可以理解现象,并且预知现象。例如,水量超过容器的容积很多,我们就可以预测到水会溢出来。

感谢物理学,它让我们理解CSS世界的“流”就轻松多了。CSS世界的“流”似乎就是按照物理世界的“水流”创造的。

CSS世界构建的基石是HTML,而HTML最具代表的两个基石div和span正好是CSS世界中块级元素和内联级元素的代表,它们对应的正是图1-3所示的盛水容器中的水和木头,其特性表现也正如现实世界的水和木头,如图1-4所示。

图1-3 流

图1-4 CSS世界构建的基石HTML

所以,所谓“流”,就是CSS世界中引导元素排列和定位的一条看不见的“水流”。

1.3.2 流是如何影响整个CSS世界的

在CSS2.1时代,我们直接称CSS为“流的世界”真是一点儿也不为过,整个CSS世界几乎就是围绕“流”来建立的,那么流是如何影响整个CSS世界的呢?

(1)擒贼先擒王。因为CSS世界的基石是HTML,所以只要让HTML默认的表现符合“流”,那么整个CSS世界就可以被“流”统治,而事实就是如此!

(2)特殊布局与流的破坏。如果全部都是以默认的“流”来渲染,我们只能实现类似W3C那样的文档网页,但是,实际的网页是有很多复杂的布局的,怎么办?可以通过破坏“流”来实现特殊布局。实际上,还是和“流”打交道。

(3)流向的改变。默认的流向是“一江春水向东流”,以及“飞流直下三千尺”。然而,这种流向我们是可以改变的,可以让CSS的展现更为丰富。因此,“文档流从左往右自上而下”这种说法是不严谨的,大家一定要纠正过来。

好了,下面我想反问大家:如果你是造物主,你会想到设计“流”这套机制来实现强大的图文排列功能吗?

好好想一想……是不是觉得目前CSS的设计还是很有智慧的?如果你来重新设计CSS,实现图文排列,你是否还有其他的设计思路,比方说“亲缘机制”之类?

适当地反问这些问题,通过逆向思维,会让我们对CSS世界有另外一个角度的认识。

1.3.3 什么是流体布局

所谓“流体布局”,指的是利用元素“流”的特性实现的各类布局效果。因为“流”本身具有自适应特性,所以“流体布局”往往都是具有自适应性的。但是,“流体布局”并不等同于“自适应布局”。“自适应布局”是对凡是具有自适应特性的一类布局的统称,“流体布局”要狭窄得多。例如,表格布局也可以设置为100%自适应,但表格和“流”不是一路的,并不属于“流体布局”。

CSS中最常用的魔法石,也就是最常使用的HTML标签,是div,而div是典型的具有“流”特性的元素,因此,曾经风靡的“div+CSS布局”,实际上指的就是这里的“流体布局”。

1.4 CSS世界的开启从IE8开始

本书书名为《CSS世界》,这里的“世界”特指的是CSS2.1的世界,并不包括CSS3,CSS3的世界更为庞杂和宏大,但CSS2.1的世界已经足够我们畅游很多年了。现在前端技术发展迅猛,加上氛围略显浮躁,有必要让广大前端开发人员静下心来认识CSS2.1的世界,否则面对CSS3的真正到来,只能是浅水游弋、搬砖打杂。

对CSS2.1的全面支持是从微软公司的IE8开始的,因此,本书中几乎所有特性、行为表现都是针对IE8以上浏览器的。

1.5 table自己的世界

如果我没记错的话,table比CSS还要老,也就是CSS正式诞生之前,table就已经出现了。前面提到了“流影响了整个CSS世界”,其中并不包括table。table有着自己的世界,“流”的特性对table并不适用,一些CSS属性的表现,如单元格的vertical-align,也和普通的元素不一样。

虽然CSS2.1加强了和table的联系,如对table类别的display属性值的支持等,但是本书并不会对table进行专门的介绍,因为毕竟不是同一个世界的。

1.6 CSS新世界——CSS3

时代在变迁,科技在发展,人们对互联网的需求也在变化,以前的以图文展示为主的门户网站已经无法满足用户的需求。技术总是随着需求发展的,正如10年前的图文展示需求缔造了CSS世界一样,如今的移动互联网以及硬件发展也带动CSS进入了新的世界。

(1)布局更为丰富。

移动端的崛起,催生了CSS3媒介查询以及许多响应式布局特性的出现,如图片元素的srcset属性、CSS的object-fit属性。

弹性盒子布局(flexible box layout)终于熬出了头。

格栅布局(grid layout)姗姗来迟。

(2)视觉表现长足进步。

圆角、阴影和渐变让元素更有质感。

transform变换让元素有更多可能。

filter滤镜和混合模式让Web轻松变成在线的Photoshop;

animation让动画变得非常简单。

上面提到的全部都是CSS3的新属性。因为CSS3的设计初衷是为了实现更丰富、更复杂的网页,所以基本上和“流”的关系并不大。可以说,和CSS2相比CSS3就是一个全新的世界,更加丰富,更加规范,更加体系化,也更加复杂。考虑到CSS3尚未完全成型,且自己尚未有足够深入的研究,无法同时驾驭太复杂的内容,因此,本书不会深入CSS3的知识点。

本文摘自《CSS世界》

CSS入门简单深入难,无数人遇到“天花板”,本书是打破能力上升瓶颈之作。

前端开发行业潜心近10年一直研究看似简单的CSS的人可谓是凤毛麟角,作者从2009年开始写原创技术文章,现在其博客已经成为国内访问量巨大的个人前端博客之一,可以说众多前端初学者是看着作者的博客成长的。

本书几乎所有内容都是经过作者自我思考和认知提炼后的产物,都是其他地方难得一见的“干货”。本书不会像传统书籍一样,一个知识点就是一节,因为CSS的各个属性的表现和行为相互间是参杂在一起的,很难一个一个分开,为了把错综复杂的CSS知识点讲好,本书以独特的“世界观”的视角去看待CSS。

为了拓展和更直观演示各个特性的效果,书中每个案例都有对应的在线demo演示页面,以二维码形式放在书中,方便读者扫码查看,快速体验。

标签: #css世界和css新世界哪个好