SW Core
SW Core / Animações / Fixed (gruda no topo)

Fixed (gruda no topo) Animações

Um elemento que gruda no topo da tela enquanto o bloco dele passa — e vai embora junto quando o bloco acaba. Sem prender a página.

O que é

É para quando você quer que algo "acompanhe" a leitura: o título de uma seção longa, uma coluna de resumo ao lado do texto, a barra de filtros de uma lista. Você coloca sw-ani="fixed" no elemento e ele gruda no topo da tela enquanto o bloco em que ele está (o pai) ainda está passando. Quando o bloco termina, ele sai junto. A página continua rolando normalmente — diferente do Pin, que para a página.

Por baixo é o position: sticky do próprio navegador: leve, sem cálculo pesado. Ele gruda no topo da janela e respeita o tamanho do pai. Faz parte do pacote de animação — se você não usa esse pacote, a classe stk do arquivo principal faz a mesma coisa.

Quando usar

  • Título da seção que acompanha enquanto a pessoa lê uma lista longa (cardápio, perguntas frequentes).
  • Coluna lateral com resumo, preço ou botão "Comprar" ao lado de um texto comprido.
  • Barra de filtros de uma loja que fica à mão enquanto a pessoa desce pelos produtos.
  • Se você quer parar a página por um trecho para animar algo, o certo é o Pin.

Comece aqui

  1. 1

    Coloque o SW Core e o pacote de animação. O JS da animação vai antes do swcore.min.js.

    <link rel="stylesheet" href="swcore/swcore.min.css">
    <link rel="stylesheet" href="swcore/swcore.motion.min.css">
    
    <!-- fim do <body> -->
    <script src="swcore/swcore.motion.min.js"></script>
    <script src="swcore/swcore.min.js"></script>
  2. 2

    Coloque o elemento que vai grudar dentro do bloco que ele acompanha, junto com o conteúdo longo.

    <section>
      <h2 sw-ani="fixed" class="bg-sur p-m">Bolos</h2>
      …lista longa de bolos…
    </section>

Todas as variações

Cada quadro abaixo é o componente de verdade, rodando. O código embaixo é exatamente o que está no quadro: copie e cole.

1. Onde ele gruda

Role a página devagar sobre estes quadros: a faixa colorida gruda no topo da janela enquanto os trechos passam, e vai embora quando o quadro acaba.

Cardápio · Bolos
Bolo 1
Bolo 2
Bolo 3
Bolo 4
Bolo 5
Bolo 6
Cabeçalho de seção que acompanha
<div>
  <div sw-ani="fixed" class="bg-g-pri p-m r-m fw6">Cardápio · Bolos</div>
  <div class="flx f-cl gap-3 mt-3">
    <div class="bg-sur bd p-g r-m">Bolo 1</div>
    <div class="bg-sur bd p-g r-m">Bolo 2</div>
    …
  </div>
</div>
Plano Completo

R$ 149/mês

Assinar
Benefício 1
Benefício 2
Benefício 3
Benefício 4
Benefício 5
Benefício 6
Coluna lateral que acompanha o texto
<div class="l l-2 gap-4">
  <div>                                  <!-- a coluna (alta, pela grade) -->
    <div sw-ani="fixed" class="bg-sur bd p-g r-m">
      <strong>Plano Completo</strong>
      <p>R$ 149/mês</p>
      <a href="/assinar" sw-btn="pri p">Assinar</a>
    </div>
  </div>
  <div>…texto longo…</div>
</div>
Filtros: Todos · Promoção · Novidades
Produto 1
Produto 2
Produto 3
Produto 4
Produto 5
Sem o pacote de animação: classe stk (mesmo resultado)
<div>
  <div class="stk bg-g-sec p-m r-m fw6">Filtros: Todos · Promoção · Novidades</div>
  <div>…lista de produtos…</div>
</div>

Tabela de opções

PalavraO que fazExemplo
Atributo
sw-ani="fixed"Gruda o elemento no topo da janela enquanto o pai dele passa pela tela. Sem outras opções.<div sw-ani="fixed">
Alternativa no arquivo principal (sem pacote de animação)
stkClasse: position: sticky no topo (0). Mesmo resultado do fixed.class="stk"
stk-navClasse: igual, mas gruda logo abaixo da navbar fixa (usa a altura --sw-navbar-h, padrão 7rem).class="stk-nav"

Receitas prontas — usos reais

Situações que aparecem em quase todo site. Copie a que servir.

Perguntas frequentes com o título da categoria acompanhando Ao vivo

Entregas

Entregamos em até 2 dias úteis na capital.

Pedidos até as 15h saem no mesmo dia.

O frete é grátis acima de R$ 199.

Trocas

Você tem 7 dias para trocar, sem justificar.

A troca é feita na loja ou pelo correio.

O reembolso cai em até 5 dias.

<div>
  <h3 sw-ani="fixed" class="bg-sur bd p-m r-m">Entregas</h3>
  <p>…</p>
</div>
<div>
  <h3 sw-ani="fixed" class="bg-sur bd p-m r-m">Trocas</h3>
  <p>…</p>
</div>

<!-- cada título acompanha só o seu bloco e vai embora quando o próximo chega -->
Página de produto: foto ao lado, texto rolando Referência
<div class="l l-2 gap-6">
  <div>
    <img sw-ani="fixed" src="/produto/tenis.webp" width="800" height="800" alt="Tênis de corrida azul">
  </div>
  <div>
    <h1>Tênis Corrida Leve</h1>
    <p>…descrição longa, medidas, avaliações…</p>
  </div>
</div>

Precisa de quê

  • swcore.min.css + swcore.motion.min.css, e swcore.motion.min.js antes do swcore.min.js.
  • Sem o pacote de animação, use a classe stk (vem no swcore.min.css).

Cuidados — erros comuns

  • "Não gruda": procure um elemento em volta com overflow: hidden, overflow: auto ou overflow: scroll. Isso é regra do navegador para o sticky: ele passa a grudar dentro daquele elemento, não na tela.
  • Ele só acompanha enquanto o pai está passando. Se o pai tem a mesma altura que ele, não sobra espaço para grudar.
  • Numa grade (l l-2), coloque o fixed dentro de uma <div> da coluna, como no exemplo. Direto como item da grade, ele estica na altura da linha e não tem para onde andar.
  • Dê um fundo a ele (bg-sur, bg-g-pri…): transparente, o conteúdo que passa por baixo aparece através.
  • Com uma navbar fixa no topo, o elemento fica escondido atrás dela: use a classe stk-nav, que gruda logo abaixo da navbar.

O que ele não faz

  • Sempre gruda no topo (0). Para outra distância do topo, use stk-nav ou o seu próprio CSS com top.
  • Não anima nada enquanto está grudado. Para animar peças presas à rolagem, use o Pin.