淘宝CSS框架研究(1):Reset CSS(八卦篇)
作者:玉伯 来源:Taobao.com UED Team 发布时间:2009-03-31 12:58:00
八卦为先
八卦是种优良品质,特别是用在技术上时。来看几个Reset CSS的八卦问题吧:
你知道世界上第一份reset.css在哪么?
* { margin: 0; padding: 0 }
人品很坏吗?Eric Meyer和YUI是情侣吗?
Google有用reset.css吗?
No CSS Reset的口号是谁最先提出来的?
类似问题或者说困惑还能列举很多,reset.css极其简单又极其不简单。继续挖掘八卦之前,请先关机遐思,或去如厕更衣透透气,想想后再读下文。
不是历史
2004年,遥远又如近在眼前的昨天,Tantek被不同浏览器下默认样式的差异搞烦了,于是琢磨中写了一个undohtml.css, 这就是第一个八卦问题的答案。
对于基于Gecko引擎的Firefox等浏览器,请在地址栏中输入resource://gre/res/html.css,默认样式就这样裸体着呈现在面前了。CSS界的Guru级人物Eric Meyer立刻就嗅探到了html.css的有趣性:Really Undoing html.css. 知道CSS好玩,实在没想到CSS居然这么好玩。比如style, script { display: block }
就可以显示CSS和JS源码,在做代码演示的demo页时,就不用辛辛苦苦用pre或textarea了(虽然因为ie不支持导致不实用,不过这的确是个思路)。
继续八卦:CSS Negotiation and a Sanity Saving Shortcut. * { margin: 0; padding: 0 }
的学名是Global White Space Reset. 从原文中可以看出这个方法刚问世时是非常火爆的,并且作者建议一定要先破后立,要将清扫差异和重置默认样式结合起来,这样才是正确的做法。
为何Global White Space Reset当初风光一时,如今却黯然销魂?* { margin: 0; padding: 0 }
的成功之处在于,管你三七二十八,统统抹平,人人生而平等!然而其失败之处也正是因为其威力太大,虽然捣了蜂窝得了蜜,却惹来群蜂追尾,麻烦无限(因为被抹平的样式,你得再重新设置回来,比如input的padding等)。这就如西汉一代名将韩信哪,是成也萧何,败也萧何!
还有一个传说中的说法是,星号*选择符还会导致性能问题。由于一直没找到可靠的资料,我又不知道怎样才能测试CSS选择符的渲染性能(知道的请一定告诉我),这个传说中的性能问题就只能当它是传说了。
眨眼一瞬间,三年就过去了。2007年,Eric Meyer的一篇文章Reset Styles, 重新唤起了一股reset热潮。这篇文章里有第3个八卦问题的答案:Eric的reset.css是源自YUI的,可能是母子关系,但总之不是情侣关系。
很快,Eric发布了第二版:Reworked Reset. 后面的解释极具价值,很多属性值的设置在这里有详尽说明。
火爆的回复给了Eric源源不断的动力:Reset Reloaded. 看完这篇文章,有一种尘埃落定的感觉。
但上面的文章并不是最终版本,2008年2月份,Eric Meyer还更新了一次:CSS Tools: Reset CSS
说完Eric Meyer的心路历程,不得不提一下YUI Reset CSS. 创始人是Nate Kokechley. 去年北京D2论坛上还见过一面,前不久已离开YAHOO,让我的直觉里对YUI都有点担心起来了,唉。
上面是两个最有名的CSS Reset方案。但世界永远是多样化的,比如Less is more - my choice of Reset CSS. 这和Eric Meyer的期望其实是一致的:不同的应用环境下,应该选择自己的reset方案,而不是简单的copy过去。比如Google首页,在这种特定页面里,不用就是一种最好的用。
更多眼花缭乱的Reset方案请参看:A Killer Collection of Global CSS Reset Styles. 很标题党,内容就鱼龙混杂了。
最后,隆重揭晓最后一个八卦问题的答案:No CSS Reset. 提倡的核心思想也是Less is more. 原因很简单,* { margin: 0; padding: 0 }
杀伤力太大,在某些场合下,Eric Meyer的方案杀伤力也还是太大了。有想法并说出来,总是好的。
有反对就会有支持:Why I Like (and Use) Reset CSS. 公说公有理,婆说婆有理,并非所有问题都需要一个确切的答案,有时过程本身,就是追求的结果。
Eric Meyer对No CSS Reset一文的回复:Crafting Ourselves. 读罢此文,明月松间照,清泉石上流。下面摘录两段,做为此八卦闲文的完结:
Because this isn’t a field of straightforward answers and universal solutions. We are often faced with problems that have multiple solutions, none of them perfect. To understand what makes each solution imperfect and to know which of them is the best choice in the situation—that’s knowing your craft. That’s being a craftsman/craftswoman. It’s a never-ending process that is all the more critical precisely because it is never-ending.
…It’s evidence that we continue to challenge ourselves and each other to advance our skills, to keep learning better and better how better to do what we love so much.
预告:下一篇是技术篇,将详细探讨淘宝目前使用的Reset CSS方案,欢迎各位提前准备好板砖,我已购买坚固头盔一顶…… 敬请期待。


