Posição CSS
Colocar uma coisa em cima da outra: selo no canto do card, legenda sobre a foto, cabeçalho que gruda ao rolar — tudo com classes curtas.
O que é
São classes para tirar um elemento do lugar normal dele e prendê-lo onde você quer: no canto de um card ("Novo", "-20%"), cobrindo uma foto inteira (véu, legenda), no meio de uma caixa, grudado no topo enquanto a pessoa rola, ou preso na tela (botão do WhatsApp). Também tem as classes de rolagem (a caixa rola de lado ou para baixo) e de camada (quem fica por cima de quem).
É só CSS. A regra de ouro: o pai recebe rel (vira a "moldura") e o filho recebe abs + um pin-* dizendo em qual canto ou lado ele gruda. Sem o rel no pai, o filho procura a moldura mais acima — às vezes a página inteira — e vai parar no lugar errado.
Quando usar
- Selo no canto de um card ou foto ("Novo", "Esgotado", "-20%"): pai
rel, seloabs pin-t pin-r. - Camada cobrindo a foto inteira (véu escuro, legenda, botão "Ver fotos"):
abs-fill. - Algo bem no meio de uma caixa (ícone de play sobre o vídeo):
abs-mid. - Cabeçalho que gruda no topo enquanto a lista rola:
stk(oustk-navpara grudar logo abaixo do menu fixo). - Botão preso na tela (WhatsApp, voltar ao topo):
fix pin-b pin-r. - Tabela larga no celular: envolva numa caixa
ovx— ela rola de lado e não quebra a página.
Comece aqui
-
1
Coloque o SW Core no
<head>. As classes de posição estão no arquivo principal.<link rel="stylesheet" href="swcore/swcore.min.css"> -
2
Marque o pai com
rele o filho comabs+ o canto. Aqui, um selo no canto de cima à direita.Novo
<div class="rel ar-16-9 r-m ov-hi"> <img src="/sapato.jpg" alt="Sapato social" class="abs-fill media-fill"> <span class="abs pin-t pin-r m-p" sw-badge="pri g">Novo</span> </div>
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. Selo nos 4 cantos
Pai com rel, filho com abs + um lado vertical (pin-t topo / pin-b baixo) + um lado horizontal (pin-l esquerda / pin-r direita). O m-p só dá um respiro da borda.
<div class="rel ar-16-9 w-fl bg-sur bd r-m">
<span class="abs pin-t pin-l m-p" sw-badge="err g">-20%</span>
</div>
<div class="rel ar-16-9 w-fl bg-sur bd r-m">
<span class="abs pin-t pin-r m-p" sw-badge="pri g">Novo</span>
</div>
<div class="rel ar-16-9 w-fl bg-sur bd r-m">
<span class="abs pin-b pin-l m-p" sw-badge="suc g">Em estoque</span>
</div>
<div class="rel ar-16-9 w-fl bg-sur bd r-m">
<span class="abs pin-b pin-r m-p" sw-badge="drk g">3 fotos</span>
</div>
2. Faixas, cobrir tudo e centro
pin-x estica de ponta a ponta na horizontal, pin-y de cima a baixo, pin cola nos 4 lados e pin-mid centraliza. Todos precisam do abs junto.
<div class="rel ar-16-9 w-fl bg-sur bd r-m ov-hi">
<span class="abs pin-x pin-b bg-pri p-p t-ct t-p">Frete grátis</span>
</div>
<div class="rel ar-16-9 w-fl bg-sur bd r-m ov-hi">
<span class="abs pin-x pin-t bg-err p-p t-ct t-p">Últimas unidades</span>
</div>
<div class="rel ar-16-9 w-fl bg-sur bd r-m ov-hi">
<span class="abs pin-y pin-l bg-pri p-p flx alc t-p">Top</span>
</div>
<div class="rel ar-16-9 w-fl bg-sur bd r-m ov-hi">
<span class="abs pin bg-pri-soft flx alc j-ct">Cobre tudo</span>
</div>
<div class="rel ar-16-9 w-fl bg-sur bd r-m"><span class="abs pin-mid" sw-badge="pri g">No meio</span></div>
3. Atalhos prontos: abs-fill e abs-mid
Dois atalhos que já trazem o abs embutido — não precisa escrever abs nem pin-* junto. abs-fill = camada que cobre o pai inteiro. abs-mid = centralizado no pai.
<div class="rel ar-16-9 r-m ov-hi">
<img src="/foto.jpg" alt="" class="abs-fill media-fill">
<span class="abs-fill scrim-f flx alc j-ct">
<span sw-badge="pri g">Ver galeria</span>
</span>
</div>
<div class="rel ar-16-9 r-m ov-hi">
<img src="/capa-video.jpg" alt="" class="abs-fill media-fill">
<span class="abs-mid">
<button sw-btn="glass rnd g" aria-label="Assistir"><i class="swi-play"></i></button>
</span>
</div>
4. Grudar ao rolar (sticky)
stk rola junto com o conteúdo até chegar no topo da caixa que rola — aí ele gruda. Role dentro dos quadros.
Pedido #1041 — Maria
Pedido #1042 — João
Pedido #1043 — Ana
Pedido #1044 — Carlos
Pedido #1045 — Paula
Pedido #1046 — Lucas
Pedido #1047 — Bia
<div class="ar-4-3 ovy bd r-m"> <!-- caixa que rola, com altura -->
<div class="stk bg-pri p-p fw6">Março · 12 pedidos</div>
<p class="p-p m-0">Pedido #1041 — Maria</p>
<p class="p-p m-0">Pedido #1042 — João</p>
<!-- …mais pedidos… -->
</div>
Ana
André
Antônio
Beatriz
Bruno
Bianca
Carla
César
<div class="ar-4-3 ovy bd r-m">
<div class="stk bg-sur bd-b bd-mut p-p fw6">A</div>
<p class="p-p m-0">Ana</p>
<p class="p-p m-0">André</p>
<div class="stk bg-sur bd-b bd-mut p-p fw6">B</div>
<p class="p-p m-0">Beatriz</p>
<!-- …um stk por letra… -->
</div>
5. Rolagem dentro da caixa
Quando o conteúdo não cabe: ovx rola só de lado, ovy só para baixo, ov-hi corta o que sobra. Role dentro dos quadros.
<div class="ovx bd r-m">
<div class="flx gap-3 p-p w-min">
<span sw-badge="pri g">Segunda</span>
<span sw-badge="pri g">Terça</span>
<!-- …até Sábado… -->
</div>
</div>
<div class="ar-16-9 ovy bd r-m p-p t-p">Termos de uso. Ao contratar…</div>
<div class="rel ar-16-9 bg-sur bd r-m ov-hi">
<span class="abs pin-t pin-r" sw-badge="err xg">Esgotado</span>
</div>
Tabela de opções
| Palavra | O que faz | Exemplo |
|---|---|---|
| Posição (o tipo) | ||
rel | Fica no lugar normal, mas vira a "moldura" para os filhos abs. | <div class="rel"> |
abs | Sai do fluxo e se prende na moldura rel mais próxima. Use com um pin-*. | <span class="abs pin-t pin-r"> |
fix | Preso na tela: não sai do lugar quando a página rola. | <a class="fix pin-b pin-r"> |
stk | Rola junto e gruda no topo da caixa que rola (topo = 0). | <div class="stk"> |
stk-nav | Igual ao stk, mas gruda logo abaixo do menu fixo (usa a altura do menu, padrão 7rem). | <aside class="stk-nav"> |
sta | Volta ao normal — desfaz a posição (útil para cancelar num tamanho de tela). | <div class="sta"> |
| Onde grudar (use junto com abs ou fix) | ||
pin-t | Gruda no topo. | class="abs pin-t pin-l" |
pin-r | Gruda na direita. | class="abs pin-t pin-r" |
pin-b | Gruda embaixo. | class="abs pin-b pin-l" |
pin-l | Gruda na esquerda. | class="abs pin-b pin-l" |
pin-x | Estica da esquerda até a direita. | class="abs pin-x pin-b" |
pin-y | Estica de cima até embaixo. | class="abs pin-y pin-l" |
pin | Cola nos 4 lados (cobre o pai). | class="abs pin" |
pin-mid | Centraliza no meio exato. | class="abs pin-mid" |
| Atalhos (já trazem o abs) | ||
abs-fill | Camada que cobre o pai inteiro. Não precisa de abs nem pin. | <span class="abs-fill"> |
abs-mid | Centralizado no pai. Não precisa de abs nem pin. | <span class="abs-mid"> |
| Rolagem (overflow) | ||
ovx | Rola só de lado; o que passa para baixo fica cortado. | <div class="ovx"> |
ovy | Rola só para baixo; o que passa de lado fica cortado. | <div class="ovy"> |
ov-hi | Corta tudo que sair da caixa (sem rolagem). | <div class="ov-hi"> |
ov-au | Mostra a barra de rolagem só se precisar, nas duas direções. | <div class="ov-au"> |
ov-vi | Deixa o conteúdo vazar para fora (desfaz um corte). | <div class="ov-vi"> |
ov-cl | Corta como o ov-hi, mas sem virar caixa de rolagem (não atrapalha o stk dos filhos). | <div class="ov-cl"> |
| Camada (quem fica por cima) | ||
z-bot | Atrás de tudo (camada -1). | <img class="abs-fill z-bot"> |
z-bas | Camada base (0). | class="z-bas" |
z-nvb | Na altura do menu fixo (100). | class="fix z-nvb" |
z-m | Por cima de tudo, nível de modal (10000). | class="fix z-m" |
Receitas prontas — usos reais
Situações que aparecem em quase todo site. Copie a que servir.
R$ 239,00
R$ 149,00
Avise-me
<div sw-card>
<div class="rel ar-4-3">
<img src="/sapato.jpg" alt="Sapato" class="media-fill">
<span class="abs pin-t pin-l m-p" sw-badge="err g">-20%</span>
</div>
<div class="sw-card-bdy">
<strong>Sapato social</strong>
<p class="m-0 t-mut">R$ 239,00</p>
</div>
</div>
<div class="rel ar-16-9 ov-hi">
<img src="/casa.jpg" alt="Fachada da casa" class="abs-fill media-fill">
<span class="abs pin-x pin-b bg-pri p-m t-ct fw6">Aberto para visitas neste sábado</span>
</div>
| Plano | Páginas | E-mails | Suporte | Domínio | Preço |
|---|---|---|---|---|---|
| Básico | 5 | 2 | Incluso | R$ 49/mês | |
| Loja | Ilimitadas | 10 | Incluso | R$ 129/mês |
<div class="ovx">
<table>
<thead>…</thead>
<tbody>…</tbody>
</table>
</div>
<!-- fix = preso na tela · pin-b pin-r = canto de baixo à direita
m-g = distância da borda · z-nvb = fica por cima do conteúdo -->
<a href="https://wa.me/5511999999999" class="fix pin-b pin-r m-g z-nvb"
sw-btn="suc rnd g" aria-label="Falar no WhatsApp">
<i class="swil-whatsapp"></i>
</a>
<!-- stk-nav gruda logo abaixo do menu fixo do topo (desconta a altura dele) -->
<div class="l l-4 gap-4">
<aside class="stk-nav">
<a href="#precos">Preços</a>
<a href="#duvidas">Dúvidas</a>
</aside>
<article>…texto longo…</article>
</div>
Precisa de quê
swcore.min.css— todas as classes desta página.
Cuidados — erros comuns
- Esquecer o
relno pai: oabsvai parar no canto da página, não do card. Semprerelno pai,absno filho. abssozinho não sabe onde ficar. Diga o canto compin-t/pin-r/pin-b/pin-l(ou use o atalhoabs-fill/abs-mid).- Imagem com
abs-fillprecisa também demedia-fill(ouw-fl h-fl of-cov). Sem isso ela fica no tamanho original dela e não cobre a caixa. - O pai de um
absprecisa ter altura. Se ele só tem o filhoabsdentro, ele fica com altura zero — dê altura com uma proporção (ar-16-9) ou com conteúdo. stk"não gruda": algum pai temoverflow: hidden(ouov-hi). Troque porov-cl, que corta sem atrapalhar.- Não escreva
z-index: 9999na mão. Use a escala pronta:z-nvbpara ficar junto do menu,z-msó para o que precisa ficar acima de tudo.
O que ele não faz
pin-mideabs-midcentralizam com a propriedadetranslate, separada dotransform: dá para usar direto num botãosw-btn(que sobe no hover), com zoom ou com animação — o centro não se perde. Só não escrevatransform: translate(-50%, -50%)no seu CSS junto deles: aí desloca duas vezes.- Não há classes de distância livre (ex.: "12 px do topo"). Para afastar da borda use margem (
m-p,m-m,m-g…).

