Artigo original: The CSS Position Property Explained with Examples
Antes de poder ser muito bom em CSS, você precisa entender o básico. É preciso entender as propriedades do CSS e seus valores.
Neste artigo, nos concentraremos na propriedade position
do CSS. Aprenderemos sobre os vários valores dessa propriedade e sobre como eles funcionam. Vamos lá!
O que é a propriedade position do CSS?
A propriedade position
do CSS define a posição de um elemento em um documento. Essa propriedade funciona em conjunto com as propriedades left
, right
, top
, bottom
e z-index
para determinar a posição final de um elemento em uma página.
Existem cinco valores que a propriedade position
pode receber. Elas são:
static
relative
absolute
fixed
sticky
Vamos discutir cada uma delas.
Static
Esse é o valor padrão para os elementos. O elemento é posicionado de acordo com o fluxo normal do documento. As propriedades left
, right
, top
, bottom
e z-index
não afetam um elemento com position: static
.
Vamos usar um exemplo para mostrar que position: static
não afeta a posição de um elemento. Colocamos três elementos div
em um contêiner (elemento pai). Usaremos esse mesmo exemplo pelo resto do artigo.
<html>
<body>
<div class="parent-element">
<div class="sibling-element">
I'm the other sibling element.
</div>
<div class="main-element">
All eyes on me. I am the main element.
</div>
<div class="sibling-element">
I'm the other sibling element.
</div>
</div>
</body>
<html>
Vamos adicionar position: static
à div com a classe main-element
e valores para left
e top
para ela. Também adicionaremos alguns estilos às outras divs para diferenciá-las do elemento importante.
.main-element {
position: static;
left: 10px;
bottom: 10px;
background-color: yellow;
padding: 10px;
}
.sibling-element {
padding: 10px;
background-color: #f2f2f2;
}
Este é o resultado.
Percebeu que não há mudança? Isso confirma o fato de que as propriedades left
e bottom
não afetam um elemento com a position: static
.
Vamos passar para o próximo valor.
Relative
Elementos com a position: relative
permanecem no fluxo normal do documento. Porém, diferente dos elementos com a posição estática, left
, right
, top
, bottom
e z-index
afetam a posição do elemento. Um deslocamento, com base nos valores das propriedades left
, right
, top
e bottom
, é aplicado ao elemento relativo a si mesmo.
Vamos substituir position: static
por position: relative
em nosso exemplo.
.main-element {
position: relative;
left: 10px;
bottom: 10px;
background-color: yellow;
padding: 10px;
}
Perceba que as propriedades left
e bottom
agora afetam a posição do elemento. Veja, também, que o elemento permanece no fluxo normal do documento e que o deslocamento é aplicado com relação a si mesmo. Preste atenção a isso ao passarmos para os outros valores.
Absolute
Elementos com position: absolute
são posicionados em relação aos seus elementos pai. Nesse caso, o elemento é removido do fluxo normal do documento. Os outros elementos se comportarão como se aquele elemento não estivesse no documento. Não é criado um espaço para o elemento no layout da página. Os valores de left
, top
, bottom
e right
determinam a posição final do elemento.
Outra coisa que merece ser observada é que um elemento com position: absolute
é posicionado com relação ao seu ancestral posicionado mais próximo. Isso quer dizer que o elemento pai precisa ter um valor de position
diferente de position: static
.
Se o elemento pai mais próximo não estiver posicionado, ficará posicionado com relação ao elemento pai mais próximo que estiver posicionado. Se não houver elemento ancestral posicionado, sua posição será relativa ao elemento <html>
.
Vamos voltar ao nosso exemplo. Nesse caso, mudamos a posição do elemento principal para position: absolute
. Daremos ao seu elemento pai o valor position: relative
para que main
não fique posicionado com relação ao elemento <html>
.
.main-element {
position: absolute;
left: 10px;
bottom: 10px;
background-color: yellow;
padding: 10px;
}
.parent-element {
position: relative;
height: 100px;
padding: 10px;
background-color: #81adc8;
}
.sibling-element {
background: #f2f2f2;
padding: 10px;
border: 1px solid #81adc8;
}
Este é o resultado.
Observe que não é criado um espaço no documento para o elemento. Ele agora está posicionado relativo ao elemento pai. Preste atenção enquanto passamos para o próximo valor.
Fixed
Elementos com position: fixed
são semelhantes aos elementos com position: absolute
. Eles também são removidos do fluxo normal do documento. Porém, diferente daqueles com position: absolute
, eles ficam sempre posicionados em relação ao elemento <html>
.
Algo importante de se observar é que elementos com position: fixed
não são afetados pela rolagem. Eles sempre permanecem na mesma posição na tela.
.main-element {
position: fixed;
bottom: 10px;
left: 10px;
background-color: yellow;
padding: 10px;
}
html {
height: 800px;
}
Nesse caso, o elemento é posicionado com relação ao elemento <html>
. Experimente usar a barra de rolagem para ver que o elemento permanece fixo na tela.
Vamos passar agora para o valor final.
Sticky
position: sticky
é uma mistura de position: relative
e position: fixed
. Ele age posicionado relativamente até determinado ponto de rolagem. Então, ele age como um elemento com position: fixed
. Não se preocupe se você não entende o que isso significa. O exemplo ajudará você a entender melhor.
.main-element {
position: sticky;
top: 10px;
background-color: yellow;
padding: 10px;
}
.parent-element {
position: relative;
height: 800px;
padding: 50px 10px;
background-color: #81adc8;
}
Faça a rolagem na guia Result para ver o resultado. Você perceberá que ele age como um elemento relativo até que chegamos a determinado ponto da tela, top: 10px
. Então, ele passa a se comportar como um elemento fixo.
Resumo
Opa! Essa foi uma viagem e tanto. Espero realmente que este artigo tenha ajudado você a entender a propriedade position
do CSS e como ela funciona.
Fique à vontade para brincar com os exemplos caso não tenha entendido completamente algum deles. Você pode mudar os valores e perceber as diferenças ou, melhor ainda, tentar usar a propriedade position
para trabalhar em um projeto pessoal.
Lembre-se de que melhorar no CSS requer prática constante. Por isso, mantenha-se na prática e você melhorará. Agradecemos pela leitura! 😀