SWCore / CSS / Posição

Posição CSS

Absoluto, fixo, sticky — e um selo no canto ou um overlay cobrindo o pai, prontos.

O que é

Utilitários de posicionamento CSS, incluindo dois padrões prontos muito comuns: selo no canto e camada cobrindo o elemento pai inteiro.

Como funciona

.abs só funciona ancorado a um pai com .rel — sem isso, ele se posiciona relativo à página inteira. .abs-fill e .abs-mid são atalhos que já combinam .abs com a ancoragem certa, então não precisam do .pin-* separado.

Exemplos

Selo — os 4 cantos, com .rel + .abs + .pin-* Ao vivo
pin-t pin-l
pin-t pin-r
pin-b pin-l
pin-b pin-r
<!-- a regra de ouro: o PAI precisa ser .rel, senão o filho se ancora na página -->
<div class="rel">
  <span class="abs pin-t pin-r">selo no canto</span>
</div>

<!-- lados: .pin-t (topo) .pin-r (direita) .pin-b (baixo) .pin-l (esquerda) -->
Eixo inteiro e 4 lados — pin-x, pin-y e pin Ao vivo
pin-x pin-b — faixa embaixo
pin-y pin-l
pin — 4 lados
<span class="abs pin-x pin-b">faixa colada embaixo, de ponta a ponta</span>
<span class="abs pin-y pin-l">faixa vertical na esquerda</span>
<span class="abs pin">cobre os 4 lados do pai</span>
Atalhos — abs-fill e abs-mid Ao vivo
abs-fill (overlay)
abs-mid
<!-- .abs-fill já é .abs + os 4 lados: a camada que cobre o pai -->
<div class="rel">
  <img src="/foto.jpg" class="abs-fill of-cov" alt="">
  <span class="abs-fill">véu por cima da imagem</span>
</div>

<!-- .abs-mid já é .abs + centralização por transform -->
<div class="rel">
  <span class="abs-mid">bem no meio do pai</span>
</div>

<!-- por isso estes dois NÃO precisam de .pin-* junto -->
Sticky de verdade — role a caixa Ao vivo
.stk — eu grudo no topo desta caixa
Role aqui dentro.
O cabeçalho acima fica preso no topo do contêiner enquanto este texto passa por baixo.
Linha
Linha
Linha
Linha
Linha
Linha
Linha
Linha
Linha
Fim.
<div style="overflow:auto; height:40rem">
  <div class="stk">cabeçalho que gruda no topo do CONTÊINER</div>
  <div>…conteúdo longo…</div>
</div>

<!-- .stk-nav faz o mesmo, mas grudando logo ABAIXO da navbar fixa
     (ele já desconta a altura dela, via var(--sw-navbar-h)) -->
<div class="stk-nav">gruda abaixo da navbar</div>
Rolagem só na horizontal — .ovx Ao vivo
bloco largo 1
bloco largo 2
bloco largo 3
bloco largo 4
bloco largo 5
<!-- salva tabela larga no celular: rola de lado, não quebra o layout -->
<div class="ovx">
  <table>…muitas colunas…</table>
</div>
Camadas nomeadas (z-index) Ao vivo
z-bot z-bas z-nvb z-m
<!-- em vez de chutar z-index: 9999, use a escala nomeada -->
<span class="abs z-bot">lá no fundo</span>
<span class="abs z-bas">base</span>
<span class="abs z-nvb">altura da navbar</span>
<span class="abs z-m">por cima de tudo (modal)</span>
As 5 posições, lado a lado Ao vivo
rel
âncora pros filhos
abs
sai do fluxo
fix
preso na tela
stk
gruda ao rolar
sta
volta ao normal
<div class="rel">relative — vira âncora pros filhos .abs</div>
<div class="abs">absolute — sai do fluxo, ancora no .rel mais próximo</div>
<div class="fix">fixed — preso na TELA, ignora o scroll</div>
<div class="stk">sticky — rola junto e gruda ao chegar no topo</div>
<div class="sta">static — desfaz o posicionamento (útil em responsivo)</div>

Atributos

Nenhum.

Variantes

rel · abs · fix · stk · sta
position: relative / absolute / fixed / sticky / static
stk-nav
sticky que gruda ABAIXO da navbar (usa var(--sw-navbar-h))
pin-t · pin-r · pin-b · pin-l
gruda numa borda (combine com abs)
pin-x · pin-y
gruda num eixo inteiro (esquerda+direita / cima+baixo)
pin (4 lados) · pin-mid
gruda nas 4 bordas / centraliza via transform
abs-fill
atalho: camada absoluta cobrindo o pai inteiro (overlay)
abs-mid
atalho: centralizado no pai (absoluto + transform)
ovx
overflow-x auto — rola só na horizontal (tabela larga no mobile)
z-bot · z-bas · z-nvb · z-m
escala de camada (z-index) nomeada

Eventos

Nenhum.

API (JavaScript)

Nenhum.

Requisitos

Nenhuma.

Limitações — o que ele não faz

  • O .stk não funciona se algum ancestral tiver overflow:hidden — é regra do CSS, não do framework. Se o sticky "não gruda", procure o overflow escondido no pai.