【问题标题】:Priority of universal selector in CSSCSS中通用选择器的优先级
【发布时间】:2018-04-21 06:57:06
【问题描述】:

我正在学习 CSS,并且对 * 选择器有疑问。我知道它会将其样式应用于文档中的每个元素。

但是,当我为正文和段落定义不同的样式(背景颜色)时,* 选择器中的样式仅应用于正文而不应用于段落。见https://jsfiddle.net/oz8a1rn4/1/

* {
  background-color: grey;
}

body {
  background-color: blue;
}

p {
  background-color: red;
}
<p>Lorem ipsum dolor sit amet, consectetur adipisicing elit. Vero soluta enim aut! Nihil nam obcaecati, fugiat sint sit libero voluptate eos incidunt odio neque cum, dignissimos aperiam, magnam nisi debitis.</p>

【问题讨论】:

  • 这是由于Cascading-Style-Sheet。短CSS。在您的情况下,以下规则会覆盖之前的规则。此外,cascade 中的 Inline-CSSstylesheet 中的更高。
  • 确实如此。 * 选择器选择所有元素。 * 选择器还可以选择另一个元素内的所有元素。
  • 感谢您的 cmets。实际上,我想了解的是为什么 * 选择器会覆盖我正文的样式,而不是我的段落。
  • 正文是蓝色的,只是你的段落占据了整个正文,所以你看不到它。不相信我?尝试在段落后添加 div,或将段落的不透明度设置为零。

标签: css selector universal


【解决方案1】:

据我了解,如果我错了,请纠正我,这是由于 css 级联的影响而发生的。 见intro to the css cascade.

*(通用)选择器对 css 特异性没有影响。 body 和 p 具有相同的特异性值(值 1)。 因此,级联中决定选择哪些样式的下一步是源顺序。后面的规则将战胜前面的规则,因此背景样式将是红色的。

【讨论】:

  • 谢谢你,gary,但我不认为源顺序,也没有特异性在游戏中。我已经尝试切换 3 种样式定义的顺序,但结果相同。我现在认为样式应用程序的顺序如下: 1. * 选择器在每个元素上将其设置为灰色,因此正文和段落。 2.段落继承了正文的灰色。 3. 段落继承的灰色被段落样式定义覆盖,变为红色。所以首先 * 选择器完成它的工作,然后继承和覆盖发生
  • 这也是为什么 AJAX 他的建议,在 body 的样式定义中添加 html 标签,就像在jsfiddle.net/oz8a1rn4/2 中将 body 的背景设置为蓝色。然后 1. * 将每个元素灰色。 2.body从html继承灰色。 3. body 由于其样式定义而变为蓝色。 4. 段落从正文继承蓝色 5. 段落由于其样式定义而变为红色。我想我明白了!
【解决方案2】:

这里发生的情况是样式background-color:grey 应用于HTML 元素,如下所示:

html {
  background-color: grey;
}

body {
  background-color: blue;
}

p {
  background-color: red;
}
<p>Lorem ipsum dolor sit amet, consectetur adipisicing elit. Vero soluta enim aut! Nihil nam obcaecati, fugiat sint sit libero voluptate eos incidunt odio neque cum, dignissimos aperiam, magnam nisi debitis.</p>

这与body的蓝色样式重叠,可以用下面的sn-p来解释:

* {
  background-color: grey;
}

html {
 background-color: initial;
}

body {
  background-color: blue;
}

p {
  background-color: red;
}
    <p>Lorem ipsum dolor sit amet, consectetur adipisicing elit. Vero soluta enim aut! Nihil nam obcaecati, fugiat sint sit libero voluptate eos incidunt odio neque cum, dignissimos aperiam, magnam nisi debitis.</p>

在第二个 sn-p 中,我们将 html 元素的颜色更改重置为 initial 值。这显示了body 的蓝色背景色,因此证明主体的蓝色只是被html 元素所掩盖。

这也是一个屏幕截图(chrome devtools 使用 your 示例)证明蓝色已应用于body 元素,但只是被html 元素掩盖:

【讨论】:

  • 谢谢你的回答威廉。但是没有初始值,body也是蓝色的,而html是灰色的(*选择器样式中的值),所以我的假设是首先将*选择器中的样式应用于每个元素,然后再应用其他样式.
猜你喜欢
  • 2012-07-10
  • 1970-01-01
  • 2015-03-03
  • 2010-12-10
  • 2011-11-01
  • 1970-01-01
  • 2011-05-03
相关资源
最近更新 更多