Guia de Uso - Progress Bar
Status: Implementado (Design System 1.1 • 05/11/2025) – cobre barras lineares e circulares.
📋 Índice
Introdução
O componente Progress Bar mostra o progresso de uma operação. É ideal para:
- Uploads de arquivos
- Processamento de dados
- Carregamento de páginas
- Etapas de formulários
- Qualquer operação assíncrona
Quando Usar Progress Bar
✅ Use progress bar quando:
- Você tem uma operação que leva tempo
- Quer mostrar o progresso visual
- Precisa de feedback ao usuário
- A operação tem um valor percentual conhecido
❌ Evite usar progress bar quando:
- A operação é instantânea
- Não há como medir o progresso
- Use Skeleton Loader para carregamento de conteúdo
Estrutura Base
HTML Básico
html
<div class="progress">
<div class="progress-bar" style="width: 50%"></div>
</div>Com Label
html
<div>
<div class="progress-label">
<span class="progress-label-text">Upload de arquivo</span>
<span class="progress-label-value">50%</span>
</div>
<div class="progress">
<div class="progress-bar" style="width: 50%"></div>
</div>
</div>Tipos
1. Linear (Padrão)
html
<div class="progress">
<div class="progress-bar" style="width: 60%"></div>
</div>2. Circular
html
<div class="progress-circular">
<svg viewBox="0 0 64 64">
<circle class="progress-circular-track" cx="32" cy="32" r="28"></circle>
<circle class="progress-circular-bar" cx="32" cy="32" r="28"
stroke-dasharray="175.9" stroke-dashoffset="87.95"></circle>
</svg>
<span class="progress-circular-text">50%</span>
</div>Estados
Default
html
<div class="progress">
<div class="progress-bar" style="width: 60%"></div>
</div>Success
html
<div class="progress">
<div class="progress-bar progress-bar--success" style="width: 100%"></div>
</div>Warning
html
<div class="progress">
<div class="progress-bar progress-bar--warning" style="width: 75%"></div>
</div>Error
html
<div class="progress">
<div class="progress-bar progress-bar--error" style="width: 30%"></div>
</div>Tamanhos
Small
html
<div class="progress progress--sm">
<div class="progress-bar" style="width: 50%"></div>
</div>Medium (Padrão)
html
<div class="progress">
<div class="progress-bar" style="width: 50%"></div>
</div>Large
html
<div class="progress progress--lg">
<div class="progress-bar" style="width: 50%"></div>
</div>Extra Large
html
<div class="progress progress--xl">
<div class="progress-bar" style="width: 50%"></div>
</div>Animações
Striped
html
<div class="progress">
<div class="progress-bar progress-bar--striped" style="width: 60%"></div>
</div>Animated
html
<div class="progress">
<div class="progress-bar progress-bar--animated" style="width: 60%"></div>
</div>Striped + Animated
html
<div class="progress">
<div class="progress-bar progress-bar--striped progress-bar--animated" style="width: 60%"></div>
</div>Progress Circular
Estrutura
html
<div class="progress-circular">
<svg viewBox="0 0 64 64">
<circle class="progress-circular-track" cx="32" cy="32" r="28"></circle>
<circle class="progress-circular-bar" cx="32" cy="32" r="28"
stroke-dasharray="175.9" stroke-dashoffset="87.95"></circle>
</svg>
<span class="progress-circular-text">50%</span>
</div>Cálculo do Progresso
javascript
// Circunferência = 2 * π * raio
const radius = 28;
const circumference = 2 * Math.PI * radius; // ~175.9
// Progresso = (100 - percentual) / 100 * circunferência
const percent = 50;
const offset = ((100 - percent) / 100) * circumference; // ~87.95Tamanhos
html
<!-- Small -->
<div class="progress-circular progress-circular--sm">...</div>
<!-- Large -->
<div class="progress-circular progress-circular--lg">...</div>Dark Mode
O Dark Mode é aplicado automaticamente quando a classe .dark, .dark-mode ou [data-theme="dark"] está presente no elemento raiz.
html
<html class="dark">
<!-- Progress Bar automaticamente em dark mode -->
</html>Exemplos Práticos
Exemplo 1: Upload de Arquivo
html
<div>
<div class="progress-label">
<span class="progress-label-text">Enviando arquivo...</span>
<span class="progress-label-value" id="upload-progress">0%</span>
</div>
<div class="progress">
<div class="progress-bar progress-bar--animated" id="upload-bar" style="width: 0%"></div>
</div>
</div>javascript
function updateUploadProgress(percent) {
document.getElementById('upload-progress').textContent = percent + '%';
document.getElementById('upload-bar').style.width = percent + '%';
if (percent === 100) {
document.getElementById('upload-bar').classList.remove('progress-bar--animated');
document.getElementById('upload-bar').classList.add('progress-bar--success');
}
}Exemplo 2: Processamento de Dados
html
<div>
<div class="progress-label">
<span class="progress-label-text">Processando dados</span>
<span class="progress-label-value" id="process-progress">0%</span>
</div>
<div class="progress progress--lg">
<div class="progress-bar progress-bar--striped progress-bar--animated"
id="process-bar" style="width: 0%"></div>
</div>
</div>Exemplo 3: Progress Circular
html
<div class="progress-circular" id="circular-progress">
<svg viewBox="0 0 64 64">
<circle class="progress-circular-track" cx="32" cy="32" r="28"></circle>
<circle class="progress-circular-bar" id="circular-bar"
cx="32" cy="32" r="28"
stroke-dasharray="175.9" stroke-dashoffset="175.9"></circle>
</svg>
<span class="progress-circular-text" id="circular-text">0%</span>
</div>javascript
function updateCircularProgress(percent) {
const radius = 28;
const circumference = 2 * Math.PI * radius;
const offset = ((100 - percent) / 100) * circumference;
document.getElementById('circular-bar').style.strokeDashoffset = offset;
document.getElementById('circular-text').textContent = percent + '%';
}Boas Práticas
- Use labels descritivos: Seja claro sobre o que está carregando
- Mostre percentual: Quando possível, exiba o valor numérico
- Use animação: Para operações sem progresso conhecido
- Mude cor no sucesso: Use
progress-bar--successquando completo - Considere circular: Para espaços compactos ou dashboards
Versão: 1.0.0
Data: 2025-01-27
Documentação: /public/css/design-system/GUIA_PROGRESS.md
Exemplos: /public/css/design-system/exemplos-progress.html