Mon objectif est d'appliquer le CSS sur le dernier li
, mais il ne le fait pas.
#refundReasonMenu #nav li:last-child {
border-bottom: 1px solid #b5b5b5;
}
<div id="refundReasonMenu">
<ul id="nav">
<li><a id="abc" href="#">abcde</a></li>
<li><a id="def" href="#">xyz</a></li>
</ul>
</div>
Comment puis-je sélectionner uniquement le dernier enfant?
css
css-selectors
Miral
la source
la source
:last-child
plus. Et ce n'est pas si curieux.:first-child
est une pseudo-classe CSS2,:last-child
une pseudo-classe CSS3.:last-child
.Une autre solution qui pourrait fonctionner pour vous est d'inverser la relation. Vous définiriez donc la bordure de tous les éléments de la liste. Vous utiliseriez alors first-child pour éliminer la bordure du premier élément. Le premier enfant est pris en charge statiquement dans tous les navigateurs (ce qui signifie qu'il ne peut pas être ajouté dynamiquement via un autre code, mais le premier enfant est un sélecteur CSS2, alors que le dernier enfant a été ajouté dans la spécification CSS3)
Remarque: cela ne fonctionne comme vous le souhaitez que si vous n'avez que 2 éléments dans la liste comme votre exemple. Tout 3e élément et sur aura des bordures appliquées à eux.
la source
Si vous pensez que vous pouvez utiliser Javascript, alors depuis le support de jQuery
last-child
, vous pouvez utiliser la méthode css de jQuery et la bonne chose qu'elle supportera presque tous les navigateursExemple de code:
Vous pouvez trouver plus d'informations ici: http://api.jquery.com/css/#css2
la source
$("#nav li:last-child").addClass('last-child')
pour que vous puissiez garder votre style dans vos feuilles de style.div:last-child
etdiv.last-child
. Il semble qu'il considère la:last-child
syntaxe comme invalide et toute classe avec ce pseudo-sélecteur ne sera pas appliquée.Si le nombre d'éléments de la liste est fixe, vous pouvez utiliser le sélecteur adjacent, par exemple si vous n'avez que trois
<li>
éléments, vous pouvez sélectionner le dernier<li>
avec:la source
li + #nav li
sélectionne l'li
intérieur#nav
qui vient aprèsli
. Votre sélecteur devrait simplement être#nav li + li + li
.Si vous avez souvent besoin de sélecteurs CSS3, vous pouvez toujours utiliser la bibliothèque selectivizr sur votre site:
http://selectivizr.com/
C'est un script JS qui ajoute la prise en charge de presque tous les sélecteurs CSS3 aux navigateurs qui ne les prendraient pas autrement en charge.
Jetez-le dans votre
<head>
tag avec une condition IE:la source
La pseudo-classe last-child ne fonctionne pas dans IE
Compatibilité CSS et Internet Explorer
Sélecteurs CSS IE7: comment ils échouent
la source
Au lieu d'utiliser une classe, vous pouvez utiliser une liste détaillée, en définissant les éléments enfants dt pour avoir un style et les éléments enfants dd pour en avoir un autre. Votre exemple deviendrait:
html:
Aucune des deux méthodes n'est meilleure que l'autre et c'est simplement une question de préférence personnelle.
la source
Une autre façon de le faire consiste à utiliser le sélecteur de dernier enfant dans jQuery, puis à utiliser la méthode .css (). Soyez fatigué car certaines personnes sont encore à l'âge de pierre en utilisant des navigateurs JavaScript désactivés.
la source
Pourquoi ne pas appliquer la bordure au bas de l'UL?
la source
padding-bottom
sur l'<ul>
élément oumargin-bottom
sur le dernier<li>
élément, cela n'aura pas le placement souhaité de droite sous le dernier<li>
élément. Sinon, c'est une bonne solution.Si vous faites flotter les éléments, vous pouvez inverser l'ordre
c'est
float: right;
à dire au lieu defloat: left;
Et puis utilisez cette méthode pour sélectionner le premier enfant d'une classe.
Cela applique en fait la classe à la LAST instance uniquement parce qu'elle est maintenant dans l'ordre inverse.
Voici un exemple de travail pour vous:
la source
C'est difficile à dire sans voir le reste de votre CSS, mais essayez d'ajouter
!important
devant la couleur de la bordure, pour en faire comme ceci:la source