码迷,mamicode.com
首页 > 其他好文 > 详细

reset 还是 normalize?

时间:2015-07-10 11:31:15      阅读:118      评论:0      收藏:0      [点我收藏+]

标签:reset   normalize   css   

众所周知,浏览器会为我们创建基本的样式。比如<h2>,我们不需要为它写任何css样式,在浏览器上展示出来,一眼就只知道它是大标题。问题是,不同浏览器之间的默认效果不尽相同,于是乎,在Chrome下很漂亮的样式,去到Firefox下可能整个页面都变得一团糟(当然也有可能是其他原因)。

举个栗子,IE浏览器下的<ul>标签的margin-left值为30pt,但是在Firefox,Chrome,Safari<ul>默认属性是padding-left:40px。所以我们需要考虑下浏览器兼容性。

Reset

这时候就有人提出来,这不是很简单吗,两句代码搞定。

* {
    margin: 0;
    padding: 0;
}

确实,使用这两个可以解决paddingmargin的问题,而且现在国内挺多网站都是这么干的,但是这样做会带了很多痛苦的事。

  • 浏览器负担增大,这很好理解,这里使用了通配符*,无论什么元素,你都要在默认的基础上强制设置marginpadding为0。(注意这里使用了强制)
  • 整个页面变得很挤,没有了浏览器默认的呼吸间隔,页面会变得很拥挤,元素都挤在一块,很难看。
  • 加载时间。。。我在网上找到这张图,自己看。
  • 不酷=_=

基于上面的原因,有人提出了坚强版的解决方式。这就是Reset.css

html, body, div, span, applet, object, iframe,
 h1, h2, h3, h4, h5, h6, p, blockquote, pre,
 a, abbr, acronym, address, big, cite, code,
 del, dfn, em, img, ins, kbd, q, s, samp,
 small, strike, strong, sub, sup, tt, var,
 b, u, i, center,
 dl, dt, dd, ol, ul, li,
 fieldset, form, label, legend,
 table, caption, tbody, tfoot, thead, tr, th, td,
 article, aside, canvas, details, embed, 
 figure, figcaption, footer, header, hgroup, 
 menu, nav, output, ruby, section, summary,
 time, mark, audio, video {
    margin: 0;
    padding: 0;
    border: 0;
    font-size: 100%;
    font: inherit;
    vertical-align: baseline;
 }

Reset.css确实帮了很大忙,它把大部分元素都重置了。通配符的问题也就不存在了。

但是,帅的人会认为,Reset的方式还是太生硬了,还有一个比较大的问题是你写一个div的时候,浏览器会生成很大一串重复的代码,特别是当很多个div嵌套的时候,这不利于我们debug。

##Normalize

Reset趋向于把大部分元素都设成没有加样式的状态,然而这造成我们需要在用到时去重写那大部分“没有样式”的样式…而Normalize.css则趋向于覆盖大部分浏览器异同的默认样式。无论你使用哪种方式,我们最终都需要书写我们自己的代码,但是Normalize会少一些,而且不会造成大量重复代码覆盖。

有人问会问,那Normalize 还是没有解决<ul>的问题啊,(额…上面的例子只是让大家知道浏览器有差异而已),这不是Normalize关注的问题。它不是要强制修改默认样式,而是认为<ul>本身就应该有左间距,这没什么大问题,等到要用的时候再去自定义。所以Normalize造好一个合适的轮子,造车你得自己来。

比如

/**
 * 1. Correct `inline-block` display not defined in IE 8/9.
 * 2. Normalize vertical alignment of `progress` in Chrome, Firefox, and Opera.
 */

audio,
canvas,
progress,
video {
  display: inline-block; /* 1 */
  vertical-align: baseline; /* 2 */
}

注释写得很明白了(优点之一,其他优点可以看推荐阅读),就是修复浏览器的异同。在某某浏览器上会有坑,这里修复掉,再去写你自己的样式表就安全多了。

Normalize.css现在被用得很广。Twitter Bootstrap、HTML5 Boilerplate、GOV.UK、Rdio、CSS Tricks等等网站。

当然最终使用Normalize还是Reset,还得看具体项目和个人喜好了,你看着办。
最后希望日后再无浏览器兼容性问题。。。

推荐阅读

版权声明:本文为博主原创文章,未经博主允许不得转载。

reset 还是 normalize?

标签:reset   normalize   css   

原文地址:http://blog.csdn.net/joueu/article/details/46827017

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!