Diferença entre position: static, relative, absolute e fixed

Postado por: Pedro Rogério em

Neste tutorial vamos aprender a diferença entre position: static, relative, absolute e fixed no CSS.

position: static

Esse é o valor default para todo elemento HTML, o que significa que o elemento não tem posicionamento definido e seu fluxo ocorre normalmente no documento HTML.

#div1 {position: static}

Não é necessário definir position:static para os elementos da página pois esse é o valor default.

position: relative

Especificando position:relative agora você pode utilizar top ou bottom, right ou left para posicionar os elementos na página em relação ao lugar que ele ocuparia no fluxo do documento.

#div1 {
	position: relative;
    top: 40px;
    left: 20px;
}

Nesse exemplo posicionamos o elemento a 40px do topo e a 20px da esquerda em relação ao lugar que ele ocuparia no fluxo do documento. Vale lembrar que utilizando position:relative todo esse espaço que foi definido ainda continua sendo ocupado pelo elemento na página. Exemplo.

position: absolute

Utilizando position: absolute agora podemos posicionar exatamente nosso elemento em relação ao primeiro elemento pai com posição diferente de “static” numa sequência até parar no body.

#div1 {
	position: absolute;
    top: 40px;
    right:0;
}

Vale lembrar que a patir do momento que utilizamos position: absolute ele perde a ordem no fluxo do documento e o espaço ocupado passa a não existir mais. Exemplo.

position:relative + position: absolute

Observem o seguinte código HTML:

<div id="div1">
	<div id="div2"></div>
</div>

Se definirmos position: relative para a div1 e position: absolute para a div2 a partir de agora a div2 se posicionará absolutamente em relação a div1, não mais em ralação ao body da página. Exemplo.

position: fixed

#div1 {
	position: fixed;
    top:40px;
    left:10px;
}

Posiciona um elemento fixadamente na página em relação a janela, ou seja, independente de a pagina conter um scroll ou não, o elemento sempre ficará visíve ao usuário em relação as medidas definidas. Vale lembrar que esse tipo de posicionamento não funciona no Internet Explorer. Exemplo.

Posts Relacionados

Confira também outros artigos interessantes postados aqui no blog.

Gostou desse post?

Assine o nosso Feed RSS, siga-nos no Twitter, ou simplesmente nos recomende a seus amigos!

Sobre Pedro Rogério

Pedro Rogério é desenvolvedor web por paixão, não saberia fazer melhor outra coisa. Além de escrever para o CSS no Lanche também escreve para o Pinceladas da Web, blog com assuntos gerais sobre desenvolvimento web.

