O que é Layout?
Layout é como os elementos são organizados e distribuídos na tela. Não é cor. Não é fonte. É posição e estrutura.
Elemento <div>
É um elemento genérico de bloco usado para agrupar outros elementos, criar contêineres e estruturar layouts.
Não possui significado semântico, sendo utilizado principalmente para aplicação de estilos CSS ou manipulação de blocos de conteúdo.
Quando usar?
Quando precisar agrupar elementos apenas para layout ou estilização e nenhum elemento semântico (como <section> ou <header>) for adequado.
O uso excessivo de <div> sem necessidade é conhecido como "divitis" ou "div hell".
Exemplo:
<div class="nav"></div>
em vez de
<nav></nav>
Tipos de Display
A propriedade display define como os elementos HTML ocupam espaço e se organizam na página.
Block
Elementos block ocupam 100% da largura e sempre começam em uma nova linha.
<p><div><h1>a<h6><ul>,<li>
Inline
Elementos inline ficam na mesma linha, lado a lado.
<a><span><strong><img>
Exemplo
O elemento <p> é um elemento block. Então, se no HTML tivermos
<p>Parágrafo 1</p>
<p>Parágrafo 2</p>
<p>Parágrafo 3</p>
então o resultado na página será
Por outro lado, o elemento <a> é um elemento inline. Então, se
no HTML tivermos
<a href="">Link 1</a>
<a href="">Link 2</a>
<a href="">Link 3</a>
o resultado na página será
Via CSS, é possível alterar esse comportamento com a propriedade display: block ou display: inline.
Exemplo:
p {
display: inline;
}
Importante
É importante notar que elemento inline não aceitam propriedades de largura e altura. Assim, quando precisamos transformar um elemento block em inline por questões de posicionamento, ele deixará de ocupar 100% da largura da página mas, por outro lado, perderá a capacidade de ter largura e altura definidas, limitando as opções de layout.
Neste cenário, usarmos a propriedade display: inline-block. Com isso,
conseguimos manter as características de ambos os tipos de display: o elemento irá fluir como texto,
característica do inline, mas também aceitará propriedades de largura e altura, como o block.
Limitações do Layout Tradicional
Elementos block sempre quebram linha, dificultando alinhamento horizontal.
Elementos inline ficam lado a lado, mas não permitem controle adequado de largura, altura e espaçamento.
Assim, são necessários outros recursos do CSS para resolver essas limitações.
Exercício Prático 1 - Inline vs Block
1) Transformando elemento inline em block.
Crie um HTML com 3 imagens. Controle o tamanho das imagens usando o atributo width. Qual o comportamento padrão de posicionamento das imagens? Faça as imagens ficarem posicionadas verticalmente.
2) Transformando elemento block em inline.
Seja o cabeçalho abaixo. Os links do menu ficam posicionados um abaixo do outro. Considerando que o elemento <a> é inline, por que não ficaram lado a lado?
Mude este comportamento, deixando-os lado a lado.
<header>
<h1>Meu Site</h1>
<ul>
<li><a href="#">Home</a></li>
<li><a href="#">Sobre</a></li>
<li><a href="#">Contato</a></li>
</ul>
</header>
Introdução ao Position
A propriedade position foi criada para permitir um controle maior sobre o
posicionamento dos
elementos na tela. No fluxo normal, elementos de bloco (como <div>) ocupam sua própria linha,
e elementos inline (como <img> ou <a>) se aninham lado a lado.
A propriedade position no CSS permite quebrar esse fluxo. Juntamente
com propriedades como top, right,
bottom e left, é possível posicionar
e deslocar os elementos de forma mais flexível, seja em relação ao seu local original ou a
outros elementos na página.
position: static;
Esta é a propriedade padrão de posicionamento. Os elementos com position: static; seguem o fluxo normal da página.
position: relative;
Os elementos com position: relative; permanecem no fluxo normal,
mas podem ser deslocados com as propriedades top, right, bottom e left.
Referência de deslocamento: ao usar as propriedades de deslocamento, o elemento é deslocado em relação à sua posição original. O espaço que ele ocupava, contudo, continua existindo na página.
O uso mais comum do position: relative; é como referência para
elementos com position: absolute;, como veremos a seguir.
position: absolute;
Os elementos com position: absolute; saem do fluxo normal, mas
também podem ser deslocados com as propriedades top, right, bottom e left. A diferença está no referencial de posicionamento.
Referência de deslocamento: ao usar as propriedades de deslocamento, o elemento é deslocado em
relação ao pai com position: relative; mais próximo.
position: fixed;
Os elementos com position: fixed; saem do fluxo normal e se
posicionam em relação à janela do navegador. Eles permanecem na mesma posição mesmo quando o usuário faz
scroll na página.
Referência de deslocamento: ao usar as propriedades de deslocamento, o elemento é deslocado em relação à janela do navegador e não a nenhum outro elemento.
position: absolute; ou position: fixed;, o que pode causar sobreposição ou desorganização do
conteúdo. Por isso, é fundamental planejar cuidadosamente o uso dessas propriedades para evitar
problemas de layout.
Exercício Prático 2 - Fixed
Etapa 1
Crie um arquivo HTML e um arquivo CSS para o exercício. O arquivo CSS deve ser referenciado no arquivo HTML.
Etapa 2
Adicione o seguinte elemento HTML: <div class="whatsapp"></div>.
Etapa 3
Realize a importação do CSS, conforme indicado abaixo. Esse CSS contém somente as propriedades de estilização do botão, que não são relevantes neste conteúdo.
<link rel="stylesheet" href="https://williamtenorio.com.br/files/stylewpp.css">
Etapa 4
Aplicar o posicionamento fixo ao elemento .whatsapp no CSS e
posicionar no canto inferior direito da janela do navegador.
Exercício Prático 3 - Absolute
Etapa 1
Crie um arquivo HTML e um arquivo CSS para o exercício. O arquivo CSS deve ser referenciado no arquivo HTML.
Etapa 2
Adicione o seguinte código HTML na página:
<div class="card">
<h2>Robôs humanoides 'lutam' artes marciais no Ano Novo Chinês</h2>
<p>Apresentação na TV estatal destacou empresas de robótica em programa com audiência comparável ao
Super Bowl.</p>
<img src="https://tinyurl.com/mrx4tvvf" alt="Robôs">
<span class="badge">IMPORTANTE</span>
</div>
Etapa 3
Realize a importação do CSS, conforme indicado abaixo. Esse CSS contém somente as propriedades de estilização do card de notícia, que não são relevantes neste conteúdo.
<link rel="stylesheet" href="https://williamtenorio.com.br/files/stylenews.css">
Etapa 4
Aplicar o posicionamento absoluto ao elemento .badge no CSS e
posicionar no canto superior direito do card de notícia.
Exercício Prático 4 - Site Cafeteria
Etapa 1
Baixe o projeto do site real CLICANDO AQUI e abra-o no Visual Studio Code.
Etapa 2
Abra o arquivo HTML no navegador e observe o layout da página.
Etapa 3
Execute as seguintes tarefas:
Tarefa 1:
Posicione o botão WhatsApp no canto inferior direito da página.
Tarefa 2:
Nos destaques, os elementos Novo! e Popular deve ficar no canto superior direito dos cards, porém flutuando como se estivesse quase saindo do card.
Tarefa 3:
Faça os links do menu ficarem lado a lado. Controle o espaçamento entre eles.
Tarefa 4:
Faça o menu ficar na mesma linha do logo, porém alinhado à direita.
Tarefa 5:
Posicione o cabeçalho no topo da página e faça com que ele fique fixo enquanto o usuário rola a página.
⚠️ Note que o posicionamento fixo do cabeçalho irá afetar o layout da página. Certifique-se de ajustar o padding do body para compensar a altura do cabeçalho fixo.
Tarefa 6:
Substitua a cor de fundo do banner por uma imagem de fundo.