À l'heure actuelle, il n'existe pas de méthode CSS permettant de trouver un élément qui est ensuite suivi d'un autre élément spécifique.
Bientôt, il y aura peut-être une pseudo-classe relationnelle CSS. :has()
qui rendra possible ce que vous voulez. Ceci est actuellement dans le Sélecteurs CSS Niveau 4 Draft et il est peu probable qu'il soit déployé sur tous les navigateurs dans un avenir proche.
Une démo est disponible ci-dessous, mais ne vous attendez pas à ce qu'elle fonctionne tant que la version préliminaire de Selectors 4 n'est pas au moins en version de travail.
Gardez un œil sur Peut-on utiliser pour voir quand il sera disponible.
ul li:has(+ .hidden:last-child),
ul li:last-child:not(.hidden) {
background: red;
}
<ul>
<li>
<button>1</button>
</li>
<li>
<button>2</button>
</li>
<li class="hidden">
<button>3</button>
</li>
</ul>
:has()
est cependant disponible dans jQuery, voici donc une alternative jQuery
Plus d'informations ici dans les documents officiels de jQuery.
$('ul li:has(+ .hidden:last-child), ul li:not(.hidden):last-child').css('background', 'red');
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<ul>
<li>
<button>1</button>
</li>
<li>
<button>2</button>
</li>
<li class="hidden">
<button>3</button>
</li>
</ul>