写CSS第一步:CSS Reset与Normalize
前言
刚刚入门的时候,对于整个体系还不是那么熟知,印象很深的是,当时在一个页面中用到button标签,但是浏览器给这个button设置的默认样式不符合我要求,于是将其CSS格式化,然后没多久,在另外一个页面同样用到这个button,又再次复制之前的初始化代码来覆盖默认样式,真是难受,后来找到方案,就是在开发之前,使用一套初始化样式进行全局覆盖。
Reset.css
用过几套初始化样式套件,但是还是觉得网易的这套比较符合自己的开发习惯,这里就直接贴代码啦~
1 | /* reset */ |
如果在前期不制定好CSS reset,后期维护阶段在对其进行修改,就会牵涉到很多样式,这个时候来修复就非常头疼了,但是也不是说reset就是有利无害的,他具有以下几个劣势:
不合理的样式重置,比如说将所有的padding和margin都设置为0,这样一刀切就导致一些希望有初始padding、margin的元素没有默认值
性能劣势,设置完reset后通常会增加浏览器的样式计算成本,因为他作用对象是全局的,假如某条reset规则中的所有属性设置实际上并没有在任何元素上生效(因为全部被更特殊的规则给覆盖了),所有针对此规则的级联计算全都是浪费。
多余样式重复,比如说用的非常少的fieldset 、blockquote、q、keygen,legend等等,就造成了代码多余的弊端,如果用到了在设置也不迟。
对于这些问题,可以更具自己的项目需求,修改部分reset,以下是我参考github上大佬的修改版reset,自己也做了些调整:
1 | body{margin: 0; font: 12px/22px Arial,"微软雅黑"; color: #333;} |
Normalize.css
Normalize.css 与 reset.css恰好相反,注重通用的方案,一般可作为一个团队的基础样式,重置掉该重置的样式(例如body的默认margin),保留该保留的 user agent 样式,同时进行一些bug的修复,这点是reset所缺乏的。Normalize不讲求样式一致,而讲求通用性和可维护性。
1 | html { |
那么这两者那个更适合呢?当然是符合你需求的就是最适合的。虽然说Normalize.css 中重置修复的很多bug,其实在我们的项目中十个项目不见得有一个会用得上,那么这些重置或者复,某种意义上而言也是所谓的冗余代码。
一般我们是根据自己项目的需求,将reset和normalize混合后,去其糟粕,编写出符合自己项目真正的初始化样式套件,这是我根据github上小伙伴参考,并且修改的私人定制初始化样式套件:
1 | html{ |
总结
其实这片文章并没有讲多少实质上的东西,一些理论也是参照前辈经验而提出来的,这里做一个笔记,方便自己将来引用。