25 Responses to “Diferença entre position: static, relative, absolute e fixed”

  1. O position fixed não funciona no IE6- né? no IE7 funciona normalmente. Ou estou enganado?

  2. Ruan Carlos disse:

    Cara está errado ali.

    No ultimo exemplo está como static. O correto seria fixed.

    E
    Posiciona um elemento estaticamente
    Talvez possa ser
    Posiciona um elemento fixadamente

    Ruan Carlos

  3. @Julio César,

    Sim, no IE7 ele já funciona.

    @Ruan Carlos,

    Foi um erro meu que eu nem havia reparado, já consertei aqui, obrigado pela dica.

  4. Tiago A, disse:

    Grande Pedro Rogério! Ótimo post. Esclareceu minhas dúvidas. Abraço.

  5. Dan Alvares disse:

    Outra dica boa para entendimento de posicionamento com CSS é esse site aqui:
    http://www.barelyfitz.com/screencast/html-training/css/positioning/

    Em inglês.

  6. Massa!

    A novidade para mim foi o absolute ficar relativo ao item pai quando o pai está position:relative.

    Valeu a dica

  7. Rafael Veloso disse:

    Muito bom, esse é um post que tem que ser bem explicado como o pedro fez ai pq se não o leitor sai mais confuso ainda ehhehe…Valeu Pedrão

    t+

  8. Ruan Carlos disse:

    @Lourenzo

    Isso é muito comum em menus.

  9. PIetro disse:

    Alguem pode me explicar o que ou quem seria o item pai ??!!

  10. @Pietro,

    Observe a seguinte marcação HTML que você irá entender isso na hora:

    <div id=”pai”>
    <div id=”filho”></div>
    </div>

  11. Genio disse:

    Não esta muito bom essi tutorial poderia ser muito melhor..Basta caprichar um poco mais na explicação!
    ObG.

  12. eu disse:

    Tinha que ser o Genio mesmo!!!

  13. Nilton Dias disse:

    position: fixed; EI7+ FUNCIONA.
    position: fixed; EI6- QUEBRA LAYOUT*.

    *EU CHAMO QQ ERRO DE RENDERINZAÇÃO DE “QUEBRA LAYOUT”

    Um abraço a todos,
    nilton.com@gmail.com
    nilton.com@hotmail.com
    (A felicidade está ao seu alcance eo sucesso próximo.)

    • Marcelo disse:

      Enterrem o IE6.
      A gente precisa se unir e reivindicar uma web melhor.
      Navegadores como o IE6 tornaram a vida dos programadores um verdadeiro inferno.

      O negócio agora é ir pra frente e exigir uma compatibilidade cada vez melhor como CSS, sob risco de boicote.

  14. Scientist disse:

    Olá muito bom, deu pra esclarecer bem algumas duvidas, mas ainda tenho uma duvida estou criando um site com css e usei position: absolute
    nao sei se tem a ver, mas ao minimizar os elementos ficam de forma desorganizada, poderia me ajudar com isso?
    VALEU t+

  15. Antonio disse:

    Muito bom. Muito útil para alguns projetos que estou desenvolvendo.

  16. Danilo Ramos disse:

    Acho q vc devia dar exemplos mais claros !

    • Henrique disse:

      Você quer que ele faça a prova do vestibular pra você tb? quer que ele faça seu trabalho e você apenas pegar a grana?

      Deve estar de brincadeira

  17. Valew Camarada!
    Me ajudou muito hoje…

  18. Lucas disse:

    LOL, eu ia dizer que você precisava dar exemplo visuais, mais eu vi que clicando no link exemplo ver. Me ajudou muito, obrigado.

  19. Lucas disse:

    Tipo, apesar de ter ajudado não entendi nada sobre oque é absoluto e relativo nesse caso;

  20. Leo disse:

    Estou com um problema simples pra quem manja de CSS (o que não é o meu caso):

    Fiz um site em Flash CS5, com 1920×1080 pixels. Estou tentando alinhá-lo ao centro absoluto HORIZONTAL, deixando o alinhamento vertical no topo normal mesmo.

    Consegui banir o scroll horizontal, deixando apenas o horizontal. Mas não consigo de forma alguma fazer com que o navegador IGNORE o tamanho HORIZONTAL excedente (1920px) e sempre deixe CENTRALIZADO HORIZONTALMENTE.

    Estou quase lá, consegui fazer com que as medidas horizontais fossem posicionadas onde eu quero, mas ela variam de acordo com a resolução do monitor do usuário, descentralizando o site.

    O meu código atual é:

    body {
    overflow-x: hidden;
    background-image: url(fundo.jpg);
    position: relative;
    right:22%;
    margin:0 auto;
    padding:0px
    }

    Como proceder pra que o navegador abra sempre CENTRALIZADO HORIZONTALMENTE?

    Estou à quase 20 dias tentando e não consigo. Obrigado e parabéns pelo site!

    • James disse:

      Amigo, acho que a resolução desse flash esta muito alta, poucas pessoas conseguiram visualizar por completo, de qualquer forma segue a solução para conseguir centralizar vertical/horizontal:

      #div-flash {
      width:1920px;
      height:1080px;
      top:50%;
      left:50%;
      margin-top:-540px; // (height / 2)
      margin-left:-960px; // (width / 2)
      position: absolute;
      }

      aqui vai o seu flash

Leave a Reply