CSS HTML

Position, estilizando elementos com CSS.

Neste artigo nos iremos aprender sobre position em elementos no CSS, e sua importância para estilizações das nossas páginas web.

há 1 ano 7 meses

Formação Base para desenvolvedor
Conheça a formação em detalhes

O position é uma propriedade CSS que define como um elemento deve ser posicionado página, ou seja, no corpo do documento o body. Essa propriedade possui quatro propriedades que são top, bottom, right e left, respectivamente, topo, abaixo, direita e esquerda. Que determinam a localização final do elemento, que irá se deslocar conforme especificado na estilização.

Além dessas propriedades, o position possui cinco tipos atribuídos a ele, que determinam como o elemento será posicionado de acordo com página. Que são static, fixed, relative, absolute e sticky. E neste artigo nos aprenderemos como usar cada um deles para facilitar a criação de nossas páginas web. Para isso preciso que você possua conhecimento básico em HTML e CSS. Caso precise relembrar esses conhecimentos básicos, nós temos alguns artigos aqui no blog da TreinaWeb que podem te ajudar, são eles:

Static

HTML5 + CSS3 - Fundamentos
Curso HTML5 + CSS3 - Fundamentos
Conhecer o curso

Este tipo define o valor padrão que um elemento terá. Isso significa que se você não declarar a posição de um elemento via CSS, ele será automaticamente definido como static. Contudo, ele não recebe a declaração das quatro propriedades já citadas, pois, a posição já é estática por padrão, ou seja, é o mesmo que não definir a propriedade position.

Exemplo de como aplicar no CSS:

.treinaWeb {
	position: static;
}

Fixed

Este tipo faz o elemento ficar fixo na página, independente do scroll, ou seja, permanece sempre no mesmo lugar, mesmo que a página seja rolada para baixo ou para cima. Porque está posicionado em relação à janela de visualização. Além disso, recebe todas as propriedades do position.

Exemplo de como aplicar no CSS:

.treinaWeb {
	position: fixed;
	height:200vh;
	top: 200px;
	left: 400px;
}

Relative

Este tipo coloca o elemento em relação à sua posição atual sem alterar o layout ao redor dele, ou seja, podemos usar qualquer uma daquelas quatro propriedades citadas anteriormente, para fazer com que o elemento seja ajustado para fora da sua posição normal.

Exemplo de como aplicar no CSS:

.treinaWeb {
	position: relative;
	left: 200px;
}

Absolute

Este tipo posiciona o elemento ao elemento mais próximo dele, ou seja, ele possui uma hierarquia em relação a outro. Se um elemento posicionado absoluto não tiver ancestrais posicionados, ele usará o corpo do documento e se moverá com a rolagem da página.

Exemplo de como aplicar no CSS:

.container {
	position: relative;
}
.treinaWeb {
	position: absolute;
	top: 500px;
}

Sticky

HTML5 + CSS3 - Apresentação de Dados
Curso HTML5 + CSS3 - Apresentação de Dados
Conhecer o curso

Este tipo posiciona com base na barra de rolagem do usuário, ele fixa na tela quando se chega em sua posição, ou seja, ele alterna entre relativo e fixo.

.treinaWeb {
	position: sticky;
	top: 0;
}

Position na prática

Agora, utilizaremos as propriedades e tipos, na prática, para entender melhor como funcionam. Para isso, será necessário criamos um arquivo HTML e um arquivo CSS.

Código HTML:

<!DOCTYPE html>
<html lang="pt-BR">
<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
	<!--Importante: Caso crie um arquivo CSS com um nome diferente, lembre-se de alterar aqui-->
    <link rel="stylesheet" href="treinaweb.css" />

    <title>Treinaweb</title>
</head>
<body>
    <main>
        <div class="container">
            <div class="treinaWeb">
                <img src="https://yt3.ggpht.com/ytc/AMLnZu_ALATbKxOhI49nDGUy_wRKLoaEoQkdf-5F2NkA0g=s900-c-k-c0x00ffffff-no-rj" alt="treinaWeb" width="20%"  />
            </div>
        </div>
    </main>
</body>
</html>

Código CSS:

html,
body {
  margin: 0;
  padding: 0;
  background-color: #376fe9;
}

Resultado:

position-tela

Como podemos observar, definimos uma cor de fundo azul no body para diferenciar da cor da imagem e adicionamos um paddind: 0 e um margin: 0 para nossa imagem ficar fixada ao topo da página.

Assim, poderemos visualizar as futuras alterações.

Alterando posições do elemento com Position

HTML5 + CSS3 - Dominando o Flexbox
Curso HTML5 + CSS3 - Dominando o Flexbox
Conhecer o curso

Inicialmente utilizaremos o position fixed, com as seguintes propriedades CSS:

html,
body {
  margin: 0;
  padding: 0;
  background-color: #376fe9;
}

.container {
  height:500em;
}

.treinaWeb {
  position: fixed;
  top: 200px;
  left: 400px;
}

Resultado:

position

Observando o resultado, nós podemos visualizar que mesmo descendo a barra de rolagem, a nossa imagem permanece fixa na tela. E, se deslocou 200px em relação ao topo e 400px em relação à esquerda da nossa página.

Se observamos, podemos notar que a imagem está menor em relação à anterior, isso porque definimos agora uma altura para a tela no container de 500em, e ela está aplicando o seu tamanho para classe .treinaWeb e não ao tamanho do body.

