Simulation :hover sur parent

On ne simule qu'un changement de la couleur de fond de la <tr> et éventuellement la bordure, mais pas plus.

Le rendu

Colonne #1 Colonne #2 Colonne #3 Colonne #4
Col #1 Lig #1

:hover

Col #3 Lig #1 Col #4 Lig #1

:hover

Col #2 Lig #2 Col #3 Lig #2 Col #4 Lig #2
Col #1 Lig #3 Col #2 Lig #3

:hover

Col #4 Lig #3
Col #1 Lig #4 Col #2 Lig #4

:hover

Col #4 Lig #4

Quelques explications

Pour ne cibler que quelques éléments de la <table> nous utilisons, pour l'exemple, la structure HTML simplifiée suivante  :

<td>
  <p>:hover</p>
</td>

On va jouer avec le pseudo-élément :before de l'élément qui, survolé, doit déclencher le changement de couleur de fond de sa <tr> parent.

Ce pseudo-élément est déclaré en position:absolute et sera donc positionné par rapport à son premier parent lui même positionné, le grand classique.

Il nous faut donc déclarer les <tr> en position:relative pour qu'elles servent de référent, seulement voilà seul FireFox, à ce jour, reconnaît ce positionnement sur des éléments en display:table-xxxx et ce en dépit de la recommandation, voir Choosing a positioning scheme: 'position' property.

The effect of 'position:relative' on table-row-group, table-header-group, table-footer-group, table-row, table-column-group, table-column, table-cell, and table-caption elements is undefined.

Il nous faut donc déclarer les <tr> en display:block, ou display:flex, ou encore changer la structure HTML mais le principe reste le même.

Le pseudo-élément :before est placé en arrière plan avec un z-index:-1 et fait la dimension du parent positionné. Il suffit de changer sa couleur de fond sur le :hover du parent direct et le tour est joué.

La <table> ne doit pas avoir de background-color.

Comme il n'y a plus de relation dimensionnelle entre les enfants des <tr>, il faut définir la largeur de ceux-ci.

Voir la discussion sur Developpez.com