Como criar portfólio online com HTML/CSS + Bootstrap 5
Neste tutorial você aprenderá como criar seu portfólio online do zero utilizando HTML5, CSS3, JavaScript e Bootstrap 5.
O Bootstrap é um framework CSS amplamente adotado que oferece um sistema de grid responsivo, componentes pré-estilizados (navbar, botões, carousel) e utilitários de espaçamento, cores e tipografia, permitindo acelerar o desenvolvimento e garantir consistência visual em diferentes dispositivos.
Com ele, você terá à disposição blocos de código prontos para navbar colapsável, carrossel de imagens e estilos de rodapé, reduzindo a necessidade de escrever CSS do zero e focando na personalização do seu design.
Passo 1 — Estrutura de arquivos
Crie uma pasta para o projeto (portifolio
) e, dentro dela, organize:
portifolio/
├── index.html
├── style.css
Passo 2 — Criar template básico HTML e CSS
Abra o
index.html
.Insira a declaração do tipo de documento e as tags principais:
Abra o
style.css
.Insira o seletor universal (*) para aplicar as regras a todos os elementos da página, e evitar inconsistências de margens e paddings entre navegadores.
/* style.css */
* {
margin: 0;
padding: 0;
box-sizing: border-box;
}
body {
font-family: 'Segoe UI', sans-serif;
color: #fff;
background: linear-gradient(135deg, #1a1a2e, #16213e);
min-height: 100vh;
background-attachment: fixed;
background-size: cover;
line-height: 1.6;
padding: 0 20px;
}
Propriedades do *
margin: 0;
→ zera todas as margens externas dos elementos.padding: 0;
→ zera todo o espaçamento interno dos elementos.box-sizing: border-box;
→ faz com que owidth
/height
inclua padding e bordas no cálculo.
Propriedades do body
font-family: 'Segoe UI', sans-serif;
→ define “Segoe UI” como fonte principal e “sans‑serif” como opção secundária.color: #fff;
→ ajusta a cor do texto para branco.background: linear-gradient(135deg, #1a1a2e, #16213e);
→ aplica um gradiente linear de 135° entre dois tons de azul‑escuro.min-height: 100vh;
→ garante que o<body>
tenha, no mínimo, 100% da altura da janela de visualização.background-attachment: fixed;
→ fixa o fundo de forma que ele não se mova ao rolar a página.background-size: cover;
→ faz com que o fundo cubra toda a área disponível, mantendo proporção.line-height: 1.6;
→ define espaçamento entre linhas igual a 1,6 vezes o tamanho da fonte.padding: 0 20px;
→ adiciona 20px de espaçamento interno nas laterais esquerda e direita.
Passo 3 — Configurar o head
Galaxia – Portfólio
<meta charset="UTF-8"/>
→ define a codificação de caracteres para UTF-8.<meta name="viewport" content="width=device-width, initial-scale=1.0"/>
→ ajusta o layout para ser responsivo em diferentes larguras de tela.<title>
→ título exibido na aba do navegador e nos resultados de busca.<link rel="icon" href="logo.png" type="image/jpg"/>
→ adiciona o favicon (ícone do site) que aparece na aba do navegador.<link href="https://cdn.jsdelivr.net/npm/bootstrap@5.3.7/dist/css/bootstrap.min.css" rel="stylesheet"/>
→ importa o CSS do Bootstrap via CDN, disponibilizando o sistema de grid, componentes (navbar, carousel) e utilitários prontos para uso.<link rel="stylesheet" href="style.css"/>
→ vincula seu arquivo de estilos personalizados para customizar cores, espaçamentos e efeitos específicos.
Passo 4 — Montar o navbar
Dentro de <body>
, crie:
E no arquivo do style.css:
.navbar {
background-color: #000;
}
.navbar .nav-link {
color: #fff !important;
}
.navbar .nav-link:hover {
color: #611968 !important;
}
.navbar-brand {
color: #fff !important;
font-weight: bold;
}
background-color
→ define cor de fundo.color
→ define cor do texto/link.font-weight
→ define peso da fonte.!important
faz com que esta declaração tenha prioridade sobre outras regras CSS conflitantes para a mesma propriedade.
Passo 5 — Montar o header
Logo após o <nav>
, insira:
Portfólio
E no arquivo do style.css:
header {
text-align: center; /* centraliza conteúdo */
padding: 60px 20px 30px; /* espaçamento interno */
background: rgba(147, 47, 167, 0.4); /* fundo roxo semitransparente */
border-bottom: 2px solid #fff; /* borda inferior branca */
}
header h1 {
margin: 0; /* remove margem padrão */
font-size: 2.5rem; /* tamanho da fonte */
color: white; /* texto em branco */
}
Propriedades do header
text-align: center;
→ centraliza horizontalmente o conteúdo interno.padding: 60px 20px 30px;
→ insere 60px acima, 20px nas laterais e 30px abaixo do conteúdo.background: rgba(147, 47, 167, 0.4);
→ aplica fundo com 40% de opacidade.border-bottom: 2px solid #00f2ff;
→ cria uma linha sólida de 2px ciana na base.
Propriedades do header h1
margin: 0;
→ remove margem padrão;font-size
→ define tamanho de fonte.
Passo 6 — Construir o main com carrossel
Logo após o <header>
, insira:
E no arquivo do style.css:
.carousel-item {
position: relative;
height: 700px;
overflow: hidden;
}
.carousel-item img {
width: 100%;
height: 100%;
object-fit: cover;
filter: brightness(0.6);
}
.carousel-caption {
position: absolute;
top: 50%;
left: 50%;
transform: translate(-50%, -50%);
background-color: rgba(0, 0, 0, 0.4);
padding: 20px 30px;
border-radius: 10px;
text-align: center;
}
.carousel-caption h5 {
font-size: 2rem;
font-weight: bold;
}
.carousel-caption p {
font-size: 1.1rem;
margin-bottom: 15px;
}
.carousel-control-prev-icon,
.carousel-control-next-icon {
background-color: rgba(0, 0, 0);
border-radius: 50%;
padding: 15px;
background-size: 60% 60%;
width: 50px;
height: 50px;
}
@media (max-width: 768px) {
.carousel-item {
height: 450px;
}
.carousel-caption {
top: 30% !important;
padding: 10px 15px;
width: 95%;
}
.carousel-caption h5 {
font-size: 1.4rem;
}
.carousel-caption p {
font-size: 1rem;
margin-bottom: 10px;
}
.carousel-caption .btn {
font-size: 0.9rem;
padding: 6px 14px;
}
}
Propriedades do carrossel
.carousel-item { position: relative; }
→ define o contêiner como referência para posicionamento absoluto..carousel-item { height: 700px; }
→ fixa a altura padrão do slide..carousel-item { overflow: hidden; }
→ oculta partes da imagem que ultrapassam o contêiner..carousel-item img { width: 100%; }
→ faz a imagem ocupar toda a largura do slide..carousel-item img { height: 100%; }
→ faz a imagem ocupar toda a altura do slide..carousel-item img { object-fit: cover; }
→ mantém a proporção da imagem recortando o excedente..carousel-item img { filter: brightness(0.6); }
→ escurece a imagem em 40% para melhorar contraste..carousel-caption { position: absolute; }
→ retira a legenda do fluxo normal para sobrepor a imagem..carousel-caption { top: 50%; left: 50%; }
→ posiciona o ponto central da legenda no meio do slide..carousel-caption { transform: translate(-50%, -50%); }
→ centraliza perfeitamente a legenda no slide..carousel-caption { background-color: rgba(0, 0, 0, 0.4); }
→ adiciona fundo semitransparente atrás da legenda..carousel-caption { padding: 20px 30px; }
→ aplica espaço interno na legenda..carousel-caption { border-radius: 10px; }
→ arredonda os cantos da caixa da legenda..carousel-caption { text-align: center; }
→ centraliza o texto dentro da legenda..carousel-caption h5 { font-size: 2rem; }
→ define tamanho do título da legenda..carousel-caption h5 { font-weight: bold; }
→ destaca o título em negrito..carousel-caption p { font-size: 1.1rem; }
→ define tamanho do parágrafo da legenda..carousel-caption p { margin-bottom: 15px; }
→ adiciona espaço abaixo do parágrafo..carousel-control-prev-icon, .carousel-control-next-icon { background-color: rgba(0,0,0); }
→ aplica fundo translúcido aos botões de navegação..carousel-control-prev-icon, .carousel-control-next-icon { border-radius: 50%; }
→ molda os botões como círculos..carousel-control-prev-icon, .carousel-control-next-icon { padding: 15px; }
→ cria espaço interno ao redor do ícone..carousel-control-prev-icon, .carousel-control-next-icon { background-size: 60% 60%; }
→ ajusta o tamanho do ícone dentro do círculo..carousel-control-prev-icon, .carousel-control-next-icon { width: 50px; height: 50px; }
→ define dimensões fixas para os botões.
Propriedades do carrossel para versão celular
@media (max-width: 768px) { .carousel-item { height: 450px; } }
→ reduz a altura do slide em telas pequenas.@media (max-width: 768px) { .carousel-caption { top: 30% !important; } }
→ ajusta verticalmente a legenda em mobile.@media (max-width: 768px) { .carousel-caption { padding: 10px 15px; } }
→ reduz padding da legenda em mobile.@media (max-width: 768px) { .carousel-caption { width: 95%; } }
→ expande a legenda para quase toda a largura.@media (max-width: 768px) { .carousel-caption h5 { font-size: 1.4rem; } }
→ diminui o título da legenda no mobile.@media (max-width: 768px) { .carousel-caption p { font-size: 1rem; } }
→ diminui o texto da legenda no mobile.@media (max-width: 768px) { .carousel-caption p { margin-bottom: 10px; } }
→ reduz o espaço abaixo do parágrafo em mobile.@media (max-width: 768px) { .carousel-caption .btn { font-size: 0.9rem; } }
→ ajusta o tamanho do botão da legenda em mobile.@media (max-width: 768px) { .carousel-caption .btn { padding: 6px 14px; } }
→ ajusta o padding do botão em mobile.!important
faz com que esta declaração tenha prioridade sobre outras regras CSS conflitantes para a mesma propriedade.
Nota: dentro da tag 'main', crie o seu carrossel com todos seus jogos desenvolvidos.
Passo 7 — Adicionar o footer
Adicione ao final do <main>
a marcação do rodapé e o carregamento do seu script:
Passo 8 — Adicionar o JavaScript do Bootstrap
Logo após o <footer>
, insira:
<script …>
→ elemento que carrega e executa código JavaScript.src="https://…/bootstrap.bundle.min.js"
→ aponta para o bundle oficial do Bootstrap (inclui Popper e plugins necessários).defer
→ faz com que o navegador baixe o script em paralelo, mas só o execute após o HTML ser totalmente processado, evitando bloqueio de renderização.
Conclusão
Você aprendeu como criar seu portfólio online do zero com HTML, CSS, JavaScript e Bootstrap, incluindo navbar, header, seção de destaque, carousel e footer responsivos.