reset css研究(八卦篇)_舞轻尘的博客-程序员秘密

技术标签: css  学习笔记  前端  reset.css  

八卦为先

八卦是种优良品质,特别是用在技术上时。来看几个Reset CSS的八卦问题吧:

  1. 你知道世界上第一份reset.css在哪么?
  2. * { margin: 0; padding: 0 }人品很坏吗?
  3. Eric Meyer和YUI是情侣吗?
  4. Google有用reset.css吗?
  5. 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方案,欢迎各位提前准备好板砖,我已购买坚固头盔一顶…… 敬请期待。

参考资料


版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/yanran910602/article/details/9344519

智能推荐

golang中MongoDB的between查询_mongo between_zhaobisheng1的博客-程序员秘密

最近在使用GO语言操作MongoDB的时候发现挺多操作很麻烦由于判断时间戳或者数值在两个数范围内这个查询很常见,然而mgo实现between查询的资料又很少,所以做一下记录由于判断时间戳或者数值在两个数范围内这个查询很常见,然而mgo实现between查询的资料又很少,所以做一下记录mgo的安装: go get gopkg.in/mgo.v2获取时间戳在上一小时内的记录//其他...

关于android webview 设置cookie的问题_weixin_33923148的博客-程序员秘密

转自:http://blog.csdn.net/encienqi/article/details/7912733 我们在android中访问网络经常会用到Apache的HttpClient,用此类去访问网络获取数据, 但是在写android界面的时候又时不时的会用到一些WebView组件,这时候访问一个以经登录的页面的时候cookie设置就有个问题 在HttpClient中保存下来的Coo...

Hibernate做增删改查(C,R,U,D)_crud_java最强的男人的博客-程序员秘密

最近学习了Hibernate框架,做了一个简单的单表增删改查,供初学者学习参考首先要配置Hibernate的配置文件:hibernate.cfg.xml:<!DOCTYPE hibernate-configuration PUBLIC "-//Hibernate/Hibernate Configuration DTD 3.0//EN" "http://www.hiberna...

List合并的5种方式,以及它的速度比较_《翀》的博客-程序员秘密

package com.augurit.xmjg.portal.controller;import org.apache.tools.ant.taskdefs.Java;import java.time.Duration;import java.time.LocalDateTime;import java.util.ArrayList;import java.util.Collections;import java.util.List;import java.util.stream.Col

什么是OPC?OPC网关有什么优势?_opc通讯的优缺点_xmbaima77的博客-程序员秘密

当大量数据进入计算机控制系统时,存在着应用程序对现场信息的共享与交互问题。由于缺乏统一的连接标准,工控软件往往需要为硬件设备开发专用的驱动程序。由于现场设备的种类繁多,且产品的不断升级,往往给用户和软件开发商带来了巨大的工作负担。通常这样也不能满足工作的实际需要,迫切急需一种具有高效性、可靠性、开放性、可互操作性的即插即用的数据访问机制。OPC(OLE for Process ...

vue项目出现 cannot GET/ 的问题总结_cannot get /_羊子雄起的博客-程序员秘密

1.没有报错,页面显示cannot GET,经过排查发现config/index.js里的dev做了改动。他想实现pc和移动端跳转,所以修改assetsPublicPath: '/m/'。在移动端访问直接走'/m/#'。直接npm run dev跑不起来,需要改成assetsPublicPath: '/'就好了。2.报错node出现 Error: listen EACCES 0.0....

随便推点

JavaScript代理_ES6新增_贾明恣的博客-程序员秘密

代理是一种新的基础性语言能力,很多转译程序不支持把代理行为转换为之前的ECMAScript代码。可以检测代理是否存在,不存在提供后备代码。代理可以定义包含 捕获器 的处理程序对象,而这些捕获器可以拦截绝大部分JavaScript的基本操作和方法。在捕获器处理程序中,在遵从捕获器不变式的前提下,可以修改任何基本操作的行为。与代理如影随形的反射API:封装了与捕获器拦截的操作相对于的方法。可以将其看作一套基本操作,是绝大部分JavaScript对象API的基础。开发者可以使用代理创建出各种编码模式,例如

【Java核心】Java泛型(Generic Type)_generictype_明天争取的博客-程序员秘密

一、写在前面。 错误可分为两种:编译时错误与运行时错误。编译时错误在编译时可以发现并排除,而运行时错误具有很大的不确定性,在程序运行时才能发现,造成的后果可能是灾难性的。 泛型的引入使得一部分错误可以提前到编译时期发现,极大地增强了代码的健壮性。但是我们知道 java 泛型在运行的时候是会进行泛型擦除的,那我们要怎样得到在编译时期泛型的信息呢?Java 为我们提供了...

python循环读取XML文件并统计相应标签的个数_@林峰的博客-程序员秘密

需求:需要统计图片标注产生的XML文件的每个缺陷个数,同时还要将xml文件中标注错误的缺陷修改过来。XML文件大致格式:每个XML或许有多个缺陷,都要统计出来。总共672的XML文件。`from lxml import etreeimport numpy as np import pandas as pd import os#封装一个解析XML文件的函数def readXML(path): parser=etree.XMLParser(encoding="utf-8") #传入两个

洛谷P4924 [1007]魔法少女小Scarlet_王王王王王ovo的博客-程序员秘密

模拟一下就出来了,坐标的变换#include<iostream>#include<bits/stdc++.h>using namespace std;int a[505][505];void fun(int x,int y,int r,int z){ int i,j; if(z == 0){ for(i = 1; i <= r; ++i){ for(j = -i; j < i; ++j){ swap(a[x-i][y+j],a[x+j][y+i.

关于I2C心得总结_i2c一次最多读写多少字节_吴下_阿萌的博客-程序员秘密

*1关于读写操作* 在读操作时候,先执行一个伪写操作,然后再执行读操作。I2C要求的。2关于时间的问题 一个晶振周期是晶振频率的倒数。 对于51单片机,一个机器周期是12个晶振周期。 一个nop()是一个机器周期。(具体nop()的时间见汇编) 对于时钟频率为11.0592Mhz的单片机,一个nop()是1us。对于I2C的时序要严格按照下图: 我们一般把delay()时间设置为5us。

Linux系统下安装和卸载Redis(转)_weixin_30734435的博客-程序员秘密

1.下载redis安装包下载地址:https://redis.io/download3.解压缩tar -zxf redis-4.0.2.tar.gz4.切换到解压后的目录cd redis-4.0.25.编译make有可能会编译出错说gcc环境未安装 貌似redis环境需要C语言环境支持执行命令行 yuminstall-ygccg++gcc-c++mak...

推荐文章

热门文章

相关标签