1. Personalização
FácilZap API
  • FácilZap API
    • Introdução
    • Ambientes
    • Tipos de Usuários
    • Autenticação
    • Limites
    • Endpoints
    • Webhooks
    • Referência da API
    • Histórico de Alterações
  • Personalização
    • Introdução
    • Dados, helpers e sintaxe do template
    • HTML, CSS e limites
    • Componentes prontos
    • Cabeçalho e rodapé
    • Menus (desktop, submenu e mobile)
  1. Personalização

Menus (desktop, submenu e mobile)

Os 3 menus têm modelos Personalizado independentes: ative só o que for personalizar. Todos são manuais puros (@foreach + CSS próprio, sem componentes).
Menu desktop: barra horizontal (só ≥1200px). INÍCIO + 5 primeiras categorias com dropdown CSS no hover + MAIS CATEGORIAS com o restante (offset 5). O botão some sozinho sem excedente (regra :has() no CSS; sem suporte, degrada para botão visível). Some se o menu estiver desativado na loja — proteja com @if(feature('mostrar_menu_categorias')).
Submenu desktop: mega-menu das subcategorias (grupos com título, "Ver Tudo", imagem e contagem). Independente: aparece dentro do menu fixo; no menu desktop personalizado o dropdown vive no próprio template (não há inclusão automática).
Menu mobile: drawer lateral à esquerda com overlay, visual espelhando o Modelo 3 (header com Início, linhas 42px com ícone/contagem/chevron, divisor, seção "Acesso e suporte"). Abre no hambúrguer, fecha no X, no overlay ou com Escape. Subcategorias com accordion (data-fz-toggle). A seção de categorias respeita o menu da loja; busca e atalhos sempre aparecem. Minha conta usa link('account') (sem cadastro + deslogado, a linha fica inativa).
Links de categoria levam class="link-categoria" + data-categoria-id/nome/superior para navegar sem recarregar a página.

Exemplos prontos#

Menu desktop manual#

@if(feature('mostrar_menu_categorias'))
    <a href="{{ link('home') }}">INÍCIO</a>
    @foreach(categories as category limit 5)
        <a href="{{ category.url }}">{{ category.name }}</a>
    @endforeach
@endif

Submenu com loop aninhado#

@if(feature('mostrar_menu_categorias'))
    @foreach(categories as category)
        @foreach(category.subcategories as subcategory)
            <a href="{{ subcategory.url }}">{{ subcategory.name }}</a>
        @endforeach
    @endforeach
@endif

Menu mobile manual#

<strong>{{ store.name }}</strong>
@foreach(categories as category)
    <a href="{{ category.url }}">{{ category.name }}</a>
@endforeach

Grade Descobrir + promo Novidades (como o Modelo 1 fixo)#

<a href="{{ link('lancamentos') }}">Lançamentos</a>
<a href="{{ link('mais_vendidos') }}">Mais vendidos</a>
<a href="{{ link('promocoes') }}">Promoções</a>
<a href="{{ link('novidades_semana') }}">Novidades da semana</a>

Categoria com thumb#

@foreach(categories as category)
    <a href="{{ category.url }}">
        <img src="{{ category.image_thumb }}" alt="{{ category.name }}" loading="lazy">
        {{ category.name }}
    </a>
@endforeach

Padrões CSS prontos#

Todos usam só CSS escopado (sem JavaScript próprio):
Cabeçalho fixo no topo: .fz-custom-header { position: sticky; top: 0; z-index: 1000; } — gruda no scroll sem cobrir o conteúdo global (não use position: fixed com body, que é bloqueado).
Dropdown do menu desktop: container position: relative + submenu position: absolute; top: 100%; left: 0; display: none; + container:hover submenu { display: block; } — mesmo padrão dos modelos fixos, puro :hover.
Drawer mobile: o painel leva data-fz-drawer + position: fixed; top: 0; left: 0; height: 100dvh; width: min(86vw, 340px); z-index: 9998; transform: translateX(-102%); e a regra [data-fz-drawer].open { transform: none; }, com overlay em z-index: 9997. A abertura/fechamento usa o mecanismo da plataforma: botão com data-fz-action="menu-mobile" alterna a classe open no painel (o X, o clique no overlay e o Escape já vêm prontos; enquanto aberto, o body recebe fz-menu-mobile-starter-open). Mantenha-se abaixo de 10000 para não cobrir modais da plataforma (carrinho, busca, políticas) — diferente dos drawers fixos (que ficam acima de tudo, ~999998), o drawer custom abre esses recursos por cima dele.

Resto além das 5 primeiras#

@foreach(categories as category offset 5)
    <a href="{{ category.url }}">{{ category.name }}</a>
@endforeach
Modificado em 2026-09-09 02:01:40
Página anterior
Cabeçalho e rodapé
Built with