为什么:不是(p)看似选择<p>标签?

Vin*_*ias 21 html css css-selectors

我的HTML是这样的:

<!DOCTYPE html>
<html lang="en">
<link rel="stylesheet" href="stylesheet.css">
<head>
</head>
<body>
<p>hiya</p>
<h1>this is h1</h1>
<h2>this is h2</h2>
</body>
</html>
Run Code Online (Sandbox Code Playgroud)

我的stylsheet.css是这样的:

:not(p)
{
color:#ff0000;
} 
Run Code Online (Sandbox Code Playgroud)

然而一切都是红色的,包括<p>.我尝试过Firefox 20,Internet Explorer 10和Chrome.它似乎没有比这更基本,但我无法弄清楚为什么这不起作用(防止<p>变红,即).任何有关这方面的帮助将非常感激.

Nie*_*sol 24

:not(p)比赛body.

默认color值为inherit.

p 没有风格设置.

p因此body,它继承了它的颜色,它是红色的.

解决方案:明确定义您想要变为红色的内容,或明确设置不同的颜色p(即不使用:not),或使用:not(body):not(p)

  • 那么为什么不是`身体:不是(p)`?在我看来会跳过`html`和`body`. (8认同)
  • 一个很好的答案,但是在"默认的'颜色'值是`继承`'中有一个术语不准确."`color`的初始值"取决于规范的用户代理,并且通常没有浏览器默认值,除了`body`.这意味着在这种情况下,`body`的`p`子句继承了值`red` - 但是因为这些元素在任何样式表中都没有设置`color`. (3认同)

Kri*_*hna 7

这看起来是因为您没有为p标签定义特定样式.所以:不(p)甚至适用于身体元素和继承.