为什么<p>元素是绿色的?

Kev*_*ede 31 html css css-selectors

我正在从Mozilla页面查看选择器的这个 CSS示例:not().

例子是:

p:not(.classy) { color: red; }
:not(p) { color: green; }
Run Code Online (Sandbox Code Playgroud)
<p>Irgendein Text.</p>
<p class="classy">Irgendein anderer Text.</p>
<span>Noch mehr Text<span>
Run Code Online (Sandbox Code Playgroud)

我完全理解的是:

  • 我明白为什么第一个p元素是红色的,这是因为它是一个p元素而且没有类'classy'.
  • 我也明白为什么span元素是绿色的,因为它是由它选择的:not(p),它不是一个p元素

但为什么第二个p元素是绿色的?第一个选择器不会选择它,因为它是p没有类的元素classy.但它不会被第二个选中,因为它是一个p元素.那为什么它是绿色的?

Que*_*tin 64

第二个p是不:not(.classy)那么它是不是 color: red.这意味着它仍然具有默认颜色,即color: inherit.

body元素是:not(p)color: green.

p因此,第二个从body元素继承绿色.

浏览器中的开发人员工具会告诉您:

显示应用于第二段的CSS规则的开发人员工具,如上所述

  • 我应该补充说,任何即将宣称:not()"要求"类型或类选择器工作的人都是错误的,因为如图所示:not()的工作不合格 - 由于其他因素导致结果变得违反直觉玩,比如在这种情况下的继承.并非所有内容都归结为与所讨论的元素匹配的选择器,因为选择器可能很好地匹配其他元素并应用影响所讨论元素布局的样式. (3认同)