html - CSS :not pseudo-class applying broadly and not targeting specific element

标签 html css css-selectors pseudo-class

我正在了解 :not() 伪类,但它没有按预期工作。

我想将除 .mind 之外的所有文本都涂成红色。出于某种原因,这并不能阻止 .mind 元素变为红色。

:not(.mind) {
  color: red
}
<div class='parent'>
  <div class='child'>One</div>
  <div class='child'>Two</div>
  <div class='child'>Three</div>
  <div class='child'>One</div>
  <div class='child'>Two</div>
  <div class='child'>Three</div>
  <div class='child'>One</div>
  <div class='mind'>mind</div>
  <div class='child'>Three</div>
  <div class='child'>
    <p>First paragraph</p>
  </div>
</div>

最佳答案

记住这一点:

:not() 等价于*:not()

:not() 伪类没有选择器前缀时,隐含了一个通用选择器:

6.2. Universal selector

If a universal selector represented by * (i.e. without a namespace prefix) is not the only component of a sequence of simple selectors selectors or is immediately followed by a pseudo-element, then the * may be omitted and the universal selector's presence implied.

因此,你的规则是:

:not(.mind) {
  color: red
}

... 表示将红色应用到所有元素,但类 mind 的元素除外。

好的,除了在这种情况下,the color property is inheritable ,所以即使红色没有应用到 .mind 元素,它仍然通过从 .parent 元素继承来获得红色。

这是浏览器正在做的事情:

enter image description here

测试此行为的快速方法是使用不可继承的 border 属性。

在下面的示例中,使用您的选择器,您会注意到边框没有应用到 .mind,并且您的选择器按您预期的方式工作:

:not(.mind) {
  color: red;
  border-bottom: 1px dashed black;
}
<div class='parent'>
  <div class='child'>One</div>
  <div class='child'>Two</div>
  <div class='child'>Three</div>
  <div class='child'>One</div>
  <div class='child'>Two</div>
  <div class='child'>Three</div>
  <div class='child'>One</div>
  <div class='mind'>mind</div>
  <div class='child'>Three</div>
  <div class='child'>
    <p>First paragraph</p>
  </div>
</div>

为了您的特定目标:

I want to color all text red except for .mind.

使用更具体的选择器。

.parent > :not(.mind) {
  color: red;
}

.parent > :not(.mind) {
  color: red;
}
<div class='parent'>
  <div class='child'>One</div>
  <div class='child'>Two</div>
  <div class='child'>Three</div>
  <div class='child'>One</div>
  <div class='child'>Two</div>
  <div class='child'>Three</div>
  <div class='child'>One</div>
  <div class='mind'>mind</div>
  <div class='child'>Three</div>
  <div class='child'>
    <p>First paragraph</p>
  </div>
</div>

这也行:

div.child:not(.mind) {
  color: red;
}

div.child:not(.mind) {
  color: red;
}
<div class='parent'>
  <div class='child'>One</div>
  <div class='child'>Two</div>
  <div class='child'>Three</div>
  <div class='child'>One</div>
  <div class='child'>Two</div>
  <div class='child'>Three</div>
  <div class='child'>One</div>
  <div class='mind'>mind</div>
  <div class='child'>Three</div>
  <div class='child'>
    <p>First paragraph</p>
  </div>
</div>

关于html - CSS :not pseudo-class applying broadly and not targeting specific element,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41604369/

相关文章:

javascript - CSS - 将固定宽度更改为计算宽度

javascript - 如何使用 document.querySelector 来选择其中有空格的此类名称?

javascript - 滚动到顶部动画不流畅

html - 按钮显示问题

jquery - CSS 语音气泡 : How to update the tip position based on where the bubble is

包含 5 个具有相同类名的 ul 的无序列表的 css 样式,对每个应用不同的样式

css - 是否有用于包含特定文本的元素的 CSS 选择器?

html - XQuery 和空的 HTML 标签

javascript - 替换按钮文本 onclick JS

c# - 正则表达式从 HTML 内容中获取 href 和 src?