2010-09-07 5 views
162

si j'ai une étiquette d'en-tête <h1 class="hc-reform">title</h1>CSS élément suivant

h1.hc-reform{ 
    float:left; 
    font-size:30px; 
    color:#0e73bb; 
    font-weight:bold; 
    margin:10px 0px; 
} 

et après que j'ai un paragraphe <p>stuff here</p>

comment puis-je dire en utilisant CSS que chaque balise <p> qui suit le h1.hc-reform à utiliser: clear:both;

serait-ce:

h1.hc-reform > p{ 
    clear:both; 
} 

pour une raison qui ne fonctionne pas.

Répondre

330

Ceci est appelé le sélecteur adjacent sibling, et il est représenté par un signe plus ...

h1.hc-reform + p { 
    clear:both; 
} 

Note: ce n'est pas pris en charge dans IE6 ou plus.

+4

Ce serait seulement sélectionner 'p' qui vient juste après' h1.hc-reform'.Là encore, il pourrait être le seul sur lequel le 'clear: both' doit être appliqué pour que cela fonctionne car il efface simplement le flottant' h1', donc c'est toujours une réponse valide. – BoltClock

+3

+1 au canon le plus rapide! et pour le lien vers le w3c –

+0

(re votre commentaire supprimé) oui mais il ne sélectionnera * one * 'p'. – BoltClock

11

aucun > est un sélecteur d'enfant.

celui que vous voulez est +

alors essayez le soutien h1.hc-reform + p

navigateur n'est pas grand

8

Le > est un child selector. Donc, si votre HTML ressemble à ceci:

<h1 class="hc-reform"> 
    title 
    <p>stuff here</p> 
</h1> 

... alors c'est votre ticket.

Mais si votre HTML ressemble à ceci:

<h1 class="hc-reform"> 
    title 
</h1> 
<p>stuff here</p> 

Ensuite, vous voulez que le adjacent selector:

h1.hc-reform + p{ 
    clear:both; 
} 
+4

J'espère bien qu'il n'a pas imbriqué p à l'intérieur de h1 .. Aussi, adjacent sélectionne seulement le premier p. –

49

Vous pouvez utiliser le sibling selector~:

h1.hc-reform ~ p{ 
    clear:both; 
} 

Ce sélectionne tous les p éléments qui viennent un fter .hc-reform, pas seulement le premier.

+0

Les bogues IE dans le premier lien sont des trucs de cas de bord obscur, ce qui est probablement pourquoi quirksmode les ignore. –

1

Pas exactement. Le h1.hc-reform > p signifie "n'importe quel p exactement un niveau inférieur à h1.hc-reform". Ce que vous voulez est h1.hc-reform + p. Bien sûr, cela pourrait causer des problèmes dans les anciennes versions d'Internet Explorer; Si vous voulez rendre la page compatible avec les IE plus anciens, vous devrez soit ajouter manuellement une classe aux paragraphes, soit utiliser du JavaScript (dans jQuery, par exemple, vous pouvez faire quelque chose comme $('h1.hc-reform').next('p').addClass('first-paragraph')).

Plus d'info: http://www.w3.org/TR/CSS2/selector.html ou http://css-tricks.com/child-and-sibling-selectors/

Questions connexes