Utilitaires✨ Premium

Sidebar Toggle

Barre latérale à icônes avec un bouton chevron : dépliée, elle passe de 80 à 160 px, nomme ses liens, et le contenu voisin se réorganise.

CSS@containerSidebar

Mis à jour le

Cet effet fait partie d'Effect.Labs — 840 effets vanilla, une partie gratuite, une partie premium. Utilitaires comprend 43 effets, dont 3 gratuits. Découvrir la catégorie →

3 exemples d'usage

Halvorde — menu replié d'un logiciel d'entrepôt — Sidebar Toggle exemple 1

① Halvorde — menu replié d'un logiciel d'entrepôt

QuandÉcran d'inventaire plein cadre : barre d'icônes à gauche, à droite deux compteurs et le tableau des articles. Le chevron déplie le menu (Accueil, Stocks, Réglages) ; le contenu se resserre et la colonne « Emplacement » du tableau se masque faute de place.
PourquoiLes préparateurs gardent le tableau large la plupart du temps et n'ouvrent les noms du menu qu'au besoin, sans quitter l'écran.
RéglagesRacine en height: 100%, fond transparent ; .csb-main contient le titre, deux .csb-block et un tableau. La colonne masquée vient d'une règle de la scène sur le conteneur csb-main (max-width: 330px). Pour la capture, le chevron est cliqué toutes les 1,3 s.
Virdanne — palette « Calques » d'un éditeur de plans — Sidebar Toggle exemple 2

② Virdanne — palette « Calques » d'un éditeur de plans

QuandÉditeur de plans de maison : une palette flottante en haut à gauche ne montre que trois icônes de calques (murs, mobilier, cotes). Le chevron l'élargit à 160 px et nomme chaque calque ; le plan reste visible derrière.
PourquoiUne palette d'outils doit gêner le moins possible le dessin : repliée par défaut, elle s'ouvre le temps de choisir un calque.
RéglagesRacine en width: auto dans une fenêtre width: max-content ; .csb-main masqué (la palette n'a pas de contenu voisin). Icône de règle ajoutée pour les cotes. Chevron cliqué toutes les 1,3 s pour la capture.
Corduval — chapitres d'un cours de guitare sur téléphone — Sidebar Toggle exemple 3

③ Corduval — chapitres d'un cours de guitare sur téléphone

QuandTéléphone en paysage pendant une leçon vidéo : un rail de trois icônes de chapitres à gauche de la vidéo. Le chevron fait apparaître les titres (Introduction, Accords, Main droite) ; la vidéo se rétrécit sans être coupée.
PourquoiSur petit écran, la vidéo garde le maximum de place ; les titres ne s'affichent que lorsqu'on veut changer de chapitre.
RéglagesRacine en height: 100% dans un écran de 402 × 210 px, fond #16100c, accent orange par la couleur du bouton et des liens actifs. .csb-main contient la vidéo et le titre de la leçon. Chevron cliqué toutes les 1,3 s pour la capture.

Comment ça marche

La racine .fx-0752-root contient une rangée .csb-scene : à gauche le <nav class="csb-panel"> (bouton .csb-toggle puis un lien .csb-item par entrée), à droite la zone .csb-main. Le bouton ajoute ou retire la classe is-expanded sur la barre et met à jour son aria-expanded ; la largeur passe de 80 à 160 px en 0,4 s et le chevron pivote d'un demi-tour.

La barre est elle-même un conteneur (container: csb-panel / inline-size). Repliée, sa largeur utile est de 67 px : les libellés .csb-text sont cachés à l'œil mais restent lus, et les icônes sont centrées. Dès 100 px utiles (donc une fois dépliée), @container csb-panel (min-width: 100px) affiche les libellés et aligne les liens à gauche. C'est la largeur de la barre qui décide, pas l'état du bouton : si vous forcez une largeur de 120 px en CSS, les libellés s'affichent aussi.

La zone principale est un second conteneur (csb-main) : ses blocs .csb-block (un chiffre .csb-num et sa légende .csb-cap) sont sur une colonne sous 180 px de large et sur deux à partir de 180 px. Quand la barre se déplie, le contenu perd 80 px et se réorganise de lui-même. Le script se branche sur chaque racine, une seule fois, sans identifiant : deux copies dans la même page s'ouvrent séparément.

Accessibilité

  • Bouton annoncé : vrai <button type="button"> nommé « Afficher les libellés du menu », avec aria-expanded à false ou true ; Entrée et Espace l'activent.
  • Liens nommés même repliés : les libellés sont cachés à l'œil (boîte de 1 px), pas retirés ; un lecteur d'écran lit « Projets, lien » dans la barre de 80 px. Icônes en aria-hidden="true".
  • Page en cours : aria-current="page" sur le lien actif, déplacé au clic par le script.
  • Focus visible : contour de 2 px #a78bfa sur le bouton et les liens. Sur Safari, Tab ne s'arrête sur les liens qu'avec Option+Tab ou le réglage clavier de macOS.
  • Mouvement réduit : sous prefers-reduced-motion: reduce, la barre change de largeur d'un coup et le chevron se retourne sans rotation ; l'ouverture fonctionne à l'identique.

Compatibilité navigateur

Requêtes de conteneur (Chrome 105, Firefox 110, Safari 16) et :focus-visible (Safari 15.4). Mesuré dans Chromium 151, Firefox 153 et WebKit 26.5, deux copies dans la même page : le bouton de la 2e copie n'ouvre que la 2e (80 → 160 px, aria-expanded="true", libellés de 36 à 49 px visibles), clavier et toucher compris ; blocs sur 2 colonnes dès 180 px de contenu ; 0 erreur.

Chrome 105+✓ Complet (mesuré)
Firefox 110+✓ Complet (mesuré)
Safari 16+✓ Complet (mesuré sous WebKit)
Edge 105+✓ Complet
Mobile iOS 16+✓ Complet
Android Chrome 105+✓ Complet

Sans requêtes de conteneur, le bouton élargit toujours la barre mais les libellés restent cachés à l'œil (ils sont lus par les lecteurs d'écran) et les blocs restent sur une colonne. Sans JavaScript, la barre reste repliée.

