很多前端设计高手的文章里面,都建议不要用*{margin:0;padding:0},理由都没有解释的很清楚,或是简单的说下它会对网页的表单控件默认样式造成一点的异常(我个人认为这个问题根本就不是问题),也有传言它会造成对性能会有影响(但一直都没有拿得出的事实依据),也有建议用Eric Meyer和YUI的Resets替代(我反而觉得*{}比他们写的RESETS更聪明也更简单),唯一想搞清楚的问题是(也是最关键的):用*{margin:0;padding:0}到底会不会对性能造成的影响?下面参考了网上高手们的一些讨论。
反方观点:
numa001 发表于 2008-3-17 16:48
现在写CSS 在开头都要来个 *{margin:0;padding:0} 。这样可以避免一些浏览器差异。
但是,我认为小站点这样可以;大站点却弊大于利。理由:强行为每个标签设置这些属性,而不是默认的。增加了内存的额外开销,不可取
==================
qblxj 发表于 2008-3-17 18:03
对所有存在的DIV都做一次通配操作,假如网页很大很复杂,那多余无谓的操作就会很多
你可以在通配里写入更多内容,再用浏览器打开,那你就能体会到那种内存不足的效果
上次我了在通配下写入哪一个属性(忘记了),然后页面一打开浏览器就自动挂掉,事实证明了,有些属性不适用于通配符
===================
winnersong 发表于 2008-3-27 18:48
* 不能乱用之前我一直习惯用*,因为这样可以省略很多代码。
但是后来问题来了,我发现我做的搜索框总是和线上的不一样,按钮也总不一致,ie和ff有很大的区别,找了半天才知道是*引起的原因!
========================
正反观点:
wiseinfo 发表于 2008-3-18 05:25
需要就好!不需要就不好!所谓说不好的理由是什么?
“增加了内存的额外开销” 你通过什么证明的?原理是什么?只是格式化标签样式而已,难道标签原来的样式不占用内存吗?几乎绝大部分的浏览器都是利用浏览器自带的默认CSS样式来帮助其解释标签在默认状态下的样式。也就是说即便你不针对某一个标签设置CSS样式它在浏览器中还是有默认CSS样式的。
=========================
heidian 发表于 2008-3-18 08:13
用*可能是不严谨,但是带来的效率是看得到的,谁让浏览器各自有不同的默认值呢,这个通配符设计出来我觉得就是冲着这个问题来的。
如果用*赋予属性会造成巨量内存消耗,那么应该是浏览器的问题,因为这么两个短短的属性都不能应付,这个统配符号没有存在的必要。
===========================
kuhanzhu 发表于 2008-3-20 11:06
CSS并非ASP、PHP等需要在服务器端解析的
所以并不会对服务器有任何内存方面的压力。
只能说CSS越大,越浪费流量。
即使真的有楼主说的那个内存开销问题,也是客户端浏览器的事,跟服务器无关。
而且,任何标签都有很多很多的属性,通配符只是将默认属性设定下而已,并不是增加任何没有的属性。也就是说,对于div,你设定了margin:0;padding:0,跟没设定,浏览器解析的过程是一样的,因为你不设定,浏览器还是要去思考默认的margin和padding的。
另外,通配符能更好的节省CSS体积,比如<a href="#"><img src="" alt=""/></a>这里如果图片不需要边框就必须设定border,如果一个页面有很多这样的图片链接,那么用通配符显然会省下大量的class等设定。
那么,大网站为何很少有通配符呢?这个除了制作者的习惯外,还有协同作战的问题,不使用通配符,就像楼上某位说的
[quote]另,对网易的写法表示不解,div等与Hx系列为何要分开
div,form,img,ul,ol,li,dl,dt,dd {margin: 0; padding: 0; border: 0;}
h1,h2,h3,h4,h5,h6 { margin:0; padding:0;}[[/quote]
是同一个道理:有更好的可读性,分组设定。
大网站有很多大网站的做法,比如CSS写在页面上不分离。为啥?服务器上文件多,管理方便!而且两页CSS不同,因此没必要。
所以,看下163.com,你会发现首页是CSS写在那的,但新闻页就有css文件独立的情况,因为新闻页调用多,可以节省流量,首页只会多一个文件,而不会节省流量。
CSS文件独立的作用就是为了节省流量,互相调用。
反方观点:
numa001 发表于 2008-3-17 16:48
现在写CSS 在开头都要来个 *{margin:0;padding:0} 。这样可以避免一些浏览器差异。
但是,我认为小站点这样可以;大站点却弊大于利。理由:强行为每个标签设置这些属性,而不是默认的。增加了内存的额外开销,不可取
==================
qblxj 发表于 2008-3-17 18:03
对所有存在的DIV都做一次通配操作,假如网页很大很复杂,那多余无谓的操作就会很多
你可以在通配里写入更多内容,再用浏览器打开,那你就能体会到那种内存不足的效果
上次我了在通配下写入哪一个属性(忘记了),然后页面一打开浏览器就自动挂掉,事实证明了,有些属性不适用于通配符
===================
winnersong 发表于 2008-3-27 18:48
* 不能乱用之前我一直习惯用*,因为这样可以省略很多代码。
但是后来问题来了,我发现我做的搜索框总是和线上的不一样,按钮也总不一致,ie和ff有很大的区别,找了半天才知道是*引起的原因!
========================
正反观点:
wiseinfo 发表于 2008-3-18 05:25
需要就好!不需要就不好!所谓说不好的理由是什么?
“增加了内存的额外开销” 你通过什么证明的?原理是什么?只是格式化标签样式而已,难道标签原来的样式不占用内存吗?几乎绝大部分的浏览器都是利用浏览器自带的默认CSS样式来帮助其解释标签在默认状态下的样式。也就是说即便你不针对某一个标签设置CSS样式它在浏览器中还是有默认CSS样式的。
=========================
heidian 发表于 2008-3-18 08:13
用*可能是不严谨,但是带来的效率是看得到的,谁让浏览器各自有不同的默认值呢,这个通配符设计出来我觉得就是冲着这个问题来的。
如果用*赋予属性会造成巨量内存消耗,那么应该是浏览器的问题,因为这么两个短短的属性都不能应付,这个统配符号没有存在的必要。
===========================
kuhanzhu 发表于 2008-3-20 11:06
CSS并非ASP、PHP等需要在服务器端解析的
所以并不会对服务器有任何内存方面的压力。
只能说CSS越大,越浪费流量。
即使真的有楼主说的那个内存开销问题,也是客户端浏览器的事,跟服务器无关。
而且,任何标签都有很多很多的属性,通配符只是将默认属性设定下而已,并不是增加任何没有的属性。也就是说,对于div,你设定了margin:0;padding:0,跟没设定,浏览器解析的过程是一样的,因为你不设定,浏览器还是要去思考默认的margin和padding的。
另外,通配符能更好的节省CSS体积,比如<a href="#"><img src="" alt=""/></a>这里如果图片不需要边框就必须设定border,如果一个页面有很多这样的图片链接,那么用通配符显然会省下大量的class等设定。
那么,大网站为何很少有通配符呢?这个除了制作者的习惯外,还有协同作战的问题,不使用通配符,就像楼上某位说的
[quote]另,对网易的写法表示不解,div等与Hx系列为何要分开
div,form,img,ul,ol,li,dl,dt,dd {margin: 0; padding: 0; border: 0;}
h1,h2,h3,h4,h5,h6 { margin:0; padding:0;}[[/quote]
是同一个道理:有更好的可读性,分组设定。
大网站有很多大网站的做法,比如CSS写在页面上不分离。为啥?服务器上文件多,管理方便!而且两页CSS不同,因此没必要。
所以,看下163.com,你会发现首页是CSS写在那的,但新闻页就有css文件独立的情况,因为新闻页调用多,可以节省流量,首页只会多一个文件,而不会节省流量。
CSS文件独立的作用就是为了节省流量,互相调用。