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.
- 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>
- No arquivo CSS, chame a classe recém-criada
.hero-textoe 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 comid="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, adicioneborder-radius: 50%;. Cuidado: para a imagem não virar um ovo, você deve usar oobject-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
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):
Mão na massa! Testem os códigos, atualizem a página e vejam a mágica acontecer. ✨