5

可能重复:
为什么 CSS 重置不使用“*”来覆盖所有元素?

我正在做一个具有轻量级 HTML 的页面。

我见过大师说通用选择器是一件坏事,最好这样使用(来自: http: //meyerweb.com/eric/tools/css/reset/):

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;
}

使用通用选择器:

* {
    margin: 0;
    padding: 0;
    border: 0;
    font-size: 100%;
    font: inherit;
    vertical-align: baseline;
}

为什么通用选择器是一件坏事?

考虑到页面加载的性能,我更喜欢通用选择器。还有其他我没有考虑的事情吗?

4

2 回答 2

7
  • 通用选择器的优先级低于其他定义的规则..

    一个原因是通用选择器的优先级非常低,不能“覆盖”由更具体的选择器定义的值,请参见下面的示例。

    即使我们想将所有元素的背景颜色“重置”到选择器,使用div更合适,并且将被使用,即使稍后声明也是如此。blue*

    div {背景颜色:红色}
    * {背景颜色:蓝色}

  • 使用通用选择器不会授予您您可能想要的控制权..

    使用通用选择器不会提供对哪些确切元素将实际设置属性的任何控制,从/向显式列表中删除/添加元素比编写 CSS重置某些项目更容易。


  • 使用通用选择器显然很慢

    *您提到了加载页面所需的时间,如果您写一个字符 ( ) 而不是更多(使用替代和推荐的重置),确保下载所需资源会更快,但下载内容并不是全部页面的渲染速度。

    正如 Mozilla 开发者网络关于通用选择器所写的那样:

    注意:不鼓励作者使用通用选择器,因为它是网页性能方面最昂贵的 CSS 选择器。

    您可以通过以下链接了解更多关于选择器的昂贵性:

于 2012-07-17T23:05:28.553 回答
4

无法控制确切重置哪些元素 - 文档中使用的每个元素现在必须明确设置其边距和填充,以及可能包含在重置中的任何其他属性,例如边框和轮廓。

告别从父元素到子元素的 CSS 规则继承——通用选择器每次都胜出。因此不仅每个元素都必须在重置后定义,而且子元素现在不能继承每个元素的属性,因此它们也必须显式定义。这需要的代码量甚至可能抵消最小 CSS 重置所节省的大小!

根据通用声明,浏览器必须遍历页面上的每个元素并应用通用规则:元素、它们的子级和曾曾孙级都一样,有人声称这可能对资源和页面加载时间(这一点对于现代浏览器是有争议的。)

Internet Explorer 版本(包括 6)会出现星号 HTML 选择器错误:应该失败的选择器不会。后代选择器,例如 * html,不应该匹配任何元素,因为 html 元素是最顶层的父元素,因此它不能是任何其他元素的后代。但是,Internet Explorer 版本 5.5 和 6 会忽略此选择器开头的通用选择器。

当通用选择器与元素类型选择器直接相邻时,Internet Explorer 版本 6 和 7 会将组合解释为后代选择器,而不是应有的失败。在 Internet Explorer 6 和 7 中,此选择器还将选择一些不合适的 SGML 元素,例如 doctype 声明和注释。

于 2012-07-17T22:59:25.383 回答