reset 还是 normalize?

众所周知,浏览器会为我们创建基本的样式。比如<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,还得看具体项目和个人喜好了,你看着办。

最后希望日后再无浏览器兼容性问题。。。

推荐阅读

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

时间: 2024-07-31 10:25:06

reset 还是 normalize?的相关文章

reset css normalize css

@charset "uft-8";body,div,dl,dt,dd,ul,ol,li,h1,h2,h3,h4,h5,h6,pre, form,fieldset,input,textarea,p,blockquote,th,td {  padding: 0;  margin: 0; } html { font: 62.5% “Lucida Grande”, Lucida, Verdana, sans-serif; text-shadow: #000 0px 0px 0px; } ul,

normalize与reset

Normalize.css与CSS reset区别 Normalize.css 只是一个很小的CSS文件,但它在默认的HTML元素样式上提供了跨浏览器的高度一致性.相比于传统的CSS reset,Normalize.css是一种现代的.为HTML5准备的优质替代方案.Normalize.css现在已经被用于Twitter Bootstrap.HTML5 Boilerplate.GOV.UK.Rdio.CSS Tricks 以及许许多多其他框架.工具和网站上. Normalize.css 项目地址

Normalize.css与CSS reset区别

Normalize.css 只是一个很小的CSS文件,但它在默认的HTML元素样式上提供了跨浏览器的高度一致性.相比于传统的CSS reset,Normalize.css是一种现代的.为HTML5准备的优质替代方案.Normalize.css现在已经被用于Twitter Bootstrap.HTML5 Boilerplate.GOV.UK.Rdio.CSS Tricks 以及许许多多其他框架.工具和网站上. Normalize.css 项目地址 Normalize.css 在GitHub上的源码

给所有浏览器的元素设置了一个共同的样式:Normalize.css

使用Normalize.css重置默认样式 CSS重置有助于根据所有设置的样式建立一个基准样式.样式重置有效重写了浏览器某些元素(在浏览器里有很大的不同)默认的样式. 尽管CSS resets在过去的几年里很受欢迎,但是,很多网站至今也没有使用,这些网站CSS的可扩展性因css resets会有很大的困难. 大多数人推荐使用normalize.css重置默认样式,而不是使用由Eric Meyer写的非常流行的CSS Reset或者自己写的Reset.Normalize.css给所有浏览器的元素设

Normalize.css的使用及下载

Normalize.css 只是一个很小的CSS文件,但它在默认的HTML元素样式上提供了跨浏览器的高度一致性.相比于传统的CSS reset,Normalize.css是一种现代的.为HTML5准备的优质替代方案.Normalize.css现在已经被用于Twitter Bootstrap.HTML5 Boilerplate.GOV.UK.Rdio.CSS Tricks 以及许许多多其他框架.工具和网站上. Normalize.css 项目地址 Normalize.css 在GitHub上的源码

引用Normalize.css之后,flex布局失效的原因以及解决办法

昨天无意知道Normalize.css框架.于是在最近使用了h5属性的项目中引用来玩玩.但是习惯了用通配符去重置.在引用Normalize.css之后各种不适.最直接的影响,比如我对footer header等H5标签容器设置了display:flex;却没有任何效果.打开浏览器审查元素发现, Normalize.css给h5的这些标签预定义了display:block.而且权值非常高,把我自己footer的display:flex覆盖掉了,这就是我设置flex布局属性不起作用的原因. 解决方法

Normalize.css的使用

本文译自Normalize.css官网: http://nicolasgallagher.com/about-normalize-css/ Normalize.css 只是一个很小的CSS文件,但它在默认的HTML元素样式上提供了跨浏览器的高度一致性.相比于传统的CSS reset,Normalize.css是一种现代的.为HTML5准备的优质替代方案.Normalize.css现在已经被用于Twitter Bootstrap.HTML5 Boilerplate.GOV.UK.Rdio.CSS

来,让我们谈一谈Normalize.css

本文译自 http://nicolasgallagher.com/about-normalize-css/最初发布于我的博客:http://jerryzou.com/posts/aboutNormalizeCss/ Normalize.css 只是一个很小的CSS文件,但它在默认的HTML元素样式上提供了跨浏览器的高度一致性.相比于传统的CSS reset,Normalize.css是一种现代的.为HTML5准备的优质替代方案.Normalize.css现在已经被用于Twitter Bootst

normalize.css使用方法

综述 Normalize.css是一种CSS reset的替代方案. 我们创造normalize.css有下面这几个目的: 保护有用的浏览器默认样式而不是完全去掉它们 一般化的样式:为大部分HTML元素提供 修复浏览器自身的bug并保证各浏览器的一致性 优化CSS可用性:用一些小技巧 解释代码:用注释和详细的文档来 Normalize.css支持包括手机浏览器在内的超多浏览器,同时对HTML5元素.排版.列表.嵌入的内容.表单和表格都进行了一般化.尽管这个项目基于一般化的原则,但我们还是在合适的