Aller au contenu

🧭 MenusGratuit · 0 NahnahPar NAHNAH

Menu dock magnétique

Barre de raccourcis façon dock : les icônes grossissent en vague quand la souris s’en approche et leur nom apparaît en bulle. Sur téléphone, une rangée d’icônes défilable avec leur nom. Liens et icônes réglables.

Aperçu en direct

Données de démonstration (produits, menus, textes d’exemple) : dans ta boutique, ce sont les tiennes.

Photos : Unsplash / Pexels (exemples de l’aperçu, jamais inclus dans le code).

Code à copier

Fichier complet sections/nahnah-menu-dock-magnetique.liquid (Liquid, CSS et JS inclus).

{%- comment -%} NAHNAH AI · Menu dock magnétique (bibliothèque Sections & effets) {%- endcomment -%}
<div class="nn-menu-dock-magnetique" style="--nn-mh: {{ section.settings.marge_haut }}px; --nn-mb: {{ section.settings.marge_bas }}px; --nn-fond: {{ section.settings.couleur_fond }}; --nn-texte: {{ section.settings.couleur_texte }}; --nn-accent: {{ section.settings.couleur_accent }}; --nn-align: {{ section.settings.alignement }};" data-nn-invitation="{{ section.settings.invitation }}">
  <nav class="nn-menu-dock-magnetique__zone" aria-label="Raccourcis">
    <ul class="nn-menu-dock-magnetique__dock" role="list" data-nn-dock>
      {%- for block in section.blocks -%}
        <li class="nn-menu-dock-magnetique__item" {{ block.shopify_attributes }}>
          <a class="nn-menu-dock-magnetique__lien" href="{{ block.settings.lien | default: '#' }}" aria-label="{{ block.settings.nom | escape }}">
            {%- case block.settings.icone -%}{%- when 'accueil' -%}<svg class="nn-menu-dock-magnetique__svg" viewBox="0 0 24 24" width="24" height="24" fill="none" stroke="currentColor" stroke-width="1.7" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true" focusable="false"><path d="M4 11 12 4l8 7"/><path d="M6 9.5V20h12V9.5"/></svg>{%- when 'boutique' -%}<svg class="nn-menu-dock-magnetique__svg" viewBox="0 0 24 24" width="24" height="24" fill="none" stroke="currentColor" stroke-width="1.7" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true" focusable="false"><path d="M5 8h14l-1 12H6Z"/><path d="M9 8V6a3 3 0 0 1 6 0v2"/></svg>{%- when 'nouveau' -%}<svg class="nn-menu-dock-magnetique__svg" viewBox="0 0 24 24" width="24" height="24" fill="none" stroke="currentColor" stroke-width="1.7" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true" focusable="false"><path d="m12 3 2.6 5.6 6 .7-4.5 4.1 1.2 6L12 16.4 6.7 19.4l1.2-6L3.4 9.3l6-.7Z"/></svg>{%- when 'cadeau' -%}<svg class="nn-menu-dock-magnetique__svg" viewBox="0 0 24 24" width="24" height="24" fill="none" stroke="currentColor" stroke-width="1.7" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true" focusable="false"><rect x="4" y="9" width="16" height="11" rx="1.5"/><path d="M3 9h18v-3H3ZM12 6v14M12 6c-2-3-6-2-5 0M12 6c2-3 6-2 5 0"/></svg>{%- when 'promo' -%}<svg class="nn-menu-dock-magnetique__svg" viewBox="0 0 24 24" width="24" height="24" fill="none" stroke="currentColor" stroke-width="1.7" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true" focusable="false"><path d="M3 12V4h8l10 10-7 7Z"/><circle cx="7.5" cy="8.5" r="1.5"/></svg>{%- when 'coeur' -%}<svg class="nn-menu-dock-magnetique__svg" viewBox="0 0 24 24" width="24" height="24" fill="none" stroke="currentColor" stroke-width="1.7" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true" focusable="false"><path d="M12 20 4.6 12.7a4.6 4.6 0 0 1 6.5-6.5l.9.9.9-.9a4.6 4.6 0 0 1 6.5 6.5Z"/></svg>{%- when 'contact' -%}<svg class="nn-menu-dock-magnetique__svg" viewBox="0 0 24 24" width="24" height="24" fill="none" stroke="currentColor" stroke-width="1.7" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true" focusable="false"><path d="M4 5h16v11H8l-4 4Z"/></svg>{%- when 'compte' -%}<svg class="nn-menu-dock-magnetique__svg" viewBox="0 0 24 24" width="24" height="24" fill="none" stroke="currentColor" stroke-width="1.7" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true" focusable="false"><circle cx="12" cy="8" r="4"/><path d="M4 21a8 8 0 0 1 16 0"/></svg>{%- endcase -%}
            <span class="nn-menu-dock-magnetique__nom">{{ block.settings.nom | escape }}</span>
          </a>
        </li>
      {%- endfor -%}
    </ul>
  </nav>
