SWCore
SWCore / Componentes / Lightbox

Lightbox Componentes

Clicou na miniatura, a foto abre grande por cima da página, com fundo escuro, legenda, setas para a próxima e contador. <a sw-lightbox href='foto.jpg'>.

O que é

É o jeito de mostrar fotos grandes sem sair da página: a pessoa clica na miniatura e a imagem abre ampliada no meio da tela. Numa galeria, ela passa para a próxima com as setas, o teclado ou arrastando o dedo no celular. Você coloca sw-lightbox num link <a> cujo href é a foto grande, com a miniatura dentro. Para juntar várias fotos numa galeria, dê o mesmo nome em sw-lightbox-grp. Tem ainda legenda, contador "2 / 5", zoom ao clicar, passagem automática e o truque de uma miniatura só que abre um álbum inteiro.

O JavaScript do núcleo cria, uma vez só, a tela escura com a imagem, o botão de fechar, as setas, a legenda e o contador. Ao clicar no link ele não abre a foto numa aba nova: mostra na tela escura, com um "carregando" enquanto a imagem chega. Fecha com o ×, com Esc ou clicando fora da foto. Enquanto aberto, a página não rola. Sem JavaScript, o link continua funcionando: abre a foto normalmente.

Quando usar

  • Galeria de fotos: imóvel, obra, cardápio, portfólio de fotógrafo, antes e depois.
  • Foto de produto na loja: miniatura na página, grande ao clicar.
  • Card de post/imóvel com uma capa só que abre o álbum todo (sw-lightbox-set).
  • Para imagens passando sozinhas na página (não em tela cheia), use o Slider.

Comece aqui

  1. 1

    Coloque o SWCore na página: CSS no <head> e JS no fim do <body>. O segundo CSS traz as setas (ícones).

    <link rel="stylesheet" href="https://swcore.sanweb.com.br/dist/2.1.0/swcore.min.css">
    <link rel="stylesheet" href="https://swcore.sanweb.com.br/dist/2.1.0/swcore.compl.min.css">
    
    <!-- fim do <body> -->
    <script src="https://swcore.sanweb.com.br/dist/2.1.0/swcore.min.js"></script>
  2. 2

    Faça um link para a foto grande, com a miniatura dentro, e coloque sw-lightbox. Clique na foto.

    Vista do rio
    <a sw-lightbox href="fotos/varanda-grande.jpg" sw-lightbox-cap="Vista do rio a partir da varanda">
      <img src="fotos/varanda-miniatura.jpg" alt="Vista do rio">
    </a>

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. Uma foto

O jeito mais simples: um link por foto. A legenda vem de sw-lightbox-cap ou, se ele faltar, do title do link. Sem nenhum dos dois, fica sem legenda.

Cachoeira
Com legenda — sw-lightbox-cap <a sw-lightbox href="https://picsum.photos/id/1039/1400/900" sw-lightbox-cap="Cachoeira do Tabuleiro"> <img class="r-m" src="https://picsum.photos/id/1039/200/130" alt="Cachoeira"> </a>
Trilha
Legenda pelo title <a sw-lightbox href="https://picsum.photos/id/1043/1400/900" title="Trilha no fim da tarde"> <img class="r-m" src="https://picsum.photos/id/1043/200/130" alt="Trilha"> </a>
Montanhas com neve
Sem legenda <a sw-lightbox href="https://picsum.photos/id/1036/1400/900"> <img class="r-m" src="https://picsum.photos/id/1036/200/130" alt="Montanhas com neve"> </a>
Cachorro
Com zoom ao clicar — sw-lightbox-zoom <a sw-lightbox href="https://picsum.photos/id/1025/1400/900" sw-lightbox-zoom sw-lightbox-cap="Clique na foto aberta para ampliar"> <img class="r-m" src="https://picsum.photos/id/1025/200/130" alt="Cachorro"> </a>

2. Galeria (várias fotos)

Links com o mesmo nome em sw-lightbox-grp viram uma galeria: abrindo qualquer um, aparecem setas, contador "2 / 4" e dá para passar com ← → ou arrastando no celular. sw-lightbox-count="false" esconde o contador.

