有没有办法强制降低 CSS 的特异性?

Kit*_*aya 8 css css-selectors css-specificity

我有一个 CSS 模板,我想在某些 HTML 标记中使用最少量的属性,同时允许稍后根据需要通过类(而不是 ID)轻松自定义该标记。

<ul data-role = 'a'>
  <li>A</li>
  <li>B</li>
</ul>
Run Code Online (Sandbox Code Playgroud)
<style>
  [data-role="a"] { /* ... */ }
  [data-role="a"] > :first-of-type { /* ... */ }
  [data-role="a"] > :last-of-type { /* ... */ }
</style>
Run Code Online (Sandbox Code Playgroud)

问题是,由于 CSS 的特殊性,我面临着要么制作所有选择器类,要么强制对我的内容进行任何样式表修改都非常具体:

<style>
[data-role="a"] > li { } /* custom overriding CSS */
</style>
Run Code Online (Sandbox Code Playgroud)

与

<ul class = 'a'>
  <li class = 'a-top'>A</li>
  <li class = 'a-bottom'>B</li>
</ul>
Run Code Online (Sandbox Code Playgroud)
<style>
  a {/* */}
  a-top {/* */}
  a-bottom {/* */}
</style>
Run Code Online (Sandbox Code Playgroud)

有没有办法在不使用 的情况下强制获得特异性产量!important,例如假设:

@yield to classes {
  [data-role = "a"] { } 
  [data-role = "a"] > :first-of-type { }
  [data-role = "a"] > :last-of-type { }
  /* etc */
}
Run Code Online (Sandbox Code Playgroud)

或者

@specify('[data-role="a"] > :last-of-type' , 10) { ... }其中10是分配的最低内部特异性等。

或者我只是被迫到处使用类?

S. *_*sen 11

MDN 有一个有趣的提示可以帮助您在不使用的情况下摆脱困境!重要提示:使用选择器两次:

#myId#myId span { color: yellow; }
.myClass.myClass span { color: orange; }
Run Code Online (Sandbox Code Playgroud)

https://developer.mozilla.org/en-US/docs/Web/CSS/Specificity

最近,主要浏览器添加了对 :where() 伪类的支持。它可以更好地管理特异性。其中的选择器不会影响整个选择器的特殊性:

#myId#myId span { color: yellow; }
.myClass.myClass span { color: orange; }
Run Code Online (Sandbox Code Playgroud)
:where(aside.where, footer.where) a {
  color: orange;
}

footer a {
  color: blue;
}
Run Code Online (Sandbox Code Playgroud)

https://developer.mozilla.org/en-US/docs/Web/CSS/:哪里

进一步注意,根据一种称为 BEM(块、元素、修饰符)的方法,使用类(任何元素一个类)可能不是最糟糕的选择。

  • **:where()** 正是我正在寻找的。它将其中的所有内容都设置为特异性 0。这使得它非常适合覆盖浏览器默认值或逐渐将特异性降低到所需的级别。 (2认同)

sky*_*000 0

有没有办法在不使用 !important 的情况下强制获得特异性产量?...或者@specify('[data-role="a"] > :last-of-type' , 10) { ... }其中 10 是分配的最低内部特异性

不,那里没有。

不确定您还想从答案中寻找什么,因为您似乎了解特异性一般是如何工作的——仅使用您提供的小型 HTML,您就可以通过至少数十种方式编写涉及元素、类、属性等的规则。以获得您想要的造型。不过,如果您正在寻找一篇简单、写得好的关于特异性的文章,我总是发现这篇文章是最有用的:

https://css-tricks.com/species-on-css-specificity/(自 2010 年以来不断更新!)