この質問は、兄弟コンビネーターで:beforeまたは:after疑似要素をターゲットにできますか?の反対のようです。
あなたの場合、疑似要素に疑似クラスを適用することはできません。これは、疑似要素がオンになっている場合にのみスタイルを適用することを選択でき、:hover
その生成要素は選択できないことも意味します。代わりに、生成要素の疑似クラス状態に応じて、この生成要素がセレクターのサブジェクトである場合にのみ、疑似要素を選択できます。
また、前述のように、疑似要素はDOMの一部ではありません。したがって、上記の質問に対する私の回答(上記のリンクの説明)に示されているように、同じ生成要素内の実際の子に対して相対的な疑似要素に到達できない方法と同様に、次のようになります。
a[href^="http"] img ~ :after
同じ生成要素内の疑似要素に対して実際の要素を選択することはできません。
.foo:after > div
要約すると、次のセレクターが機能しない理由は次のとおりです。
.foo:after:hover > div
2つあります:
疑似要素は疑似クラス状態を持つことができないため、:after:hover
無効になります。
ここでのセレクターの主題はではありません.foo
がdiv
、なので、に:after
適用することはできません.foo
。したがって、疑似要素を別のセレクターに適用した後、セレクターのサブジェクトとして実際の要素を選択しようとしても意味がありません。
div
本当にonを表示する必要はなく.foo:hover
、別の子要素に表示する必要がある場合、JavaScriptを使用せずにこれを回避する唯一の方法は、その下に.foo
ある別の実際の要素をdiv
(後ではなく)作成することです。
<div class="foo">
<div></div>
<div>Stuff</div>
</div>
これは、以前の兄弟セレクターがないためです。代わりに使用できる隣接する兄弟セレクターは、次の兄弟:after >
を選択するためだけのものです。
.foo > div:first-child + div { display: none; }
.foo > div:first-child { /* rules */ }
.foo > div:first-child:hover + div { display: block; }