FachadaSalaQuartoÁrea gourmet
sw-lightbox-grp="imovel" — 4 fotos
<a sw-lightbox sw-lightbox-grp="imovel" href="fachada.jpg" sw-lightbox-cap="Fachada"><img src="fachada-p.jpg" alt="Fachada"></a>
<a sw-lightbox sw-lightbox-grp="imovel" href="sala.jpg" sw-lightbox-cap="Sala"><img src="sala-p.jpg" alt="Sala"></a>
<a sw-lightbox sw-lightbox-grp="imovel" href="quarto.jpg" sw-lightbox-cap="Quarto"><img src="quarto-p.jpg" alt="Quarto"></a>
<a sw-lightbox sw-lightbox-grp="imovel" href="gourmet.jpg" sw-lightbox-cap="Área gourmet"><img src="gourmet-p.jpg" alt="Área gourmet"></a>
PaisagemPaisagemPaisagem
Sem contador — sw-lightbox-count="false"
<a sw-lightbox sw-lightbox-grp="viagem" sw-lightbox-count="false" href="1.jpg"><img src="1p.jpg" alt=""></a>
<a sw-lightbox sw-lightbox-grp="viagem" sw-lightbox-count="false" href="2.jpg"><img src="2p.jpg" alt=""></a>
<a sw-lightbox sw-lightbox-grp="viagem" sw-lightbox-count="false" href="3.jpg"><img src="3p.jpg" alt=""></a>

3. Uma miniatura que abre um álbum

Com sw-lightbox-set, a página mostra uma foto só, mas ao abrir aparecem todas: o href é a primeira, e sw-lightbox-set lista as outras, separadas por vírgula. Um selo "+N" aparece sozinho sobre a miniatura.

Álbum do casamento
sw-lightbox-set — álbum com 4 fotos <a sw-lightbox href="album/1.jpg" sw-lightbox-set="album/2.jpg, album/3.jpg, album/4.jpg" sw-lightbox-cap="Casamento — Ana e Pedro"> <img src="album/capa.jpg" alt="Álbum do casamento"> </a>

4. Passando sozinho

sw-lightbox-auto troca de foto sozinho a cada tantos milissegundos (2000 = 2 segundos), enquanto a galeria estiver aberta. Links com hidden entram na galeria sem aparecer na página.

Apresentação
sw-lightbox-auto="2000" — a cada 2 s <a sw-lightbox sw-lightbox-grp="slideshow" sw-lightbox-auto="2000" href="1.jpg"> <img src="capa.jpg" alt="Apresentação"> </a> <a sw-lightbox sw-lightbox-grp="slideshow" sw-lightbox-auto="2000" href="2.jpg" hidden></a> <a sw-lightbox sw-lightbox-grp="slideshow" sw-lightbox-auto="2000" href="3.jpg" hidden></a>

Tabela de opções

PalavraO que fazExemplo
Ligar
sw-lightboxNo link (ou outro elemento) que abre a foto.<a sw-lightbox href="grande.jpg">
hrefA foto grande.href="fotos/sala.jpg"
sw-lightbox-srcA foto grande, para quando o elemento não é um link (ex.: <img> ou <button>). Se houver href, ele vale mais.<img sw-lightbox sw-lightbox-src="grande.jpg" src="p.jpg">
Legenda e contador
sw-lightbox-capLegenda embaixo da foto. Sem ela, usa o title.sw-lightbox-cap="Sala de estar"
sw-lightbox-countfalse esconde o "2 / 5" da galeria. Padrão: aparece.sw-lightbox-count="false"
Galeria
sw-lightbox-grpMesmo nome em vários links = uma galeria com setas.sw-lightbox-grp="imovel"
sw-lightbox-setOutras fotos do álbum, separadas por vírgula (ou uma por linha), a partir de uma miniatura só. Ganha selo "+N".sw-lightbox-set="2.jpg, 3.jpg"
sw-lightbox-autoPassa sozinho a cada N milissegundos (só em galeria).sw-lightbox-auto="3000"
Zoom
sw-lightbox-zoomSem valor: clicar na foto aberta amplia 1,6×; clicar de novo volta.<a sw-lightbox sw-lightbox-zoom>
Teclado e toque (automático)
EscFecha.
← →Foto anterior / próxima.
arrastarNo celular, arrastar para o lado troca de foto.

