前言
在过去的几年里,CSS经历了一场巨变,正如JavaScript在2004年前后所经历的那场革命。它从一门极度简单、功能有限的样式语言,发展成为一项由80多项W3C规范(含草案)所定义的复杂技术,并建立起了独有的开发者生态圈、专属的技术会议、专用的框架和工具链。CSS已经如此壮大,以致于一个普通人已经无法把它完整地装进自己的头脑了。甚至在W3C专门定义这门语言的工作组中,也没人敢说自己是精通CSS所有方面的专家,甚至连接近这个程度都非常困难。实际上,大多数工作组成员只专注CSS的某个特定细节,可能对其他部分知之甚少。
大约在2009年之前,评判一个人的CSS专业程度并不是看他对这门语言的了解有多深。对当时的CSS行业来说,这或多或少就是现实:一个人能否称得上CSS高手,往往要看他能记住多少个浏览器bug和相应的对策。一转眼就到了2015年,现在的浏览器都是以Web标准作为设计基准的,过去那些针对特定浏览器的脆弱hack早已风光不再。当然,某些不兼容的情况仍然无法避免,但是迭代速度已经非常之快(尤其是因为现在的浏览器几乎都已经实现自动更新了),把这些不兼容的情况记录在书中完全是在浪费时间和空间。
我们在现代CSS中所面临的挑战已经不在于如何绕过这些转瞬即逝的浏览器bug。如今的挑战是,在保证DRY、可维护、灵活性、轻量级并且尽可能符合标准的前提下,把我们手中的这些CSS特性转化为网页中的各种创意。这正是这本书将要呈现的内容。
市面上有很多书,其内容就是以字母顺序记载一些CSS特性。你手里的这本书并不在其列,这可能是好事也可能是坏事。本书的目的在于,在你已经熟悉了那些参考书的内容之后,帮你填补知识断档。它会让你接触各种全新的方法,充分发挥那些你已经熟悉的特性所具备的无穷威力;同时也让你明白,某些你不熟悉而且看似不起眼的CSS特性可能同样威力无穷、不可小觑。总的来说,本书最核心的目的是教你如何用CSS解决难题。
本书也不是一本“菜谱书”(cookbook)。每篇“攻略”并不是即开即用的菜谱——死板地套用某些步骤就可以达成特定的效果。实际上,我努力把每个技巧背后的思考都尽量细致地描述出来,因为我相信理解发现解决方案的过程比解决方案本身更有用。即使你认为某项技巧跟你的工作没有直接关联,学会如何摸索并得出解决方案仍然是有价值的,甚至可以帮你处理完全不同的问题。长话短说,本书不仅授人以“鱼”,而且授人以“渔”,让你一辈子不会为“没鱼吃”发愁。