has选择器基本用法

等风来 / 2023-08-14 / 原文

1. 选择包含特定子元素的元素

li:has(p, #h3)  li:has(p.cls)  a:has(> img)  .item:has(.thumb:hover)

2. 选择紧邻或包含特定后置兄弟元素的元素

label:has(+ input:invalid)::before   h1:has(+ p)   label:has(+input:required)

2.1 has配合兄弟选择器,实际上是实现了前置兄弟选择器

+ 和 ~ 都是后置选择器,只能选择后置兄弟

has(~.sel)  含义是后置兄弟有.sel的元素,也就是 .sel 之前的兄弟元素

2.2 ~和has同时实现,实现范围选择器

.select~span:has(~.select)  //选择 .select 之后,下一个.select之前的元素

3. has可配合not选择器使用,实现反选

li:not(:has(p, span))   //不包含p或span的li
.date:not(:has(.select~.select))  //不包含两个.select的.date元素
.date:not(:has(.select+.select))  //不包含两个紧邻.select的.date元素

4. has可使用数量和位置选择器

p:has(>br:first-child)   //选择首子元素为br的p
p:has(>br:only-child)   //选择仅有子元素br的p