Podemos observar está diferença na seguinte imagem, apenas adicionando um border: solid 2px black na classe .treinaweb no nosso CSS:

html,
body {
  margin: 0;
  padding: 0;
  background-color: #376fe9;
}

.container {
  height:500em;
}

.treinaWeb {
  position: fixed;
  top: 200px;
  left: 400px;
  border: solid 2px black;
}

Assim, podemos visualizar o tamanho da posição ocupada pela nossa classe .treinaWeb.

Como usar a propriedade position no navbar

HTML5 + CSS3 - Dominando o CSS Grid Layout
Curso HTML5 + CSS3 - Dominando o CSS Grid Layout
Conhecer o curso

Agora, que observamos seu uso no exemplo de imagem citado anteriormente, vamos juntos criar uma barra de navegação atribuindo tipos e propriedades CSS do Position.

Para isso, precisaremos de um novo código HTML:

<!DOCTYPE html>
<html lang="pt-BR">
  <head>
    <meta charset="UTF-8" />
    <meta http-equiv="X-UA-Compatible" content="IE=edge" />
    <meta name="viewport" content="width=device-width, initial-scale=1.0" />

    <!-- Fonte de texto -->

    <link
      href="https://fonts.googleapis.com/css2?family=Poppins:wght@100;200;300;400;500;600;700;800;900"
      rel="stylesheet"
    />

    <!-- Estilo CSS-->
    <link rel="stylesheet" href="navbar.css" />

    <title>TreinaWeb</title>
  </head>

  <body>
    <header>
      <div class="container">
        <div class="nav-menu">
          <img src="https://www.treinaweb.com.br/assets/images/treinaweb-logo@2x.webp" alt="Logo treinaWeb" width="20%" />
          <div class="btn-header">
            <a class="btn-contained" href="#">Cadastre-se</a>
            <a class="btn-void" href="./login.html">Login</a>
          </div>
        </div>
      </div>
    </header>
  </body>
</html>

Nesse trecho de código HTML utilizamos uma div com a classe container que recebe nossas classes btn-header e btn-void as alinhando corretamente ao layout.

Em seguida, partimos para nosso código CSS:

html,
body {
  margin: 0;
  padding: 0;
}

:root {
  --primary: #6b2aee;
  font-family: 'Poppins', sans-serif;
}

.container {
  max-width: 1100px;
  margin: 0 auto;
  padding: 0 15px;
}

/* Header */
header {
  padding: 15px 0;
  box-shadow: 1px 0 15px rgba(98, 98, 98,0.294);
}

.nav-menu {
  display: flex;
  justify-content: space-between;
  align-items: center;
}

.btn-header {
  display: flex;
  align-items: center;
  gap: 30px;
}

.btn-contained {
  background-color: var(--primary);
  padding: 10px 35px;
  color: #fff;
  text-decoration: none;
  border-radius: 25px;
}

.btn-void {
  background-color: #fafafa;
  padding: 10px 35px;
  color: var(--primary);
  text-decoration: none;
  border-radius: 25px;
}

Para a estilização do CSS, foi inicialmente usada uma margem zero e um preenchimento zero, para a barra de navegação “colar” na parte superior da tela de visualização da página, depois, seguimos adicionando o :root para definições de cores e fonte. E, foi posteriormente definido o tamanho total do container.

No header, foi atribuído um preenchimento interno que se aplicará ao display: flex da classe .nav-menu, e um box-shadow para efeito de sombra na parte inferior da barra de navegação.

E, no .nav-menu um flexbox com atribuição do space-between para definir o espaço entre os itens de imagem do logo tipo e botões em que foi aplicando um gap para separá-los.

Obteremos o seguinte resultado:

position

Agora, vamos aplicar alguns tipos de position para a nossa barra de navegação.

html,
body {
  margin: 0;
  padding: 0;
  height: 200em;
}

:root {
  --primary: #188cc2;
  font-family: 'Poppins', sans-serif;
}

.container {
  max-width: 1000px;
  margin: 0 auto;
  padding: 0 15px;
}

/* Header */
header {
  padding: 15px 0;
  box-shadow: 1px 0 15px rgba(98, 98, 98, 0.294);
  position: fixed;
  top: 0;
  right: 0;
  float: left;
  width: 100em;
}

.nav-menu {
  display: flex;
  justify-content: space-between;
  align-items: center;
}

.btn-header {
  display: flex;
  align-items: center;
  gap: 30px;
}

.btn-contained {
  background-color: var(--primary);
  padding: 10px 35px;
  color: #fff;
  text-decoration: none;
  border-radius: 25px;
}

.btn-void {
  background-color: #eee5e5;
  padding: 10px 35px;
  color: var(--primary);
  text-decoration: none;
  border-radius: 25px;
}

Aplicando o position: fixed podemos visualizar que descendo a barra de rolagem o nosso navbar se mantém fixo na página.

E, se, adicionamos um top: 50px ele se deslocar do topo da tela. Mas, se mantém fixo a ela.

Se adicionamos um novo elemento como sticky, a barra de navegação também se fixará a página.

Conclusão

Neste artigo, conseguimos aprender sobre position, e como usá-lo em alguns exemplos práticos com CSS, além de conhecer quais propriedades podem ser aplicadas nele, e como devemos aplicar. Assim, finalizamos nosso artigo e seguimos em nossa trilha de aprendizado.

Autor(a) do artigo

Redação Treinaweb
Redação Treinaweb

Todos os artigos

Artigos relacionados Ver todos