Receitas prontas — usos reais

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

Galeria de imóvel em grade Ao vivo
FachadaSalaQuartoÁrea gourmet
<div class="l l-4 gap-3">
  <a sw-lightbox sw-lightbox-grp="apto-302" href="fotos/fachada.jpg" sw-lightbox-cap="Apto 302 — Fachada">
    <img class="r-m w-fl" src="fotos/fachada-p.jpg" alt="Fachada" loading="lazy">
  </a>
  <a sw-lightbox sw-lightbox-grp="apto-302" href="fotos/sala.jpg" sw-lightbox-cap="Apto 302 — Sala">
    <img class="r-m w-fl" src="fotos/sala-p.jpg" alt="Sala" loading="lazy">
  </a>
  <!-- …mais fotos com o mesmo sw-lightbox-grp… -->
</div>
Card de post com capa que abre o álbum Ao vivo
Reforma da cozinha
Reforma da cozinha

3 fotos · Bairro Funcionários

<article class="card">
  <a sw-lightbox href="reforma/1.jpg" sw-lightbox-set="reforma/2.jpg, reforma/3.jpg"
     sw-lightbox-cap="Reforma da cozinha — antes e depois">
    <img src="reforma/capa.jpg" alt="Reforma da cozinha">
  </a>
  <strong>Reforma da cozinha</strong>
  <p>3 fotos · Bairro Funcionários</p>
</article>
Abrir uma foto por código (ex.: botão "Ver planta") Ao vivo
<button type="button" sw-btn="out" id="ver-planta"><i class="swi-expand"></i> Ver planta</button>

<script>
  document.getElementById('ver-planta').addEventListener('click', () => {
    SW.Light.open('fotos/planta.jpg', { caption: 'Planta baixa — 72 m²', zoom: true });
  });
</script>
Contar fotos vistas (eventos) Referência
// os eventos saem no document
document.addEventListener('sw:lightbox:open', (e) => {
  console.log('abriu em', e.detail.src, 'posição', e.detail.index);
});
document.addEventListener('sw:lightbox:change', (e) => {
  console.log('trocou para', e.detail.src);
});
document.addEventListener('sw:lightbox:close', () => {
  console.log('fechou a galeria');
});

Eventos

sw:lightbox:open
No document, uma vez, quando a galeria abre. e.detail = { index, src } da foto que abriu.
sw:lightbox:change
No document, a cada troca de foto com a galeria já aberta. e.detail = { index, src } da foto nova.
sw:lightbox:nav
No document, ao trocar de foto (setas, teclado, arrastar, automático). e.detail.index.
sw:lightbox:close
No document, ao fechar.

API (JavaScript)

SW.Light.open(url, { caption, zoom })
Abre uma foto pelo endereço. O segundo parâmetro pode ser só o texto da legenda: SW.Light.open("a.jpg", "Legenda").
SW.Light.close()
Fecha.
SW.Light.next() / SW.Light.prev()
Próxima / anterior da galeria aberta.
SW.Light.initAll(raiz)
Liga os [sw-lightbox] dentro de raiz. O núcleo já faz sozinho.

Precisa de quê

  • swcore.min.css + swcore.min.js.
  • swcore.compl.min.css — os ícones das setas ‹ › (sem ele as setas ficam vazias).

Cuidados — erros comuns

  • O nome no JavaScript é SW.Light, não SW.Lightbox.
  • Usar a mesma imagem pesada na miniatura e no href: a página fica lenta. Tenha uma miniatura pequena e a foto grande só no href.
  • Esquecer o alt da miniatura: é ele que o Google e o leitor de tela leem.
  • Nome de galeria repetido em dois lugares da página (dois imóveis com sw-lightbox-grp="fotos"): as fotos dos dois se misturam. Use nomes diferentes.
  • No sw-lightbox-set, a legenda (sw-lightbox-cap) aparece só na primeira foto.

O que ele não faz

  • Só imagens: não abre vídeo, PDF nem página.
  • Não tem miniaturas embaixo da foto aberta nem botão de baixar/compartilhar.
  • O zoom é fixo (1,6×), sem pinça de dois dedos.