</div>

{% schema %}
{
  "name": "Menu dock magnétique",
  "tag": "section",
  "class": "nn-section-menu-dock-magnetique",
  "max_blocks": 10,
  "settings": [
    {
      "type": "select",
      "id": "alignement",
      "label": "Alignement",
      "options": [
        {
          "value": "center",
          "label": "Centré"
        },
        {
          "value": "flex-start",
          "label": "À gauche"
        }
      ],
      "default": "center"
    },
    {
      "type": "checkbox",
      "id": "invitation",
      "label": "Faire passer une vague sur le dock",
      "default": false,
      "info": "Coupé si le visiteur a demandé à réduire les animations."
    },
    {
      "type": "header",
      "content": "Couleurs"
    },
    {
      "type": "color",
      "id": "couleur_fond",
      "label": "Fond",
      "default": "#F1F5F9"
    },
    {
      "type": "color",
      "id": "couleur_texte",
      "label": "Texte",
      "default": "#0F172A"
    },
    {
      "type": "color",
      "id": "couleur_accent",
      "label": "Accent",
      "default": "#6366F1"
    },
    {
      "type": "header",
      "content": "Espacement"
    },
    {
      "type": "range",
      "id": "marge_haut",
      "label": "Marge haute",
      "min": 0,
      "max": 120,
      "step": 4,
      "unit": "px",
      "default": 48
    },
    {
      "type": "range",
      "id": "marge_bas",
      "label": "Marge basse",
      "min": 0,
      "max": 120,
      "step": 4,
      "unit": "px",
      "default": 32
    }
  ],
  "blocks": [
    {
      "type": "lien",
      "name": "Raccourci",
      "settings": [
        {
          "type": "select",
          "id": "icone",
          "label": "Icône",
          "options": [
            {
              "value": "accueil",
              "label": "Accueil"
            },
            {
              "value": "boutique",
              "label": "Boutique"
            },
            {
              "value": "nouveau",
              "label": "Nouveautés"
            },
            {
              "value": "cadeau",
              "label": "Cadeaux"
            },
            {
              "value": "promo",
              "label": "Promotions"
            },
            {
              "value": "coeur",
              "label": "Favoris"
            },
            {
              "value": "contact",
              "label": "Contact"
            },
            {
              "value": "compte",
              "label": "Compte"
            }
          ],
          "default": "accueil"
        },
        {
          "type": "text",
          "id": "nom",
          "label": "Nom",
          "default": "Accueil"
        },
        {
          "type": "url",
          "id": "lien",
          "label": "Lien"
        }
      ]
    }
  ],
  "presets": [
    {
      "name": "Menu dock magnétique",
      "blocks": [
        {
          "type": "lien",
          "settings": {
            "icone": "accueil",
            "nom": "Accueil"
          }
        },
        {
          "type": "lien",
          "settings": {
            "icone": "boutique",
            "nom": "Boutique"
          }
        },
        {
          "type": "lien",
          "settings": {
            "icone": "nouveau",
            "nom": "Nouveautés"
          }
        },
        {
          "type": "lien",
          "settings": {
            "icone": "cadeau",
            "nom": "Cadeaux"
          }
        },
        {
          "type": "lien",
          "settings": {
            "icone": "promo",
            "nom": "Promotions"
          }
        },
        {
          "type": "lien",
          "settings": {
            "icone": "coeur",
            "nom": "Favoris"
          }
        },
        {
          "type": "lien",
          "settings": {
            "icone": "contact",
            "nom": "Contact"
          }
        }
      ]
    }
  ]
}
{% endschema %}

