Landing page responsiva + Portfólio pessoal.
portfolio/
├── index.html
├── css/
│ └── style.css
├── img/
│ ├── foto-perfil.jpg
│ ├── projeto-1.jpg
│ ├── projeto-2.jpg
│ └── projeto-3.jpg
└── README.md
index.html estrutura da página
css/style.css todos os estilos
img/ imagens do projeto
<body>
<header>
<nav> Logo + Links </nav>
</header>
<main>
<section id="hero">
Apresentação
</section>
<section id="sobre">
Sobre mim
</section>
<section id="projetos">
Galeria de projetos
</section>
<section id="habilidades">
Skills / Tecnologias
</section>
<section id="contato">
Formulário de contato
</section>
</main>
<footer>
Créditos + Redes sociais
</footer>
</body>
/* Reset e base */
* {
margin: 0;
padding: 0;
box-sizing: border-box;
}
:root {
/* Cores */
--cor-primaria: #6366f1;
--cor-fundo: #0f172a;
--cor-texto: #e2e8f0;
--cor-texto-suave: #94a3b8;
/* Espaçamento */
--espaco: 16px;
--espaco-lg: 32px;
/* Tipografia */
--fonte: 'Inter', sans-serif;
}
body {
font-family: var(--fonte);
background: var(--cor-fundo);
color: var(--cor-texto);
line-height: 1.6;
}
lightbulb
Defina as variáveis no :root e use com var(--nome).
nav {
display: flex;
justify-content: space-between;
align-items: center;
padding: var(--espaco);
position: fixed;
top: 0;
width: 100%;
background: rgba(15, 23, 42, 0.9);
backdrop-filter: blur(10px);
z-index: 100;
}
.nav-links {
display: none; /* mobile: oculto */
list-style: none;
gap: var(--espaco-lg);
}
@media (min-width: 768px) {
.nav-links {
display: flex; /* desktop: visível */
}
}
#hero {
display: flex;
flex-direction: column;
justify-content: center;
align-items: center;
min-height: 100vh;
text-align: center;
}
#hero h1 {
font-size: clamp(2rem, 6vw, 4rem);
animation: fadeIn 1s ease;
}
.projetos-grid {
display: grid;
grid-template-columns:
repeat(auto-fit,
minmax(280px, 1fr));
gap: var(--espaco-lg);
}
.projeto-card {
border-radius: 12px;
overflow: hidden;
transition: transform 0.3s ease;
}
.projeto-card:hover {
transform: translateY(-8px);
}
.skills {
display: flex;
flex-wrap: wrap;
gap: 12px;
justify-content: center;
}
.skill-tag {
padding: 8px 20px;
border-radius: 999px;
background: rgba(99, 102, 241, 0.15);
border: 1px solid rgba(99, 102, 241, 0.3);
transition: all 0.3s ease;
}
.skill-tag:hover {
background: var(--cor-primaria);
color: white;
}
.form-contato {
max-width: 500px;
margin: 0 auto;
display: flex;
flex-direction: column;
gap: var(--espaco);
}
.form-contato input,
.form-contato textarea {
padding: 12px 16px;
border-radius: 8px;
border: 1px solid rgba(148, 163, 184, 0.2);
background: rgba(15, 23, 42, 0.5);
color: var(--cor-texto);
transition: border-color 0.3s ease;
}
.form-contato input:focus {
border-color: var(--cor-primaria);
outline: none;
}
Tags corretas, acessibilidade, organização do código
Uso correto de flex e/ou grid, alinhamento, espaçamento
Mobile-first, media queries, imagens responsivas
Estética visual, transições, hover effects
Personalização, elementos extras, capricho no resultado final
Fundamentos JavaScript: variáveis, tipos e operadores.