Le code

Structure HTML à coller dans votre page (le CSS + JS sont inclus avec votre achat) :

index.html — structure
<div class="fx-0752-root">
  <div class="csb-scene">
    <nav class="csb-panel" aria-label="…">
      <button type="button" class="csb-toggle" aria-expanded="false" aria-label="…">…</button>
      <a class="csb-item" href="#…" aria-current="page">
        <svg aria-hidden="true">…</svg>
        <span class="csb-text">…</span>
      </a>
    </nav>
    <div class="csb-main">
      <p class="csb-title">…</p>
      <div class="csb-blocks">
        <div class="csb-block"><span class="csb-num">…</span><span class="csb-cap">…</span></div>
      </div>
    </div>
  </div>
</div>

Paiement unique, sans abonnement — le code est à toi pour toujours

Personnaliser

Options passées à l'API ou attributs data-* :

Option / propriétéDéfautEffet
Largeurs (CSS — .csb-panel et .csb-panel.is-expanded) 80 px repliée, 160 px dépliée Gardez la largeur repliée sous le palier des libellés et la largeur dépliée au-dessus.
Palier des libellés (CSS — @container csb-panel (min-width: 100px)) 100 px de largeur utile À relever si vous élargissez la barre repliée (sinon les libellés s'afficheraient dès le départ).
Palier du contenu (CSS — @container csb-main (min-width: 180px)) Blocs sur 1 colonne, puis 2 dès 180 px Ajoutez d'autres paliers sur csb-main pour votre propre contenu (tableau, cartes).
État au chargement (HTML — classe is-expanded sur .csb-panel) Repliée Ajoutez la classe pour démarrer dépliée ; le script aligne aria-expanded au chargement.
Entrées (HTML — .csb-item) Accueil, Projets, Réglages Un lien par entrée avec son icône SVG et son .csb-text ; aria-current="page" sur la page en cours.
Couleurs (CSS) Bouton rgba(139,92,246,.2) et chevron #8b5cf6, lien actif rgba(139,92,246,.2) Remplacez-les sur .csb-toggle, .csb-toggle svg et .csb-item[aria-current].
Durée (CSS — transition: width .4s sur .csb-panel) 0,4 s ; chevron 0,3 s Raccourcissez ou retirez la transition ; le mouvement réduit la supprime déjà.

FAQ

Grâce à la largeur. Le bouton ne fait qu'élargir la barre ; c'est la règle @container qui affiche les libellés quand la barre dépasse 100 px utiles. Une barre élargie autrement (CSS, autre script) les montre aussi.
Oui. Chaque racine reçoit son propre branchement, sans identifiant : le chevron d'une barre n'ouvre que la sienne, même si le script est collé deux fois.
Ce n'est pas fait par l'effet. Enregistrez l'état dans votre code (cookie, localStorage) et posez la classe is-expanded sur .csb-panel au chargement : le script synchronise alors aria-expanded.