SPIP-Contrib

SPIP-Contrib

عربي | Deutsch | English | Español | français | italiano | Nederlands

288 Plugins, 197 contribs sur SPIP-Zone, 190 visiteurs en ce moment

Accueil > Navigation > Menus réactifs > Menu dépliant Jquery > Menu dépliant (liste, CSS et jquery)

Menu dépliant (liste, CSS et jquery)

9 avril 2007 – par cam.lafit – 67 commentaires

18 votes

Un menu déroulant / dépliant exploitant jquery, css et les listes (ul, li).

But

À ceux qui me diront : « Mais pourquoi une éniéme contrib sur les menus déroulant ? », je répondrais : « Parce que ».

Plus sérieusement, il se trouve que les contrib (à mon sens) n’exploitent pas jusqu’au bout les listes, ni jquery. Jquery est maintenant intégré dans SPIP, ce qui offre pas mal de petits agréments concernant l’exploitation de javascript.

Références

Je vous invite à lire, dans un premier temps, l’ensemble des travaux listés dans vide et Menus réactifs.

Puis pour les tenaces :
-  http://be.twixt.us/jquery/treeViewH...
-  http://jquery.bassistance.de/treeview/

Contraintes de travail

Parmi les contraintes que je me suis imposées, il y a :
-  avoir un rendu minimal acceptable sur l’ensemble des navigateurs
-  être exploitable dans le maximum de contexte (navigation, plan de site, ...)
-  n’utiliser que jquery (pas d’import de script extérieur), (code non intrusif)
-  n’utiliser que des liste (ul,li) mais pas de div ou a

Conséquence

Parmi les effets de bords désagréables, la version initiale n’est pas compatible avec Internet Explorer. Entre autre du fait que ce navigateur ne gére pas l’évènement click sur les listes.
Toutefois un petit ajout, permet de remédier à ce détail. Allez voir en bas de page.

Se faire une idée

Il parait que des images parlent mieux que des mots. Les captures d’écrans ont été réalisées sous Opéra 9.1 (window XP), les rendus sont sensiblement les mêmes sous Firefox 2.

Menu deplié (sans js)
Menu lorque javascript a été desactivé
Menu plié
Capture présentant le menu à son chargement lorsque le javascript est actif.
Menu actif
Capture présentant le menu déplié suite à un certains nombre de click

Un autre exemple, exploitant l’attribut #EXPOSE et une autre feuille de style

Version de base
Version témoin
Version triangle
Seule la feuille de style a été modifiée
Version #EXPOSE
Dans le cas d’une intégration dans un squelette article

Squelette

Le squelette reste simple et peu innovant. Il se base énormément sur les autres contributions.

Les éléments à noter sont :
-  l’identifiant #arborescence, pour éviter de casser les autres listes présentes sur votre page.
-  la classe noeud, qui indique l’existence d’éléments fils.
-  la classe feuille, qui indique un élément terminal.

Dans le cadre d’une intégration comme menu de navigation,vous trouverez :
-  #EXPOSE afin de mettre en valeur l’article/rubrique consulté(e)
-  #SET{rub,(#ENV{cacher_article}|?{6666,#ID_RUBRIQUE})} , cette affectation permet de cacher les articles de l’arborescence si une variable cacher_article=1 est transmise via INCLURE.

Styles CSS

Nous pouvons maintenant mettre tout ceci en page. Le code est commenté pour restituer l’utilisation des différentes mises en page. Vous constaterez la présence de la classe .plier qui correspondra à l’action plier qu’effectuera le script. Par défaut un navigateur déplie les listes, c’est pourquoi vous ne trouverez pas de classe .deplier.

Script

Bon ce n’est pas tout ça, mais j’ai promis un menu dépliant. Dans un premier temps, il faut penser à mettre dans votre le <head> de votre squelette ceci :

#INSERT_HEAD

ou bien

<INCLURE{fond=inc-head}>

C’est ce qui permet d’accéder aux fonctions de jquery. De ce fait il faut mettre cette inclusion avant le code suivant.

Voyons voir ce que peut donner notre script proprement dit :

Comme vous pouvez le constater il est court et son action assez simple. Dans un premier temps, il cache l’ensemble des éléments contenu par un noeud. (à l’exception de Internet Explorer qui ne sait pas traiter .plier>li)

Ensuite, le script capture l’évènement click sur chaque noeud. Sur le noeud considéré la classe plier est ajoutée ou enlevée en fonction de sa présence. Le e.stopPropagation(); interdit la propagation de l’évènement sur les noeuds parents.

Et Internet Explorer ?

Pour les tenaces, il existe une solution qui nécessite de mettre un peu plus les mains dans le camboui.

