Ну, це питання задавали багато разів раніше, і коротка типова відповідь така: Це не може зробити чистий CSS. Це в назві: Каскадні таблиці стилів підтримують лише стилі в каскадному напрямку, а не вгору.
Але в більшості обставин, коли бажається цього ефекту, як у наведеному прикладі, все ж є можливість використовувати ці каскадні характеристики для досягнення бажаного ефекту. Розглянемо цю псевдорозмітку:
<parent>
<sibling></sibling>
<child></child>
</parent>
Хитрість полягає в тому, щоб надати братам такого ж розміру і положення, як батьківський, і створити стиль рідного брата замість батьківського. Це виглядатиме так, як батьківський стиль!
Тепер, як стилізувати братів і сестер?
Коли дитина лунає, батько теж є, але рідний брат - ні. Те ж саме стосується і побратимів. Це завершується трьома можливими селекторними контурами CSS для стилізації братів та сестер:
parent sibling { }
parent sibling:hover { }
parent:hover sibling { }
Ці різні шляхи дозволяють отримати деякі приємні можливості. Наприклад, розв’язання цього фокусу на прикладі запитання приводить до цієї загадки :
div {position: relative}
div:hover {background: salmon}
div p:hover {background: white}
div p {padding-bottom: 26px}
div button {position: absolute; bottom: 0}
Очевидно, що в більшості випадків ця хитрість залежить від використання абсолютного позиціонування для надання синові такого ж розміру, як і батько, і все ж дозволяти дитині з'являтися у батьків.
Іноді для вибору конкретного елемента доводиться використовувати більш кваліфікований шлях вибору, як показано в цій скрипці, яка реалізує трюк кілька разів у меню дерева. Дуже приємно насправді.