【CSS】主流 UI 库都在用的逻辑伪类选择器 not、where、is、has
:not
<ul class="css-selectors selector-not">
<li>1</li>
<li>2</li>
<li>3</li>
</ul>
.selector-not {
li:not(:first-child) {
border: 1px solid red;
}
}
- 1
- 2
- 3
li:not(:first-child)
选择除:first-child
第一个 li 以外的其他 li 元素。
:not 优先级
:not 兼容性
can i use,还是可以放心使用滴~
:is
:is demo
<ul class="css-selectors css-selectors-is">
<li>
<div>div</div>
<p>p</p>
</li>
<li>
<div>div</div>
<span>span</span>
</li>
<li>
<div>div</div>
<i> tag i </i>
</li>
<li>
<section>
<i>deep level i</i>
</section>
</li>
</ul>
若将
li
内的div,span,p,i
元素的颜色设置颜色时,之前写法
.css-selectors-is > li > div,
.css-selectors-is > li > span,
.css-selectors-is > li > p,
.css-selectors-is > li > i {
background-color: #0a9caf;
}
使用
:is
之后:
.css-selectors-is > li > :is(div, span, p, i) {
background-color: #0a9caf;
}
-
div
p
-
divspan
-
divtag i
-
deep level i
ol ol ul, ol ul ul, ol menu ul, ol dir ul,
ol ol menu, ol ul menu, ol menu menu, ol dir menu,
ol ol dir, ol ul dir, ol menu dir, ol dir dir,
ul ol ul, ul ul ul, ul menu ul, ul dir ul,
ul ol menu, ul ul menu, ul menu menu, ul dir menu,
ul ol dir, ul ul dir, ul menu dir, ul dir dir,
menu ol ul, menu ul ul, menu menu ul, menu dir ul,
menu ol menu, menu ul menu, menu menu menu, menu dir menu,
menu ol dir, menu ul dir, menu menu dir, menu dir dir,
dir ol ul, dir ul ul, dir menu ul, dir dir ul,
dir ol menu, dir ul menu, dir menu menu, dir dir menu,
dir ol dir, dir ul dir, dir menu dir, dir dir dir {
list-style-type: square;
}
:is(ol, ul, menu, dir) :is(ol, ul, menu, dir) :is(ul, menu, dir) {
list-style-type: square;
}
:is() 不能选择伪元素
:is 的优先级
<ul class="css-selectors css-selectors-is-priority">
<li>
<div id="is-priority-id" class="is-priority-class">id div</div>
</li>
<li>
<div class="is-priority-class">class div</div>
</li>
</ul>
.css-selectors-is-priority {
> li {
& > :is(div, #is-priority-id) {
background-color: #0a9caf;
}
& > .is-priority-class {
background-color: red;
}
}
}
-
id div
-
class div
:is 兼容性
:where
<ul class="css-selectors css-selectors-where">
<li>
<div id="css-selectors-where-id">where</div>
</li>
</ul>
// where 的优先级总为 0,其他与 is 一致
.css-selectors-where {
li :is(div) {
color: red;
}
li :where(#css-selectors-where-id) {
color: green;
}
}
-
where
:has
<ul class="css-selectors css-selectors-has">
<li>
<div>
<p>has - p</p>
</div>
</li>
<li>
<div>
<a>
<span>has - span</span>
</a>
</div>
</li>
<li>
<div>
<span>
<i>has - i</i>
</span>
</div>
</li>
</ul>
/*找自己*/
.css-selectors-has li:has(>div >p) {
border: 1px solid red;
}
/*找前面的兄弟*/
.css-selectors-has li:has(+ li >div >span >i) {
border: 1px solid green;
}
-
has - p
-
has - i
:has
选择的是参数匹配的宿主元素而不是参数本身
:has 兼容性
can i use,早用早享受~
本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来源 kshao-blog-前端知识记录!
评论