猜你喜欢
- 人们对于产品设计这类事情,往往容易眼高手低,在宇宙层面上夸夸其谈,却落不了地,只能飘着。真正到了自己动手的时候,才会发现问题很多,实践和理论
- asp使用fso读取驱动器信息:<%vv=drive()response.write vv funct
- 对Python中正则表达式的理解,主要就是对符号的理解,本文即对Python中常用的正则表达式符号进行简析。其主要的符号有:.默认匹配一个字
- 一个小项目自动登录淘宝联盟抓取数据,由于之前在Github上看过类似用Python写的代码因此选择用Python来写,第一次用Python正
- 在我的使用SQL Server2005的新函数构造分页存储过程中,我提到了使用ROW_NUMBER()函数来代替top实现分页存储过程。 但
- 前言:如何做到,控制多设备并行执行测试用例呢。思路篇我们去想下,我们可以获取参数的信息,和设备的信息,那么我们也可以针对每台设备开启不一样的
- [参与测试的浏览器:IE6 / IE7 / IE8 / FF3 / OP9.6 / SF3 / Chrome2 ][操作系统:Windows
- 前言TF(TransForm),就是坐标转换,包括了位置和姿态两个方面的变换,坐标变换是机器人学中的概念。在机器人学中,无论一个机器人多么复
- 最近尝试写python GUI界面,决定先从tkinter开始。但是遇到了无法安装。执行pip install tkinter没有用,报了如
- 当“ 页面重构工程师 ”这个职位的面试官也蛮长一段时间了,跟前两年比起来,总的来说来应聘的同学能力在很大程度上有了提高,记得两年前的一场招聘
- datetime日期时间类,主要熟悉API,时区的概念与语言无关。from datetime import datetime as dtdt
- isset(PHP 3, PHP 4, PHP 5 )isset -- 检测变量是否设置描述bool isset ( mixed var [
- 主键的生成方式主要有三种: 一. 数据库自动生成 二. GUID 三. 开发创建 严格讲这三种产生方式有一定的交叉点,其定位方式将在下面进行
- 目录Python图片验证码降噪 和8邻域降噪一、简介二、8邻域降噪三、Pillow实现四、OpenCV实现Python图片验证码降噪 和8邻
- 前言 Tensorflow中可以使用tensorboard这个强大的工具对计算图、loss、网络参数等进行可视化。本文并不涉及对tensor
- 1提取 PDF 内容# pip install PyPDF2 安装 PyPDF2import PyPDF2from PyPDF2
- 今天遇到mysql服务1067错误的问题,设置使用系统账户也无法启动mysql,后面认证看了系统的配置信息,发现启动文件也就是mysql安装
- eval函数接收一个参数s,如果s不是字符串,则直接返回s。否则执行s语句。如果s语句执行结果是一个值,则返回此值,否则返回undefine
- 以前写点小程序其实根本不在乎并行,单核跑跑也没什么问题,而且我的电脑也只有双核四个超线程(下面就统称核好了),觉得去折腾并行没啥意义(除非在
- jQuery 1.4 源码 449 行(core.js 431 行),判断是否为函数的方法如下(思路来源于 Douglas Crockfor