Je dois ajouter des séparateurs entre les éléments de navigation. Les séparateurs sont des images.
Ma structure HTML ressemble à ceci: ol> li> a> img.
J'en viens à deux solutions possibles:
Que faire?
Utilisez simplement l’image de séparation en tant qu’image d’arrière-plan sur le li
.
Pour qu'il n'apparaisse qu'entre les éléments de la liste, positionnez l'image à gauche du li
, mais pas sur le premier.
Par exemple:
#nav li + li {
background:url('seperator.gif') no-repeat top left;
padding-left: 10px
}
Cette CSS ajoute l'image à chaque élément de la liste qui suit un autre élément de la liste - autrement dit, tous sauf le premier.
NB Sachez que le sélecteur adjacent (li + li) ne fonctionne pas dans IE6, vous devrez simplement ajouter l'image de fond à la li conventionnelle (avec une feuille de style conditionnelle) et éventuellement appliquer une marge négative. à l'un des bords.
S'il n'est pas absolument nécessaire d'utiliser des images pour les séparateurs, vous pouvez le faire avec du CSS pur.
nav li + li:before{
content: " | ";
padding: 0 10px;
}
Cela met une barre entre chaque élément de la liste, tout comme l'image dans la question d'origine décrite. Mais comme nous utilisons le sélecteurs adjacents , la barre n'est pas placée avant le premier élément. Et puisque nous utilisons le :before
pseudo sélecteur, il n'en met pas un à la fin.
Les autres solutions sont acceptables, mais il n’est pas nécessaire d’ajouter un séparateur à la toute fin si vous utilisez : after ou au tout début si vous utilisez : before.
ALORS:
cas: après
.link:after {
content: '|';
padding: 0 1rem;
}
.link:last-child:after {
content: '';
}
cas: avant
.link:before {
content: '|';
padding: 0 1rem;
}
.link:first-child:before {
content: '';
}
Pour centrer le séparateur verticalement par rapport au texte du menu,
.menustyle li + li:before
{
content: " | ";
padding: 0;
position: relative;
top: -2px;
}
Pour ceux qui utilisent Sass , j'ai écrit un mixin à cette fin:
@mixin addSeparator($element, $separator, $padding) {
#{$element+'+'+$element}:before {
content: $separator;
padding: 0 $padding;
}
}
Exemple:
@include addSeparator('li', '|', 1em);
Ce qui vous donnera ceci:
li+li:before {
content: "|";
padding: 0 1em;
}
Vous pouvez ajouter un élément li
où vous souhaitez ajouter un diviseur
<ul>
<li> your content </li>
<li class="divider-vertical-second-menu"></li>
<li> NExt content </li>
<li class="divider-vertical-second-menu"></li>
<li> last item </li>
</ul>
En CSS, vous pouvez ajouter le code suivant.
.divider-vertical-second-menu{
height: 40px;
width: 1px;
margin: 0 5px;
overflow: hidden;
background-color: #DDD;
border-right: 2px solid #FFF;
}
Cela augmentera votre vitesse d'exécution car cela ne chargera aucune image. juste le tester .. :)
Ajoutez le séparateur à l'arrière-plan li
et assurez-vous que le lien ne se développe pas pour couvrir le séparateur, ce qui signifie que le séparateur ne pourra pas être cliqué.
Placez-le en tant qu'arrière-plan sur l'élément de liste:
<ul id="nav">
<li><a><img /></a></li>
...
<li><a><img /></a></li>
</ul>
#nav li{background: url(/images/separator.gif) no-repeat left; padding-left:20px;}
/* left padding creates a gap between links */
Ensuite, je recommande un balisage différent pour l'accessibilité:
Plutôt que d’incorporer les images en ligne, insérez le texte sous forme de texte, entourez-les par une étendue, appliquez-les en tant qu’arrière-plan, puis masquez le texte avec l’affichage: aucun - cela donne beaucoup plus de souplesse de style. , et vous permet d'utiliser le pavage avec une image bg large de 1 px, enregistre la bande passante et vous pouvez l'intégrer dans un sprite CSS, ce qui enregistre les appels HTTP:
HTML:
<ul id="nav">
<li><a><span>link text</span></a></li>
...
<li><a><span>link text</span></a></li>
</ul
CSS:
#nav li{background: url(/images/separator.gif) no-repeat left; padding-left:20px;}
#nav a{background: url(/images/nav-bg.gif) repeat-x;}
#nav a span{display:none;}
UPDATE OK, je vois que d'autres personnes ont obtenu une réponse similaire avant moi - et je constate que John inclut également un moyen d'empêcher le séparateur d'apparaître avant le premier élément , en utilisant le sélecteur li + li - ce qui signifie que tout li venant après un autre li.
Je crois que la meilleure solution pour cela est ce que j’utilise, c’est une frontière naturelle en CSS:
border-right:1px solid;
Vous pourriez avoir besoin de vous occuper de rembourrage comme:
padding-left: 5px;
padding-right: 5px;
Enfin, si vous ne voulez pas que la dernière li ait cette frontière séparée, donnez-lui son dernier "aucun" dans "border-right" comme ceci:
li:last-child{
border-right:none;
}
Bonne chance :)