Eh bien, cette question est posée plusieurs fois auparavant, et la réponse courte typique est: cela ne peut pas être fait par du CSS pur. C'est dans le nom: les feuilles de style en cascade ne prennent en charge que le style en cascade, pas vers le haut.
Mais dans la plupart des cas où cet effet est souhaité, comme dans l'exemple donné, il est toujours possible d'utiliser ces caractéristiques en cascade pour atteindre l'effet souhaité. Considérez ce pseudo balisage:
<parent>
<sibling></sibling>
<child></child>
</parent>
L'astuce consiste à donner au frère la même taille et à la même position que le parent et à styliser le frère au lieu du parent. Cela ressemblera au style du parent!
Maintenant, comment coiffer le frère?
Lorsque l'enfant est survolé, le parent l'est aussi, mais le frère ne l'est pas. Il en va de même pour le frère ou la sœur. Cela se termine par trois chemins de sélecteur CSS possibles pour styliser le frère:
parent sibling { }
parent sibling:hover { }
parent:hover sibling { }
Ces différents chemins offrent de belles possibilités. Par exemple, déchaîner cette astuce sur l'exemple de la question aboutit à ce violon :
div {position: relative}
div:hover {background: salmon}
div p:hover {background: white}
div p {padding-bottom: 26px}
div button {position: absolute; bottom: 0}

Évidemment, dans la plupart des cas, cette astuce dépend de l'utilisation du positionnement absolu pour donner au frère la même taille que le parent, et laisser toujours l'enfant apparaître dans le parent.
Parfois, il est nécessaire d'utiliser un chemin de sélecteur plus qualifié pour sélectionner un élément spécifique, comme le montre ce violon qui implémente l'astuce plusieurs fois dans un menu arborescent. Très bien vraiment.