Como criar uma barra de progresso HTML com CSS e JavaScript? Aprenda passo a passo!
Nesta aula vamos aprender a construir, olhando pro código, uma barra de progresso HTML que se atualiza conforme você rola a página.
Uma scroll progress bar é uma ótima maneira de mostrar visualmente e de um jeito moderno o quanto o usuário rolou a página, trazendo um efeito dinâmico e interativo. É um projeto simples, mas cheio de conceitos úteis de HTML, CSS e JavaScript.
Segue lendo pra aprender como se faz!
Para fazer o download do(s) arquivo(s) utilizados na aula, preencha com o seu e-mail:
Não vamos te encaminhar nenhum tipo de SPAM! A Hashtag Treinamentos é uma empresa preocupada com a proteção de seus dados e realiza o tratamento de acordo com a Lei Geral de Proteção de Dados (Lei n. 13.709/18). Qualquer dúvida, nos contate.
O que é uma Scroll Progress Bar?
A scroll progress bar é uma barra que aparece (geralmente no topo da página) e aumenta sua largura conforme o usuário desce a página. Quando você chega ao final, ela atinge 100%. É perfeita para sites com conteúdo longo, como blogs ou portfólios, e funciona em qualquer tamanho de tela, ajustando-se automaticamente. Vamos ver como criar uma do zero!
Passo 1: Estrutura com HTML
O HTML é bem simples. Precisamos de um contêiner para a barra de progresso e um espaço para o conteúdo da página. Aqui está o código base:
<!DOCTYPE html>
<html lang="pt-br">
<head>
<meta charset="UTF-8">
<title>Scroll Progress Bar</title>
<link rel="stylesheet" href="style.css">
</head>
<body>
<div class="progress-container">
<div class="progress-bar" id="progress-bar"></div>
</div>
<div class="content">
<h1>Scroll Progress Bar</h1>
<div class="text">
<!-- Texto longo com "Lorem Ipsum" para permitir rolagem -->
<p>Lorem ipsum dolor sit amet...</p>
</div>
</div>
<script src="script.js"></script>
</body>
</html>progress-container: É a parte cinza que fica fixa no topo.progress-bar: A barra azul que cresce conforme o scroll, com o IDprogress-barpara manipulá-la no JavaScript.content: O conteúdo da página, com um texto longo para garantir que haja rolagem.
Passo 2: Estilização com CSS
No CSS, estilizamos a barra para que ela fique visualmente atraente e funcional. Aqui está o código comentado:
/* Reset básico para margens */
body, h1, p {
margin: 0;
}
/* Contêiner da barra (fundo cinza) */
.progress-container {
position: fixed;
top: 0;
left: 0;
width: 100%;
height: 8px;
background-color: #ccc;
z-index: 1000; /* Garante que fique acima de outros elementos */
}
/* Barra de progresso (azul) */
.progress-bar {
height: 100%;
width: 0%; /* Começa com largura zero */
background-color: #007bff; /* Cor azul, mas você pode mudar */
transition: width 0.3s ease; /* Animação suave ao mudar a largura */
}
/* Estilização do conteúdo */
.content {
padding: 20px;
max-width: 800px;
margin: 80px auto; /* Centraliza e dá espaço no topo */
}- Posicionamento fixo: O
position: fixedmantém a barra no topo, mesmo com rolagem. - Transição suave: A propriedade
transition: width 0.3s easefaz a barra crescer suavemente. - Centralização do conteúdo: O
margin: autoemax-width: 800pxdeixam o texto bem alinhado.
Dica: Se você quer aprender CSS do zero de um jeito prático, leia nosso post em que te ensinamos do zero a criar uma landing page!
Passo 3: A mágica do JavaScript
A lógica da barra de progresso está no JavaScript. Precisamos calcular o quanto o usuário rolou e atualizar a largura da barra. Aqui está o código:
window.addEventListener('scroll', () => {
// Quanto foi rolado no eixo Y
const scroll = window.scrollY;
// Altura total do documento
const alturaDocumento = document.documentElement.scrollHeight;
// Altura da tela visível
const alturaTela = window.innerHeight;
// Altura que pode ser rolada
const alturaScrolavel = alturaDocumento - alturaTela;
// Percentual de rolagem
const percentualScroll = (scroll / alturaScrolavel) * 100;
// Atualiza a largura da barra de progresso
const progressBar = document.getElementById('progress-bar');
progressBar.style.width = `${percentualScroll}%`;
});Explicando cada parte:
window.addEventListener('scroll', ...): Escuta o evento de rolagem na janela.window.scrollY: Retorna quantos pixels foram rolados no eixo Y.document.documentElement.scrollHeight: A altura total do documento.window.innerHeight: A altura da tela visível.alturaScrolavel: Calcula a altura que pode ser rolada (altura total menos a altura da tela).percentualScroll: Divide o scroll atual pela altura rolável e multiplica por 100 para obter o percentual.- Atualização da barra: Ajusta a propriedade
widthda barra com o valor em percentual.
Por que subtrair a altura da tela? Porque, ao chegar ao final da página, o scrollY não atinge o scrollHeight total, já que a última parte visível é a tela. Isso garante que a barra chegue a 100% no momento certo.
Testando e Adaptando
Com o código acima, a barra começa em 0% no topo e atinge 100% no final da página. Ela também se adapta automaticamente a diferentes tamanhos de tela, como mostrado no vídeo, onde Diego ajusta a janela e a barra continua funcionando perfeitamente. Para testar, abra o console (F12) e veja os valores de scrollY, scrollHeight e innerHeight enquanto rola.
Quer personalizar? Você pode:
- Mudar a cor da barra no CSS (troque
#007bffpor outra cor); - Ajustar a velocidade da transição (
transition: width 0.5s easepara mais lenta); - Usar outra função de transição, como
ease-inouease-in-out.
Por que usar uma Scroll Progress Bar?
Além de ser visualmente atraente, a scroll progress bar melhora a experiência do usuário, especialmente em páginas longas. Ela dá uma noção clara de quanto falta para terminar o conteúdo, incentivando a navegação. E o melhor: com apenas algumas linhas de HTML, CSS e JavaScript, você cria algo funcional e profissional.
Dicas finais
- Pratique: Baixe os arquivos no início do post e teste o código!
- Explore mais: Quer criar outras barras de progresso, como uma que aumenta com o tempo? Deixe nos comentários do vídeo ou experimente adaptar o código com
setInterval. - Aprofunde-se: O vídeo sugere aulas sobre
position,transitionearrow functions. São conceitos que valem a pena estudar para dominar desenvolvimento web.
Esse projeto é simples, mas ensina muito sobre manipulação do DOM, eventos em JavaScript e estilização com CSS. Para praticar, teste, adapte e crie suas próprias barras de progresso! 🚀
E se você gostou deste passo a passo, provavelmente vai curtir também nossos outros conteúdos sobre HTML, CSS e JavaScript. Dá uma conferida!
E caso prefira esse conteúdo no formato de vídeo, assista aqui embaixo ou acesse o nosso canal do YouTube!
Hashtag Treinamentos
Para acessar publicações de JavaScript, clique aqui!
Posts mais recentes de HTML e CSS
- LESS CSS: Guia Completo do Pré-processador (2026)LESS CSS é um pré-processador que adiciona variáveis, mixins, nesting e operações matemáticas ao CSS. Aprenda a configurar e usar com projeto prático.
- Variáveis no CSS (CSS Variables): Como Usar de Forma ProfissionalVocê sabe o que são Variáveis no CSS (CSS Variables)? Aprenda como usar técnicas que vão transformar a forma como você escreve variáveis CSS.
- Display CSS: Nova Sintaxe e Como UsarAprenda a usar a propriedade display CSS com a nova sintaxe de múltiplos valores. Veja exemplos práticos e descubra como combinar estilos em um único comando.
Posts mais recentes da Hashtag Treinamentos
- Planilha de Controle de Notas Fiscais no Excel [Grátis]Baixe a planilha de controle de notas fiscais no Excel grátis: calcule ISS e retenções, veja o que está em aberto e gere a cobrança de cada nota de serviço.
- Qual IA usar na empresa: ChatGPT, Claude ou Perplexity?Qual IA usar na empresa: veja as diferenças entre ChatGPT, Claude e Perplexity e quando cada um rende mais em cada área da sua equipe.
- Apostilas Gratuitas em PDF: Excel, Power BI, Python e IABaixe apostilas gratuitas em PDF de Excel, Power BI, Python, Claude e agentes de IA, com exercícios e gabarito. Escolha a sua e comece hoje.









