很多人学 CSS,是从选择器、盒模型、定位、Flexbox 开始的。
可如果你把时间往回拨,会发现它的开场根本不像一门“样式语言”的诞生史。
它更像一出很长的连续剧。
1994 年,Web 还更像文档网络,大家先吵的是:网页到底该听作者的,还是听用户的。
1996 年前后,CSS1 刚开始站稳,浏览器大战已经把“标准”变成了跑着追现实的东西。
到了 1998 年,CSS2 野心暴涨,规范越写越厚,浏览器却没法整齐跟上,最后不得不靠 CSS 2.1 回来慢慢还债。
再往后,Acid2 把标准支持变成一场公开考试,CSS3 模块化把规范救了回来,却顺手把前端推进了前缀、旧语法、新语法三代同堂的扫雷时代。
然后你熟悉的那些“现代 CSS 名场面”才陆续登场:
Grid很强,但来得很晚:has()大家想了二十年container queries很长时间都像“不可能”- 有些规范明明写出来了,最后还是死在主流引擎的现实主义门口
所以如果只用一句话概括这套系列,我会这么说:
CSS 不是一门安安静静长大的语言,它是一路争权、一路补洞、一路被现实拧出来的。
这套系列,想先把哪条时间线讲清楚
这套 《CSS 江湖》,不是教程。
也不是“十分钟读完 CSS 编年史”的百科压缩包。
我更想把它写成一条能看见人物、冲突和后果的时间线:
- Web 刚开始流行时,大家为什么先在“网页该听谁的”上吵起来
- CSS 为什么刚出场就卷进浏览器大战
- 为什么 CSS2 会膨胀,CSS 2.1 又为什么像一次返工还债
- 为什么
Acid2、前缀、旧版Flexbox会把一代前端折腾得像拆弹 - 为什么有些能力拖十几年终于落地,有些却半路就没了
换句话说,这是一套关于 CSS 标准史、浏览器江湖、以及开放 Web 现实逻辑 的系列文章。
先给你看这部戏的大致分幕
如果把整套 CSS 历史压成一条主线,大概会是这样:
第一幕|1994-1996:CSS 不是先从语法开始,而是先从“谁有资格控制网页外观”开始
最早的冲突,不是属性名怎么设计。
而是 Web 到底该更像文档系统,还是更像作者可以自由摆布的视觉媒介。
这一幕里,Håkon Wium Lie、Bert Bos、早期浏览器作者、W3C 这些角色都会陆续登场。CSS 能活下来,不只是因为它能写样式,而是因为它提出了一套比“继续往 HTML 里塞展示标签”更像长久之计的办法。
第二幕|1996-2001:标准刚起步,浏览器厂商已经先打起来了
CSS1 还没来得及成为稳固秩序,微软和网景就已经把 Web 拖进浏览器大战。
从这时候开始,CSS 的命运就不再只是“这门语言好不好设计”,而是:
浏览器愿不愿意实现、怎么实现、实现到什么程度。
这也是为什么 CSS 的历史,从第一天起就带着浓重的现实主义。
第三幕|1998-2007:CSS2 想一次解决太多问题,最后只能靠 CSS 2.1 回来还债
这可能是整条历史里最典型的一次“规范理想主义撞上实现现实”。
CSS2 试图把很多事一起打包收进去,可浏览器并没有那个能力和耐心整齐跟上。于是标准越写越大,现实越跑越偏,最后只好用更务实的方式重新整理战场。
到了 Acid2 那里,故事又突然有了名场面气质:
一张笑脸,逼得整个浏览器江湖开始正视“标准支持”这件事不能再一直糊弄下去。
第四幕|2007-2013:CSS3 越红,前端越像在扫雷
模块化是对的。
可一旦它进入真实世界,开发者就会发现自己面对的是一锅半熟不熟的大杂烩:
- 新模块陆续冒出来
- 浏览器支持节奏完全不同
- 厂商前缀本来是实验标记,后来却变成生产代码常驻人口
Flexbox甚至能留下三代语法同堂的考古现场
这一幕最能解释,为什么很多人一提老 CSS 兼容史,就会本能地皱眉。
第五幕|2013 之后:现代 CSS 开始成熟,但不是所有梦想都能活着上岸
后面的故事,就不只是“新特性来了”那么简单了。
更值得看的其实是命运分叉:
- 有些能力像
Grid,虽然慢,但属于平台迟早得补的欠账 - 有些能力像
:has()、container queries,需求一直很强,却被性能和实现代价卡了很多年 - 还有些能力像
CSS Regions,规范写出来了,也试过了,但主流引擎最后觉得这条路不值得长期养
看到这里你就会明白:
CSS 的演化从来不只是“作者想不想要”,而是作者需求、浏览器成本、标准组织节奏、平台方向一起拉扯出来的结果。
推荐阅读顺序
01|CSS 江湖(一):谁有权给网页化妆?
从 1994 年讲起。CSS 诞生前,争的不是语法,而是 网页到底该听作者的,还是听用户的。
02|CSS 江湖(二):标准还没定,微软和网景已经打起来了
CSS1 还没盖章,浏览器大战已经先开了。看懂这篇,就会明白 标准从来不是在真空里长出来的。
03|CSS 江湖(三):CSS2 越写越大,浏览器越跑越偏
CSS2 想要一切,CSS 2.1 被迫回来还债。这里讲的是 规范理想主义是怎么被实现现实摁回地面的。
04|CSS 江湖(四):一张笑脸,逼得浏览器厂商连夜补课
Acid2 为什么能成名场面?因为它把“标准支持”这件事,第一次变成了 谁都看得懂的公开考试。
05|CSS 江湖(五):CSS3 越红火,前端越像在扫雷
模块化、前缀、旧语法、新语法、Flexbox 三代同堂。你会看到 CSS3 为什么越成功,生态越混乱。
06|CSS 江湖(六):2012 年前缀危机,差点把开放 Web 拖回 IE6 时代
这是整套系列里最像“事故报告”的一篇。讲的是 -webkit- 为什么差点把开放 Web 又拖回单一引擎时代。
07|CSS 江湖(七):标准都写出来了,为什么主流引擎就是不想实现
CSS Regions 这条线很冷,但特别狠。它会让你明白:规范存在,不等于主流实现愿意长期陪你做梦。
08|CSS 江湖(八):为什么有些 CSS 熬成了标准,有些却死在半路上
收束篇。把 Grid、:has()、container queries、Houdini、Regions 全部放在一起,看清一条总规律:什么样的 CSS 能活下来。
番外篇
09|CSS 江湖(番外一):Grid 为什么不是更早来到 Web
看懂这篇,你会更明白:Grid 不是“迟来的锦上添花”,而是 Web 拖了很多年才终于补上的布局欠账。
10|CSS 江湖(番外二):为什么 :has() 会难产二十年
这篇讲的是一个很多前端都喊了很多年的愿望,为什么会因为 性能恐惧和失效范围问题 拖到 2022 年才真正进入主流。
11|CSS 江湖(番外三):为什么 container queries 曾被说成“不可能”
这篇最适合接在 :has() 后面读。它会把问题从“某个特性为什么慢”推进到更底层的地方:平台为什么会害怕局部响应把布局因果关系搅成死循环。
如果你只想先读三篇
可以先看这三篇:
- 第一篇:看 CSS 最初到底在争什么
- 第五篇:看 CSS3 为什么把一代前端逼成扫雷兵
- 第八篇:看现代 CSS 世界里,什么样的能力能活下来
这三篇能最快把这套系列的时间线和脾气读出来。
为什么想写这套
因为今天很多前端对 CSS 的印象,其实都是结果,不是过程。
大家知道:
Grid很好用:has()终于来了container queries总算能上生产了- 老代码里那些前缀看着很烦
可不知道这些东西背后,曾经吵过多少轮,拖过多少年,或者死过多少次。
而我一直觉得,如果不把这些过程连成时间线,你就很容易把今天的 CSS 误以为是一套自然长出来的东西。
它不是。
它更像一座修了很多年的城:
- 有的路,是先修歪了再返工
- 有的桥,是大家骂着骂着终于修通
- 有的楼,图纸很漂亮,但最后根本没盖起来
看懂这些,回头再看今天的 CSS,你会更知道哪些能力为什么值得珍惜,哪些混乱为什么会反复重演。
先记住:CSS 的很多毛病,都是历史一层层压出来的
如果你平时把 CSS 当工具,这套系列也许能让你第一次把它当成一段活历史来看。
如果你本来就讨厌 CSS,这套系列也许会让你稍微原谅它一点。
因为你会发现:
它身上那些让人抓狂的毛病,很多并不是凭空长出来的,而是历史一层一层压上去的。