Como Criar um Site com Menu Lateral (Adeus Frames, Olá CSS Flexbox)

Como Criar um Site com Menu Lateral (Do Legado dos Frames ao CSS Moderno)

Fala, futuro mestre do Front-End! Se você acompanhou a nossa última aula sobre a história da internet, já sabe o que são os famosos "frames". Agora, vamos entender como os webmasters do passado dividiam a tela para criar menus laterais e, o mais importante, como nós fazemos isso hoje em dia com qualidade profissional.

Neste tutorial de nosso curso de HTML, vamos montar um layout clássico: um menu na lateral esquerda (ocupando 20% da tela) e a área de conteúdo na direita (ocupando 80%). Prepare-se para ver a mágica da evolução do código!

A Estrutura de um Menu Lateral

Como criar um menu lateral fixo? No HTML legado, usava-se a tag <frameset cols="20%,*"> para dividir a janela fisicamente. Hoje, a forma correta e moderna é usar o HTML5 semântico com a tag <nav> para o menu lateral e <main> para o conteúdo, organizando-os lado a lado através da propriedade display: flex; no CSS.

A Abordagem Histórica: O Uso do `frameset`

Antigamente, para ter um menu que não precisava ser recarregado toda vez que o usuário clicava em um link, nós tínhamos que criar três arquivos separados. O primeiro era o menu.html (apenas com os links). O segundo era o home.html (o conteúdo da página inicial).

E o terceiro era o famigerado index.html, que não continha texto nenhum, apenas a tag <frameset> atuando como uma tesoura que cortava o navegador em pedaços. O código era assim:

<!DOCTYPE html>
<html>
<head>
    <title>Site em Frames (Obsoleto)</title>
</head>
<!-- Corta a tela: 20% para o menu, e o asterisco (*) pega o restante (80%) -->
<frameset cols="20%,*">
    <frame src="menu.html">
    <frame src="home.html">
</frameset>
</html>
⚠️ Por que você deve fugir disso?
Dividir a tela dessa forma impedia que o site funcionasse em celulares (responsividade zero). Além disso, se um usuário buscasse no Google e caísse no seu arquivo menu.html, ele ia ver apenas uma lista de links com a tela inteira em branco, sem o resto do site!

Cansado de Tutoriais Ultrapassados? Atualize sua Carreira! 🚀

A internet está cheia de materiais que ensinam códigos dos anos 2000. O mercado moderno exige desenvolvedores que saibam criar layouts responsivos, limpos e otimizados para o Google.

Slogan Curso HTML Progressivo
Apostila Completa HTML e CSS

"Estava travado tentando alinhar minha barra lateral. A Apostila Progressiva me ensinou CSS Flexbox e Grid do zero de forma absurdamente didática. Salvou minha vida no estágio!" - Carlos, Desenvolvedor Front-End.

A Solução Moderna: Criando o Layout com CSS Flexbox

O que nós fazemos hoje? Mantemos todo o site em um arquivo só (ou usamos PHP para injetar o menu via servidor) e deixamos o CSS cuidar da organização visual. A melhor ferramenta para alinhar blocos lado a lado hoje se chama Flexbox.

Acompanhe o código abaixo. Veja como criamos um "container" principal e dissemos a ele: "Coloque o menu na esquerda ocupando 20% e o conteúdo na direita ocupando o resto".

<!DOCTYPE html>
<html lang="pt-br">
<head>
    <meta charset="UTF-8">
    <title>Layout Moderno com CSS Flexbox</title>
    <style>
        body { font-family: Arial, sans-serif; margin: 0; background: #f8fafc; }
        
        /* O Flexbox ativa a exibição lado a lado */
        .layout-principal {
            display: flex;
            min-height: 100vh; /* Ocupa 100% da altura da tela */
        }

        /* O Menu Lateral (antigo frame esquerdo) */
        nav.menu-lateral {
            width: 20%; 
            background-color: #0f172a;
            color: white;
            padding: 20px;
        }

        nav.menu-lateral a {
            display: block;
            color: #cbd5e1;
            text-decoration: none;
            margin-bottom: 15px;
        }

        /* O Conteúdo Principal (antigo frame direito) */
        main.conteudo {
            flex: 1; /* Ocupa todo o espaço restante automaticamente! */
            padding: 40px;
            background-color: #ffffff;
        }
    </style>
</head>
<body>

    <div class="layout-principal">
        
        <!-- MENU DA ESQUERDA -->
        <nav class="menu-lateral">
            <h2>Navegação</h2>
            <a href="#">Home</a>
            <a href="#">Apostila de HTML5</a>
            <a href="#">Apostila de CSS3</a>
            <a href="#">Contato</a>
        </nav>

        <!-- CONTEÚDO DA DIREITA -->
        <main class="conteudo">
            <h1>Bem-vindo à Era Moderna do Front-End</h1>
            <p>Sem frames, sem gambiarras. O código é lido perfeitamente pelo Google e as telas se adaptam de forma fluida.</p>
        </main>

    </div>

</body>
</html>
🛠️ Curiosidade: A propriedade flex: 1; na área principal é o equivalente moderno ao asterisco * dos antigos frames. Ela avisa ao navegador: "Pegue todo o espaço que sobrar depois que o menu pegar os 20% dele". Lindo, não é?

O Resultado Vivo (Renderização Simples):

Bem-vindo à Era Moderna do Front-End

Sem frames, sem gambiarras. O código é lido perfeitamente pelo Google e as telas se adaptam de forma super profissional. Se a tela encolher, o Flexbox resolve!

Desafio de HTML e CSS (O Exercício Mental)

No tutorial antigo, nós pedíamos para os alunos criarem um site de bandas usando a propriedade rows no frameset, para criar um menu superior cortando a tela horizontalmente.

No CSS Moderno com Flexbox, se você quiser mudar os blocos de lado a lado (menu esquerdo) para um em cima do outro (menu no topo), basta aplicar a regra flex-direction: column; no container principal! Tente fazer isso no seu editor de código. Crie um menu horizontal e uma área de conteúdo abaixo dele!




Perguntas Frequentes (FAQ)

Como evitar que eu tenha que copiar o menu HTML em todas as páginas?

Como não usamos mais frames, a forma mais eficiente e utilizada no mercado corporativo é usar o PHP. Você cria um arquivo menu.php e, em todas as páginas, usa o comando <?php include('menu.php'); ?>. Assim, se você mudar um link no menu, todas as páginas do site se atualizam automaticamente.

Flexbox ou CSS Grid: qual usar para layouts?

Ambos são poderosos! Em regra geral, o Flexbox é ideal para alinhar elementos em uma única dimensão (ou em uma linha, ou em uma coluna), sendo perfeito para alinhar menus, barras e centralizações simples. O CSS Grid é feito para layouts bidimensionais completos, como galerias ou a arquitetura complexa de toda a página (dividindo em linhas e colunas ao mesmo tempo).

O que significa 100vh no CSS?

O vh significa "Viewport Height" (Altura da janela visível). Quando colocamos min-height: 100vh; no nosso container principal, estamos garantindo que a barra lateral e o conteúdo se estiquem até tocar o rodapé da tela do seu monitor, impedindo que o menu fique "cortado" no meio caso tenha pouco texto.



🎯 O que estudar a seguir:

Agora que o esqueleto do site está pronto, você precisa recheá-lo de interatividade e otimização:

Nenhum comentário: