Apostila Prática: Expandindo o seu Portfólio

Bem-vindos à próxima etapa do portfólio! O objetivo desta aula é colocar vocês no controle do código. Vocês encontrarão desafios divididos em níveis. A regra de ouro de hoje: Tente ler as instruções com calma, teste no seu código e, se algo der errado, investigue o erro antes de pedir ajuda. O aprendizado real acontece aqui!

📱 Dica de ouro: Para a melhor experiência interativa, abra esta apostila no seu computador (ou use tela dividida). A magia de ver o código funcionando ao vivo acontece melhor em telas grandes!

Conceito Básico: O que é uma "class"?

Antes de começarmos a mexer no visual, precisamos entender a peça fundamental do CSS: a classe (class).

Imagine o HTML como pessoas em uma sala. Se você gritar "Ei, pessoa!", todo mundo vai olhar. No HTML, isso seria estilizar uma tag diretamente (ex: usando p { color: red; }), o que deixaria todos os parágrafos do site vermelhos.

A class é como um crachá de identificação ou um uniforme. Você coloca class="destaque" em um elemento HTML específico. Depois, no seu arquivo CSS, você "chama" esse crachá usando um ponto final antes do nome: .destaque { color: red; }. Agora, apenas quem tem esse "uniforme" ficará vermelho!

É por isso que usamos classes exclusivas como .hero, .hero-texto ou .sobre-mim: elas servem para estilizar apenas aquele bloco de código isolado, sem o risco de quebrar ou bagunçar o design do resto do site.

Etapa 1: Finalizando a Seção Hero

Vocês já deixaram o texto à direita com a frase e o botão. Agora precisamos garantir que tudo fique legível e não quebre a página.

Piso Baixo Alinhamento e Contraste

No seu arquivo CSS, localize a classe .hero. Substitua a regra justify-content: center; por justify-content: flex-end; e adicione padding-right: 10vw;. Isso vai empurrar o texto para a direita, mas mantendo uma margem segura da borda.

💡 Por que isso funciona? O comando justify-content só tem efeito porque a nossa seção Hero já possui display: flex; (que fizemos na aula anterior). O Flexbox é a ferramenta mágica que nos permite empurrar os itens de um lado para o outro!

Validação visual: O texto do Hero está legível sobre o fundo feito no Photoshop? Se a imagem for muito clara, mude a cor do texto no CSS.

Teto Alto Fundo Translúcido, Bordas e Sombras

Para dar um toque profissional e garantir a leitura, vamos adicionar um fundo translúcido apenas atrás do texto. Mas por que parar por aí? Podemos adicionar bordas neon ou sombras!

⚠️ Não entre em pânico! O código abaixo parece complexo e cheio de números, mas o CSS simplesmente nos permite "empilhar" efeitos. Você não precisa decorar essas linhas agora! O objetivo aqui é apenas copiar, colar e alterar os valores para ver o que acontece.

  1. No seu arquivo HTML, envolva os textos do Hero com uma nova <div> que contenha a classe desejada (exemplo: class="hero-texto").
<!-- Exemplo de onde colocar no HTML -->
<div class="hero-texto">
    <h1>Seu Título</h1>
    <p>Seu subtítulo</p>
</div>
  1. No arquivo CSS, chame a classe recém-criada .hero-texto e adicione as propriedades abaixo. Você pode misturar essas opções para ver qual combina mais com você:
/* Opção 1: Vidro Fosco (Backdrop Filter Elegante) */
.hero-texto {
    background-color: rgba(0, 0, 0, 0.5); /* Fundo preto com 50% de transparência */
    backdrop-filter: blur(5px); /* Borra a imagem que estiver atrás da caixa */
    padding: 30px; /* Espaço interno para o texto não encostar nas bordas */
    border-radius: 15px; /* Arredonda as quinas da caixa */
}

/* Opção 2: Cyberpunk / Neon / Gamer */
.hero-texto-neon {
    background-color: rgba(20, 20, 20, 0.8);
    border: 2px solid #00ffcc; /* Borda sólida verde água */
    box-shadow: 0 0 15px rgba(0, 255, 204, 0.5); /* Sombra externa que imita um brilho LED */
    padding: 30px;
    border-radius: 10px;
}

Entendendo a mágica:
- rgba(R, G, B, A): O 'A' (Alpha) dita a opacidade do fundo. Ele vai de 0 (totalmente invisível) até 1 (cor sólida opaca).
- box-shadow: X Y desfoque cor;: Usado para criar uma sombra atrás do elemento. Se o X e Y forem 0, a sombra (ou brilho) se espalha por igual ao redor de toda a caixa.

Painel de Controle

Olá, eu sou o Fulano

Desenvolvedor Frontend criativo.


Ver Projetos

