J'ai besoin d'ajouter des séparateurs entre les éléments de navigation. Les séparateurs sont des images.
Ma structure HTML est comme: ol > li > a > img
.
J'arrive ici à deux solutions possibles:
- Pour ajouter plus de
li
balises pour la séparation (boo!), - Inclure le séparateur dans l'image de chaque élément (c'est mieux, mais cela permet à l'utilisateur de cliquer sur, par exemple, "Accueil", mais d'accéder à "Services", car ils sont l'un derrière l'autre et l'utilisateur peut accidentellement cliquer sur le séparateur qui appartient aux "Services");
Que faire?
css
navigation
usability
separator
daGrevis
la source
la source
Réponses:
Utilisez simplement l'image de séparation comme image d'arrière-plan sur le
li
.Pour qu'elle n'apparaisse qu'entre les éléments de la liste, positionnez l'image à gauche du
li
, mais pas sur le premier.Par exemple:
Ce CSS ajoute l'image à chaque élément de liste qui suit un autre élément de liste - en d'autres termes tous sauf le premier.
NB. Soyez conscient du sélecteur adjacent (li + li) ne fonctionne pas dans IE6, vous devrez donc simplement ajouter l'image d'arrière-plan au li conventionnel (avec une feuille de style conditionnelle) et peut-être appliquer une marge négative à l'un des bords.
la source
:before
pseudo-sélecteur l'empêche d'apparaître après le dernier élément.border-left
pour dessiner une ligne verticale entre les éléments.S'il n'y a pas un besoin pressant d'utiliser des images pour les séparateurs, vous pouvez le faire avec du CSS pur.
Cela place une barre entre chaque élément de la liste, tout comme l'image de la question d'origine décrite. Mais puisque nous utilisons les sélecteurs adjacents , cela ne place pas la barre avant le premier élément. Et puisque nous utilisons le
:before
pseudo-sélecteur, il n'en met pas un à la fin.la source
Vous pouvez ajouter un
li
élément où vous souhaitez ajouter un séparateurEn CSS, vous pouvez ajouter le code suivant.
Cela augmentera votre vitesse d'exécution car il ne chargera aucune image. testez-le simplement .. :)
la source
L'autre solution est OK, mais il n'est pas nécessaire d'ajouter un séparateur à la toute dernière si vous utilisez : after ou au tout début si vous utilisez : before .
ALORS:
cas: après
cas: avant
la source
Pour obtenir le séparateur centré verticalement par rapport au texte du menu,
la source
Ajoutez le séparateur à l'
li
arrière - plan et assurez-vous que le lien ne se développe pas pour couvrir le séparateur, ce qui signifie que le séparateur ne sera pas cliquable.la source
Pour ceux qui utilisent Sass , j'ai écrit un mixin à cet effet:
Exemple:
Ce qui vous donnera ceci:
la source
Je pense que la meilleure solution pour cela, c'est ce que j'utilise, et c'est une frontière css naturelle:
Vous devrez peut-être prendre soin du rembourrage comme:
Enfin, si vous ne voulez pas que le dernier li ait cette frontière séparée, donnez-lui le dernier enfant "none" dans "border-right" comme ceci:
Bonne chance :)
la source
Mettez-le en arrière-plan sur l'élément de liste:
Ensuite, je recommande un balisage différent pour l'accessibilité:
plutôt que d'incorporer les images en ligne, mettez du texte sous forme de texte, entourez chacune d'elles avec une étendue, appliquez l'image en arrière-plan le, puis masquez le texte avec affichage: aucun - ceci donne beaucoup plus de flexibilité de style, et vous permet d'utiliser le carrelage avec une image bg de 1px de large, économise de la bande passante et vous pouvez l'intégrer dans un sprite CSS, ce qui enregistre les appels HTTP:
HTML:
CSS:
MISE À JOUR OK, je vois que d'autres ont obtenu une réponse similaire avant moi - et je note que John inclut également un moyen pour 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 vient après un autre li.
la source