Dans un premier temps, il nous faut détecter Internet Explorer. Les développeurs de jquery ont pensé à nous. Il existe une directive $.browser qui permet de déterminer le navigateur. Pour les curieux (uniquement :), il existe une surcharge plus évoluée (jqbrowser 2)

Pour commencer nous allons modifier la page pour Internet Explorer. Juste avant le code précédemment saisi, nous ajoutons :

Ce code va donc rajouter un lien nommé déplier devant chaque noeud. Et rajoute une classe pliermsie à l’élément fils qui permettra de le plier. Pour ceci rajoutons dans la CSS :

Et enfin nous rajoutons un bout de code pour traiter le (dé)pliage. Nous rajouterons donc ceci après les 2 blocs de code saisis jusqu’à présent.

Au final nous avons rajouté des comportements propres à Internet Explorer, sans modifier les éléments de base.

Télécharger

En attendant que contrib accepte à nouveau les documents zippés, vous pouvez charger le menu ici

Conclusion

En mettant tout ceci dans un beau squelette ça devrait le faire, non ?

Dernière modification de cette page le 17 mars 2008

Retour en haut de la page

Tout afficher

Vos commentaires

  • Le 30 juillet 2009 à 23:00, par ? En réponse à : Menu dépliant (liste, CSS et jquery)

    voici un menu dépliant tout en css http://bormat2.free.fr/

    Répondre à ce message

  • Le 10 avril 2009 à 18:05, par MacGeol En réponse à : Menu dépliant (liste, CSS et jquery)

    Bonjour,

    Alors en fait je cherchais depuis un moment une solution dépliante, non pas pour le menu de navigation pour la page plan du site.
    Et je suis donc tombé sur cette solution qui me convient parfaitement.

    Cependant, j’ai un énorme souci : CA NE MARCHE sur aucun des 4 navigateurs que j’ai à ma disposition (Mac et PC).

    Pour essayer vous même voici l’adresse de test : ICI

    L’erreur donnée par FireBug est :

    $(document).ready is not a function
    $(document).ready(function(){

    et celle donnée par le débogueur Safari est :
    Value undefined (result of expression $(document).ready) is not object.
    Comme si le navigateur ne chargeait pas jQuery. Et pourtant j’ai le plug-in couteau suisse duquel j’utilise la lame BLOCS DEPLIABLES qui fonctionne très bien et ne semble pas être en conflit avec ce petit script puisque que je l’active ou que le désactive l’erreur est la même.

    Quelqu’un pourrait donc me dire d’où pourrait provenir cette erreur, et surtout : Comment la résoudre !

    MERCI beaucoup d’avance

    Répondre à ce message

  • Le 11 mars 2009 à 16:27, par alexis En réponse à : Menu dépliant (liste, CSS et jquery)

    Bonjour,

    le lien d’accès à l’archive est cassé. Y-a t’il moyen d’obtenir cette archive tant espérée quelque part ?

    Merci pour ce travail !

    Amicalement,

    Répondre à ce message

  • Le 4 février 2009 à 21:25, par Shinji En réponse à : Menu dépliant (liste, CSS et jquery)

    He ben super merci pour l’info, je mets çà en bookmark dès demain ^^.

    Répondre à ce message

  • Le 4 février 2009 à 19:23, par Shinji En réponse à : Menu dépliant (liste, CSS et jquery)

    Bonjour, j’ai effectué a peu près le même genre de menu pour le boulot et le stoPropagation me sauve la vie ! Merci beaucoup, savez vous si il y a une doc de tout ces petits éléments e ?

    Répondre à ce message

  • Le 12 septembre 2008 à 11:47, par Draikhin En réponse à : Menu dépliant (liste, CSS et jquery)

    Bonjour,

    Félicitation pour cette excellente contrib, très simple.
    Pour une meilleure ergonomie comment pourrait-on faire afin que la rubrique (ou sous-rubrique) sur laquelle on est soit automatiquement dépliée lorsque nous y accédons ? Idem pour les articles.
    Pour l’instant tout est plié et il faut redéplier à chaque fois. pas pratique pour un internaute ;)

    Merci pour tout.

    Bonne journée,
    Olivier

    • Le 15 septembre 2008 à 16:53, par cam.lafit En réponse à : Menu dépliant (liste, CSS et jquery)

      Bonjour

      La liste contenant la rubrique en cours se voit affecter la classe oui. Il semble donc possible de faire ce que vous demandez en mettant dans votre css :

      Je fais ça de tete et apres une relecture rapide du code proposé.
      Si vous pouvez confirmer ou infirmer cette solution, je pourrais alors mettre à jour la documentation.

    Répondre à ce message

  • Le 29 juillet 2008 à 14:47, par aire 42 En réponse à : Menu dépliant (liste, CSS et jquery)

    Bonjour,

    Le lien est de nouveau cassé !!! help please

    • Le 30 juillet 2008 à 15:00, par cam.lafit En réponse à : Menu dépliant (liste, CSS et jquery)

      Bonjour

      Par mégarde j’ai supprimé le zip sur mon serveur et je n’ai pas de sauvegarde sous le coude.

      Toutefois tout est expliqué dans l’article :) Le temps que je refasse le zip et propose une grosse simplification du squelette

    Répondre à ce message

  • Le 26 mai 2008 à 12:59, par LPG En réponse à : Menu dépliant (liste, CSS et jquery)

    Bonjour

    comment faire pour que certaines rubriques aient leurs sous rubriques dépliées par défaut et pas d’autres indépendemment de là ou on se trouve sur le site. Je m’explique :

    • rubrique à déplier 1
    • rubriqueà déplier 2
    • rubrique dépliée par défaut 3
      • sous rubrique1
      • sous rubrique2

      etc...

    • rubrique4 à déplier

    Merci d’avance !!!

    LPG

    • Le 26 mai 2008 à 14:39, par cam.lafit En réponse à : Menu dépliant (liste, CSS et jquery)

      Bonjour

      Il vous faut :

      • modifier le squelettes pour identifier chaque element de liste par exemple avec une classe class="rubriqueX", X : l’identifiant de la rubrique
      • rajouter dans votre script, une fonction qui surcharge le comportement du script en fonction de la classe rubriqueX

    Répondre à ce message

  • Le 11 mai 2008 à 16:41, par Renée Picard En réponse à : Problème avec IE

    Bonjour

    J’ai demandé de l’aide sur la liste pour « déboguer » ce menu lorsqu’il est utilisé avec IE. On me répond que la dernière version du zip de cette page est « déboguée » ce qui n’est pas le cas.

    Voir en ligne mon site en construction :

    http://www.conceptvirtuel.ca/SansDino/

    Merci pour ce menu qui fonctionne très bien autrement que sur IE

    • Le 19 mai 2008 à 21:23, par Etienne Lemieux En réponse à : Problème avec IE

      Idem avec moi. En effet, le menu tout seul fonctionne bien, une fois dans les squelettes il est incorrect avec IE. Ce n’est pourtant pas un conflit de CSS, j’ai vérifié. C’est à voir.

    Répondre à ce message

  • Le 4 avril 2008 à 10:30, par Neru En réponse à : Menu dépliant (liste, CSS et jquery)

    Bonjour,

    Je trouve ce menu sympa comme tout, il va bien en profondeur jusqu’aux articles.
    Seul petit problème, je voudrais qu’il soit en horizontal et non en vertical.
    J’ai essayé de modifier le fichier css mais ça ne fonctionne pas comme je le voudrais.
    pouvez vous m’éclairer sur ce point SVP ? merci d’avance.

    Répondre à ce message