Etapa 2: A Seção "Sobre Mim"

Abaixo do Hero, vamos criar o espaço para você se apresentar.

Piso Baixo A Estrutura Base

Vá para o HTML e, logo após o fechamento da tag </section> do seu Hero, crie a nova estrutura:

<section id="sobre" class="sobre-mim">
    <h2>Sobre Mim</h2>
    <p>Escreva aqui sua biografia, seus interesses e o que você gosta de fazer.</p>
</section>

💡 Dica de CSS: Adicione um padding: 50px 20px; na classe .sobre-mim para desgrudar o texto das bordas.

Teto Alto Layout de Duas Colunas (Foto + Texto)

Vamos usar o Flexbox para colocar sua foto de perfil ao lado do texto. Escolha uma foto sua bem legal!

/* Adicione no seu CSS */
.sobre-mim {
    display: flex;
    align-items: center; /* Centraliza verticalmente */
    gap: 2rem; /* Cria um espaço entre a foto e o texto */
}

.imagem-sobre {
    width: 300px;
    max-width: 100%;
    object-fit: cover; /* Evita que a foto fique esticada/amassada */
}

Elevando Além do Teto Navegação Suave, Efeitos Hover e Animações

Vamos conectar o botão do Hero com a seção "Sobre Mim", deixar a foto perfeitamente redonda e adicionar interações vivas que reagem ao mouse do usuário!

  • Link de Âncora (IDs vs Classes): Transforme o botão do Hero em um link: <a href="#sobre">Ver Projetos</a>. Isso dirá ao navegador para procurar o elemento com id="sobre".
    💡 Nota: Lembra do ponto (.) que usamos para Classes? O símbolo de tralha (#) é usado no HTML/CSS para buscar um ID único! Uma página pode ter várias classes iguais, mas um ID pertence a apenas um único elemento.
  • Rolagem Suave: No CSS, aplique na tag root (html): html { scroll-behavior: smooth; }. Isso faz a página deslizar de forma cinematográfica em vez de dar um "pulo" seco de uma seção para outra.
  • Foto Redonda Perfeita: Na classe .imagem-sobre, adicione border-radius: 50%;. Cuidado: para a imagem não virar um ovo, você deve usar o object-fit: cover; com altura e largura exatamente iguais (ex: width: 300px; height: 300px;).

Quer impressionar de verdade? (Efeito Hover)
Adicione uma animação que faz a sua foto crescer suavemente quando o visitante passa o mouse por cima dela. Nós usamos a pseudo-classe :hover para detectar o mouse.
💡 Nota: Os dois pontos (:) no CSS não criam um crachá novo; eles representam um "estado" ou "comportamento" de um elemento que já existe (como estar sendo pairado pelo mouse).

/* 1. O ESTADO NORMAL (Adicione na classe que já existe) */
.imagem-sobre {
    width: 300px;
    height: 300px;
    object-fit: cover;
    border-radius: 50%;
    border: 4px solid var(--ochre); /* Cria uma moldura dourada na foto */
    transition: all 0.3s ease-in-out; /* O SEGREDO: faz qualquer mudança durar 0.3 segundos! */
}

/* 2. O ESTADO COM MOUSE EM CIMA (Crie este novo bloco logo abaixo) */
.imagem-sobre:hover {
    transform: scale(1.05); /* Aumenta o tamanho da foto em 5% */
    box-shadow: 0 10px 25px rgba(0,0,0,0.8); /* Adiciona uma sombra dramática em volta */
}

Painel de Controle

Foto

Sobre Mim

Escreva aqui sua biografia, seus interesses e o que você gosta de fazer. O Flexbox é excelente para colocar elementos lado a lado de forma responsiva.

Tabela de Solução de Problemas (Troubleshooting)

Clique nas perguntas abaixo se você se deparou com algum erro comum:

Por que aconteceu? Alguém usou position: absolute; no Hero, o que tira a seção do fluxo normal da página.

Como resolver: Remova o position: absolute;. O HTML funciona como blocos; um deve empurrar o outro para baixo naturalmente.

Por que aconteceu? A imagem original é muito grande e não tem restrição de tamanho no CSS.

Como resolver: Verifique se você aplicou a classe .imagem-sobre na tag <img> e confira se digitou o tamanho (width) no CSS.

Por que aconteceu? O href="#sobre" não encontrou a âncora correspondente.

Como resolver: Verifique se a sua tag section tem exatamente o atributo id="sobre" (sem a hashtag no HTML, apenas no href).

Recursos para Pesquisa

Se precisar aprofundar, consulte as documentações (as "bíblias" dos desenvolvedores):

MDN Web Docs: Learning Hub CSS MDN Web Docs: HTML

Mão na massa! Testem os códigos, atualizem a página e vejam a mágica acontecer. ✨