{% stylesheet %}
.nn-menu-dock-magnetique { padding: var(--nn-mh) 16px var(--nn-mb); background: var(--nn-fond); color: var(--nn-texte); }
.nn-menu-dock-magnetique__zone { display: flex; justify-content: var(--nn-align); max-width: 1100px; margin: 0 auto; }
.nn-menu-dock-magnetique__dock { display: flex; align-items: flex-end; gap: 10px; height: 92px; margin: 0; padding: 10px 14px; list-style: none; border: 1px solid rgba(15, 23, 42, 0.08); border-radius: 26px; background: rgba(255, 255, 255, 0.7); -webkit-backdrop-filter: blur(16px); backdrop-filter: blur(16px); box-shadow: 0 20px 40px -24px rgba(15, 23, 42, 0.45); }
.nn-menu-dock-magnetique__item { position: relative; display: flex; align-items: flex-end; }
.nn-menu-dock-magnetique__lien { position: relative; display: grid; place-items: center; width: calc(52px * var(--nn-e, 1)); height: calc(52px * var(--nn-e, 1)); border-radius: calc(16px * var(--nn-e, 1)); background: linear-gradient(160deg, #FFFFFF, #E2E8F0); color: var(--nn-texte); text-decoration: none; box-shadow: 0 6px 14px -8px rgba(15, 23, 42, 0.5); transition: width 0.18s ease-out, height 0.18s ease-out, border-radius 0.18s; }
.nn-menu-dock-magnetique__lien:hover { color: var(--nn-accent); }
.nn-menu-dock-magnetique__lien:focus-visible { outline: 2px solid var(--nn-accent); outline-offset: 3px; }
.nn-menu-dock-magnetique__svg { width: 50%; height: 50%; }
.nn-menu-dock-magnetique__nom { position: absolute; left: 50%; bottom: calc(100% + 10px); padding: 4px 10px; border-radius: 8px; background: var(--nn-texte); color: #FFFFFF; font-size: 12px; font-weight: 600; white-space: nowrap; opacity: 0; transform: translate(-50%, 4px); transition: opacity 0.2s, transform 0.2s; pointer-events: none; }
.nn-menu-dock-magnetique__lien:hover .nn-menu-dock-magnetique__nom, .nn-menu-dock-magnetique__lien:focus-visible .nn-menu-dock-magnetique__nom, .nn-menu-dock-magnetique__lien[data-nn-proche] .nn-menu-dock-magnetique__nom { opacity: 1; transform: translate(-50%, 0); }
@media (hover: none), (max-width: 600px) {
  .nn-menu-dock-magnetique__dock { height: auto; max-width: 100%; overflow-x: auto; align-items: flex-start; }
  .nn-menu-dock-magnetique__lien { width: 52px !important; height: 52px !important; }
  .nn-menu-dock-magnetique__item { flex-direction: column; align-items: center; gap: 4px; }
  .nn-menu-dock-magnetique__nom { position: static; padding: 0; background: none; color: inherit; opacity: 1; transform: none; font-size: 11px; }
}
@media (prefers-reduced-motion: reduce) {
  .nn-menu-dock-magnetique *, .nn-menu-dock-magnetique *::before, .nn-menu-dock-magnetique *::after { animation: none !important; transition: none !important; }
}
{% endstylesheet %}

{% javascript %}
(function () {
  var reduit = window.matchMedia && window.matchMedia("(prefers-reduced-motion: reduce)").matches;
  function brancher(racine) {
    if (racine.dataset.nnPret) return;
    racine.dataset.nnPret = "1";
    var dock = racine.querySelector("[data-nn-dock]");
    var liens = [].slice.call(racine.querySelectorAll(".nn-menu-dock-magnetique__lien"));
    if (!dock || !liens.length || reduit) return;
    var fin = window.matchMedia("(hover: hover) and (min-width: 601px)");
    function loupe(x) {
      liens.forEach(function (l) {
        var r = l.getBoundingClientRect(), d = Math.abs(x - (r.left + r.width / 2)), f = Math.max(0, 1 - d / 140);
        l.style.setProperty("--nn-e", (1 + f * 0.6).toFixed(3));
        if (f > 0.75) l.setAttribute("data-nn-proche", ""); else l.removeAttribute("data-nn-proche");
      });
    }
    function repos() { liens.forEach(function (l) { l.style.removeProperty("--nn-e"); l.removeAttribute("data-nn-proche"); }); }
    var auto = null;
    dock.addEventListener("pointermove", function (e) { if (!fin.matches) return; if (auto && e.isTrusted) { clearInterval(auto); auto = null; } loupe(e.clientX); });
    dock.addEventListener("pointerleave", function () { if (!auto) repos(); });
    if (racine.getAttribute("data-nn-invitation") === "true" && fin.matches) {
      var t = 0;
      auto = setInterval(function () { t += 0.03; var r = dock.getBoundingClientRect(); loupe(r.left + r.width * (0.5 + 0.48 * Math.sin(t))); }, 30);
    }
  }
  function tout() { document.querySelectorAll(".nn-menu-dock-magnetique").forEach(brancher); }
  tout();
  document.addEventListener("shopify:section:load", tout);
})();
{% endjavascript %}
Télécharger le fichier .liquid

Les 8 icônes, une par une

  • Accueil
  • Boutique
  • Nouveautés
  • Cadeaux
  • Promotions
  • Favoris
  • Contact
  • Compte

Licence NAHNAH AI : utilisation libre dans tes boutiques (y compris commerciales), modification permise, revente de l’élément seul interdite.

Prompt à copier

À coller dans Claude ou ChatGPT avec le fichier téléchargé (ou le code copié) : l’assistant t’aide à l’installer et à l’adapter à ta marque.

Tu es un expert des thèmes Shopify Online Store 2.0. Aide-moi à installer puis à adapter à ma marque cet élément gratuit de la bibliothèque NAHNAH AI.

Élément : « Menu dock magnétique » (Menus)
Description : Barre de raccourcis façon dock : les icônes grossissent en vague quand la souris s’en approche et leur nom apparaît en bulle. Sur téléphone, une rangée d’icônes défilable avec leur nom. Liens et icônes réglables.
Page de l’élément (aperçu en direct) : https://ai.nahnah.shop/bibliotheque-shopify/menu-dock-magnetique
Fichier : nahnah-menu-dock-magnetique.liquid (bouton « Télécharger » de la page) ou le code copié avec le bouton « Copier » : je te le joins ou je le colle après ce message.
Emplacement dans le thème : sections/nahnah-menu-dock-magnetique.liquid (Liquid, puis {% stylesheet %} et {% javascript %}, dans ce seul fichier).

Étapes d’installation :
1. Dans Shopify : Boutique en ligne → Thèmes → bouton « … » du thème → Modifier le code.
2. Dossier « sections » → « Ajouter une section » (ou « Nouveau fichier ») → nomme-la « nahnah-menu-dock-magnetique ».
3. Efface le contenu proposé, colle le code de l’onglet Liquid (fichier complet), puis Enregistrer.
4. Ouvre Personnaliser → Ajouter une section → choisis-la, règle les textes et les couleurs, puis Enregistrer.

Ce que j’attends de toi :
- Guide-moi pas à pas dans Shopify : Boutique en ligne → Thèmes → « … » → Modifier le code → dossier sections → Ajouter une section, puis Personnaliser → Ajouter une section.
- Propose-moi d’adapter les couleurs, les textes et les liens à ma marque : demande d’abord mes couleurs (codes hexadécimaux), mon ton et mes liens.
- Garde le bloc {% schema %} et tous ses réglages (identifiants, types, presets) : je dois pouvoir tout régler ensuite dans l’éditeur de thème.
- Rends-moi le fichier complet modifié, prêt à coller, sans faux avis, fausse urgence ni chiffre inventé.

Si tu as le connecteur NAHNAH AI (MCP), récupère directement le code exact avec l’outil obtenir_code_element (id : menu-dock-magnetique).

Installer dans ma boutique

En un clic, la section est ajoutée à un thème de ta boutique Shopify connectée (un thème non publié par défaut).

Chargement de tes boutiques…

Installer dans Shopify

  1. Dans Shopify : Boutique en ligne → Thèmes → bouton « … » du thème → Modifier le code.
  2. Dossier « sections » → « Ajouter une section » (ou « Nouveau fichier ») → nomme-la « nahnah-menu-dock-magnetique ».
  3. Efface le contenu proposé, colle le code de l’onglet Liquid (fichier complet), puis Enregistrer.
  4. Ouvre Personnaliser → Ajouter une section → choisis-la, règle les textes et les couleurs, puis Enregistrer.

Installer via le MCP

Depuis Claude, Claude Code ou ChatGPT connecté à NAHNAH AI, demande : « Donne-moi le code de l’élément menu-dock-magnetique de la bibliothèque NAHNAH AI et les étapes pour l’installer ». L’assistant récupère le code et les étapes (outil obtenir_code_element), gratuitement.

Boutique connectée à NAHNAH AI : l’assistant peut aussi l’installer directement (outil installer_element).

Connecter le MCP

Dans la même catégorie