ふと気になった挙動など。2023/10/09 時点。
:is() で列挙したセレクターは、:is() を記述した場所に機械的に置き換えられるわけではなく、「そのセレクターにマッチする要素」というクラスに変換された上で置き換えられる。
#ROOT > :is(DIV > SPAN, SPAN > DIV){ color:red; }
以下のように解釈されることを期待している。
#ROOT > DIV > SPAN,
#ROOT > SPAN > DIV{ color:red; }
<DIV id="ROOT">
<DIV>
<DIV>#ROOT > DIV > DIV</DIV>
</DIV>
<DIV>
<SPAN>#ROOT > DIV > SPAN</SPAN>
</DIV>
<SPAN>
<DIV>#ROOT > SPAN > DIV</DIV>
</SPAN>
<SPAN>
<SPAN>#ROOT > SPAN > SPAN</SPAN>
</SPAN>
</DIV>
期待に反し、以下のようになる。
:is(DIV > SPAN, SPAN > DIV)
が、まず「 DIV の子である SPAN 、または SPAN の子である DIV 」を指すクラスに置き換えられ、しかるのちに「 #ROOT の子のうち、そのクラスに合致する要素」と解釈されるためだ。