Position CSS: Definindo a posição de elementos com fixed, relative e absolute

Veja neste artigo uma comparação entre os valores da propriedade position no CSS e como utilizá-los de forma correta.

O CSS é essencial no design de aplicações web (e mobile, em alguns casos). Diretamente relacionado a isso, o posicionamento dos elementos é uma parte importante da criação dos layouts. Assim, precisamos conhecer e entender as possibilidades que temos dentro da propriedade position, isto é, as opções fixed, relative e absolute.


Guia do artigo:

A propriedade position também aceita o valor static, que representa o valor padrão, mas ele não indica posicionamento algum, ou seja, é o valor para "nenhum posicionamento específico" do elemento. Nesse artigo, veremos as diferenças entre essas opções e quando cada uma deve ser utilizada.

Opção 1: "position: relative"

A primeira opção de posicionamento para um elemento é a relative. Como o nome sugere, ela especifica uma posição relativa do elemento em relação a algo: o elemento pai.

A posição é definida através de quatro outras propriedades: top, bottom, left e right, que indicam a distância com relação ao topo, base, esquerda e direita, respectivamente, tomando como referência o posicionamento do elemento pai.

Para entendermos melhor esse conceito, vejamos o CSS da Listagem 1.

Listagem 1. CSS para position: relative.

.relative-parent {
   background: #156236;
}

.relative {
   background: #af8542;
   height: 100px;
   width: 300px;
   position: relative;
   top: 20px;
   left: 45px;
}

As classes definidas nessa folha de estilos são utilizadas no seguinte HTML:


<div class="relative-parent">
   <div class="relative">
   Elemento filho com posicionamento relativo
   </div>
</div>

Note que temos uma classe em cada elemento: uma representará o elemento pai e a outra, o elemento filho.

O resultado do que fizemos pode ser observado na Figura 1. À esquerda, temos o resultado com um CSS diferente, sem as linhas 9 a 11 da Listagem 1. Nesse caso, não há um posicionamento relativo de um elemento em relação ao outro, pois isso ainda não foi definido. Já à direita, temos o resultado com o CSS da Listagem 1 completo. Observe que o elemento filho está posicionado de forma relativa ao pai, por causa dos parâmetros que informamos na folha de estilos.

Figura 1. Position: relative.

Opção 2: "position: absolute;"

A segunda opção de posicionamento é a absolute, ou absoluto. Ela faz com que o elemento “saia” da hierarquia estabelecida pelo HTML – na prática, ele é filho da página e não de um elemento qualquer no HTML definido. Assim, é possível posicionarmos esse elemento em qualquer lugar da página, independentemente do que temos lá. Isso pode ser útil em casos que precisamos posicionar um alerta em nossa página, por exemplo, e não queremos “quebrar” o layout.

Apesar dessa possibilidade, é importante utilizar o layout absoluto de forma responsável, uma vez que ele, por não fazer parte da hierarquia da página, pode atrapalhar o desenvolvimento responsivo. Assim, o funcionamento em dispositivos com resoluções menores, como tablets e smartphones, pode ser prejudicado.

Na prática, para um HTML simples, como o apresentado a seguir, o <div> será filho de <body>. Entretanto, como especificamos um posicionamento absoluto, o elemento pai não nos interessa, uma vez que não consideraremos seu posicionamento como referência.


<div class="absolute">
Elemento com posicionamento absoluto
</div>

Note que a classe absolute, apresentada na Listagem 2, é bastante semelhante ao CSS que vimos na Listagem 1. No entanto, existem algumas diferenças importantes:

Listagem 2. CSS para position: absolute.

.absolute {
 background: #c590f5;
 height: 50px;
 width: 120px;
 position: absolute;
 top: 35px;
 right: 32px;
}

O resultado disso pode ser verificado na Figura 2, onde temos o novo elemento <div> posicionado no canto superior direito.

Figura 2. Position: absolute.

Opção 3: "position: fixed"

Por fim, temos a opção fixed, que funciona de forma diferente em relação às demais. Embora seja parecida com o posicionamento absoluto, com fixed o elemento “responde”, em termos de layout, ao navegador. Isso significa que, mesmo que naveguemos na página para cima e para baixo, o elemento ficará fixo na mesma posição sempre.

Esse tipo de posicionamento é especialmente útil em casos de menu, para que o usuário não perca o contato com a navegação enquanto lê uma notícia, por exemplo. Sites com conteúdo extenso costumam adotar essa opção para melhorar a experiência do usuário.

Para melhor compreender seu funcionamento, vejamos o exemplo da Figura 3, no qual inserimos o texto fictício lorem ipsum na página. Observe que, na janela à direita, a barra de rolagem nos mostra que estamos no topo da página; e, à esquerda, na base da mesma. Note que, em relação ao navegador, o novo elemento está exatamente na mesma posição (no canto inferior direito).

Figura 3. Position: fixed.

Para chegarmos a esse comportamento, apenas utilizamos uma nova classe CSS, fixed, como podemos observar no código abaixo:


<div class="fixed">
 Elemento com posicionamento fixo
</div>

A classe criada é, novamente, muito similar às que vimos nas Listagens 1 e 2. A diferença é que agora temos um position: fixed definido para os elementos, o que pode ser observado na Listagem 3.

Listagem 3. CSS para position: fixed.

.fixed {
 background: #a4c467;
 height: 50px;
 width: 300px;
 position: fixed;
 bottom: 60px;
 right: 32px;
} 

Com isso, aprendemos que o posicionamento no CSS é algo relativamente simples. É preciso, no entanto, um pouco de cuidado na hora de utilizar a propriedade, afinal, ela é interessante para o posicionamento pontual de determinados elementos. Ainda assim, antes de tomar essa decisão, considere o uso de outras opções, como a propriedade float ou técnicas de desenvolvimento responsivo com grids, como a adotada pelo Bootstrap e outros frameworks.


Confira também

Artigos relacionados