Sélecteur CSS pour obtenir précédent frère [en double]

cette question a déjà une réponse ici:

est-il possible d'utiliser pur CSS(3) pour sélectionner un élément qui est un frère ou une sœur précédent d'un élément d'une classe particulière?

c'est à dire:

html:

<div id='element-to-find'></div>
<div id='box1'></div>
<!-- a bunch more DOM elements between here --->
<div id='box2'>
      <div id='inner-box'></div>
</div>

css:

#box1{ /*some styling*/ }
#box2{ /*some styling*/ }

#box2.active .....

maintenant, quand # box2 a la classe active je veux sélectionner et faire quelque chose du style de #element-to-find . Est-il de toute façon d'accomplir cette?

3
demandé sur Turnip 2013-05-09 02:11:09

2 réponses

sans en savoir plus sur vos sélecteurs, vous pourriez potentiellement utiliser le sélecteur CSS :not ().

div:not(#box1), div:not(#box2) {
    /*some style here*/
}

je suggérerais simplement de donner votre #element-to-find une classe aussi bien quand vous sélectionnez box2 et avoir un style prêt pour elle.

2
répondu ntgCleaner 2013-05-08 22:21:04

Il y a eu plusieurs propositions pour CSSWG dans www-style@w3.org liste de diffusion pour les précédentes-frère-combinator: mon seul (2012), un autre 1 , 2 (2013).

réponse commune de Tab Atkins est comme "nous avons déjà indicateur de sujet pour cela". Pour la sélection de descendants d'un frère ou d'une sœur précédent (qui serait trivial avec un combinateur de frères ou sœurs précédent, p.ex. .example - UL > LI ), il suggère d'utiliser :matches() comme pseudoclasse fonctionnelle, par exemple :matches(!UL + .example) > LI . L'indicateur de sujet et :matches() sont tous les deux à l'état d'ébauche et ne peuvent pas encore être utilisés dans le monde réel.

donc vous devriez ajouter une classe régulière à l'élément element-to-find ou (beaucoup moins souhaitable si votre classe active n'est pas ajoutée via JS) utilisez JavaScript pour émuler la fonctionnalité "précédent-sibling-combinator".

6
répondu Marat Tanalin 2013-05-08 22:38:12