CSS position: cinco valores, uma demo ao vivo

Guia de CSS position

CSS position: demo de static, relative, absolute, fixed e sticky | We.Inc

Alterne um elemento entre static, relative, absolute, fixed e sticky dentro de uma demo com rolagem. Containing blocks, inset, solução de problemas do sticky e centralização explicados.

A propriedade position escolhe como um elemento é posicionado. static é o fluxo normal. relative o desloca um pouco, mantendo o seu espaço. absolute o tira do fluxo e o posiciona em relação ao ancestral posicionado mais próximo. fixed o prende ao viewport. sticky rola normalmente até atingir um limite como top: 0 e então fica parado ali.

Os cinco valores

A demo abaixo tem uma caixa laranja dentro de uma área com rolagem. Troque o valor de position, mova os deslocamentos, role e veja a partir de onde ela é medida. Em seguida vêm um guia sobre containing blocks, um checklist para o sticky que não gruda e o atalho inset.

Perguntas frequentes

Qual é a diferença entre absolute e relative?

relative desloca um elemento visualmente, mas deixa o seu espaço original no layout, então nada ao redor se move. absolute tira o elemento do layout por completo, os vizinhos fecham o espaço, e top ou left são medidos a partir do ancestral posicionado mais próximo, e não de onde ele estaria.

Por que position: sticky não funciona?

As causas comuns são um valor de top ausente, um ancestral com overflow hidden ou auto, ou um pai que não é mais alto que o elemento sticky. Siga o checklist desta página em ordem; os dois primeiros itens resolvem a maioria dos casos.

Em relação a quê o absolute é posicionado?

Ao seu containing block: a padding box do ancestral mais próximo cujo position seja qualquer coisa diferente de static. Ancestrais com transform, filter ou certos valores de contain também contam. Se nenhum existir, é o containing block inicial, que tem o tamanho do viewport.

Por que meu cabeçalho fixed se move com a página?

Algum ancestral tem transform, perspective, filter, backdrop-filter, will-change: transform ou contain: paint. Qualquer um deles transforma esse ancestral no containing block dos descendentes fixed, então o cabeçalho fica fixo nele em vez de na tela.

O que é inset no CSS?

Um atalho para top, right, bottom e left, seguindo o mesmo padrão de um a quatro valores do margin. inset: 0 estica um elemento posicionado por todo o seu containing block. inset-inline e inset-block definem os pares de cada eixo.

O containing block, em palavras simples

Centralizando com posicionamento absolute

Cada valor em detalhe

Valores de position

O que cria um containing block para absolute e fixed

Ancestrais que capturam descendentes posicionados (segundo o MDN)

Padrões que você vai usar

Selo no canto de um card

O card é o ancestral posicionado. Deslocamentos negativos empurram o selo até a metade para fora do canto.

Cabeçalho de tabela sticky

O wrapper rola, então o th com top: 0 gruda nele. O fundo impede que as linhas apareçam por trás.

Atalho inset

Mesmo padrão do margin: um valor para todos os lados, dois para vertical e horizontal, quatro em sentido horário a partir do topo.

Playground de position

valor de position

O pai tem position: relative

Os deslocamentos são ignorados. A caixa fica no fluxo normal entre os parágrafos.

A caixa é desenhada deslocada, mas o espaço onde ela estaria é mantido. Os vizinhos não se movem.

Medida a partir do pai tracejado, que tem position: relative.

Não há pai posicionado, então ela é medida a partir da área de rolagem da demo, o próximo ancestral posicionado acima.

Presa à moldura da demo enquanto você rola. A moldura tem um transform, o que a torna o containing block em vez da janela do navegador.

Rola com o texto até ficar a top pixels do topo do contêiner de rolagem e então fica parada até o pai sair da tela.

Área de demo com rolagem

Role dentro desta moldura. O texto é de preenchimento, só para haver algo para rolar.

Pai

Primeiro parágrafo antes da caixa.

Parágrafo depois da caixa. Veja se ele sobe quando a caixa sai do fluxo.

Linha {n} de conteúdo extra para rolar.

Conteúdo depois do pai, linha {n}.

Copiar CSS

Por que o fixed fica na moldura: a moldura tem transform: translateZ(0). Qualquer transform transforma um elemento no containing block dos descendentes fixed. Em uma página real sem um ancestral assim, o fixed se prende à janela do navegador.

Sticky não funciona: checklist

Cabeçalho sticky escondido atrás de outro conteúdo? Veja

z-index e contextos de empilhamento

Comece grátis · Sem cartão de crédito

Relacionados: Guias

Produto

Para quem é

Recursos

Recursos

Empresa

Mapa do site