Répondre à cet article

Qui êtes-vous ?

Pour afficher votre trombine avec votre message, enregistrez-la d’abord sur gravatar.com (gratuit et indolore) et n’oubliez pas d’indiquer votre adresse e-mail ici.

Ajoutez votre commentaire ici Les choses à faire avant de poser une question (Prolégomènes aux rapports de bugs. )
Ajouter un document

Retour en haut de la page

Ça discute par ici

  • Métas +

    3 décembre 2016 – 26 commentaires

    Améliorez l’indexation de vos articles dans les moteurs et leur affichage sur les réseaux sociaux grâce aux métadonnées Dublin Core, Open Graph et Twitter Card. Installation Activer le plugin dans le menu dédié. Dans le panel de configuration, vous (...)

  • Photoswipe

    18 septembre 2016 – 35 commentaires

    Une lightbox javascript responsive. PhotoSwipe est une boîte multimédia — comme la Mediabox installée en série avec SPIP — qui permet de zoomer à la taille réelle des images et qui gère intelligemment les légendes. Le plugin est basé sur la librairie (...)

  • Japibas, squelette responsive

    11 octobre 2013 – 96 commentaires

    Japibas est un squelette responsive, multilingue (français, anglais et espagnol), dont l’habillage conviendrait à un site de type blog ou webzine. Le graphisme est inspiré du template Wordpress Japibas réalisé par Jesper Johansen et distribué sous (...)

  • GIS 4

    11 août 2012 – 1417 commentaires

    Présentation et nouveautés La version 4 de GIS abandonne la libraire Mapstraction au profit de Leaflet. Cette librairie permet de s’affranchir des librairies propriétaires tout en gardant les mêmes fonctionnalités, elle propose même de nouvelles (...)

  • Plugin Domlang : Domaines par secteur de langue

    4 septembre – commentaires

    Domlang est un plugin qui permet d’associer un nom de domaine ou un sous-domaine à un secteur de langue. Ce plugin convient pour un site qui utilise des secteurs de langues. En configuration, pour chaque secteur, vous pourrez définir une URL (...)