La Etiqueta PROGRESS

Se utiliza para representar el progreso de una tarea, como la carga de un archivo, la finalización de un formulario o cualquier proceso que requiera mostrar avance en tiempo real.
La etiqueta <progress> en HTML se utiliza para representar el progreso de una tarea, como la carga de un archivo, la finalización de un formulario o cualquier proceso que requiera mostrar avance en tiempo real. A diferencia de <meter> (que indica un valor dentro de un rango estático), <progress> está diseñado específicamente para tareas dinámicas. A continuación, te enseñamos cómo usarla.
Sintaxis básica
La estructura básica es:
<progress value="valor_actual" max="valor_máximo"></progress>
-
value: Indica el progreso actual (número). -
max: Define el valor total requerido para completar la tarea (por defecto es1).
Ejemplo 1: Progreso del 50%
<progress value="50" max="100"></progress>
Ejemplo 2: Progreso indeterminado
Si la tarea no tiene un avance medible (ejemplo: carga sin tiempo estimado), omite el atributo value:
<progress max="100"></progress>
El navegador mostrará una animación de carga
Personalización con CSS
Puedes modificar el estilo del indicador de progreso usando selectores específicos:
/* Estilo del contenedor */
progress {
width: 300px;
height: 20px;
border: 1px solid #ccc;
border-radius: 5px;
}
/* Barra de progreso (WebKit: Chrome, Safari) */
progress::-webkit-progress-value {
background: #4CAF50;
border-radius: 5px;
}
progress::-webkit-progress-bar {
background: #f0f0f0;
border-radius: 5px;
}
/* Firefox */
progress::-moz-progress-bar {
background: #4CAF50;
border-radius: 5px;
}
Actualización dinámica con JavaScript
Para actualizar el valor de <progress> en tiempo real (ejemplo: subida de archivos):
<progress id="miProgreso" value="0" max="100"></progress>
<button onclick="avanzar()">Avanzar +10%</button>
<script>
function avanzar() {
const progreso = document.getElementById("miProgreso");
if (progreso.value < 100) {
progreso.value += 10;
}
}
</script>
Clic en el botón aumentará el progreso en 10%.
Casos de uso comunes
Carga de archivos
<input type="file" id="archivo">
<progress id="progresoCarga" value="0" max="100"></progress>
<script>
document.getElementById("archivo").addEventListener("change", function(e) {
const archivo = e.target.files[0];
const progreso = document.getElementById("progresoCarga");
// Simulación de carga (puedes reemplazar con una llamada real a una API)
let valor = 0;
const intervalo = setInterval(() => {
valor += 10;
progreso.value = valor;
if (valor >= 100) clearInterval(intervalo);
}, 500);
});
</script>
Progreso de un cuestionario
<p>Pregunta 1 de 5</p> <progress value="1" max="5"></progress>
Accesibilidad
Añade etiquetas descriptivas para usuarios con lectores de pantalla:
<label for="progreso">Progreso de la instalación: </label> <progress id="progreso" value="75" max="100">75% completado</progress>
El texto dentro de la etiqueta (75% completado) solo se muestra si el navegador no soporta <progress>.
Diferencias entre <progress> y <meter>
-
<progress>: Tareas en curso con un inicio y un final (ejemplo: descarga). -
<meter>: Valores estáticos dentro de un rango (ejemplo: uso de almacenamiento:<meter value="30" min="0" max="100"></meter>).
Ejemplo completo
<!DOCTYPE html>
<html>
<head>
<style>
progress {
width: 300px;
margin: 10px 0;
}
progress::-webkit-progress-value {
background: #007bff;
}
</style>
</head>
<body>
<h2>Instalación de software</h2>
<progress id="progresoInstalacion" value="0" max="100"></progress>
<button onclick="simularInstalacion()">Iniciar instalación</button>
<script>
function simularInstalacion() {
const progreso = document.getElementById("progresoInstalacion");
let valor = 0;
const intervalo = setInterval(() => {
valor += 5;
progreso.value = valor;
if (valor >= 100) {
clearInterval(intervalo);
alert("¡Instalación completada!");
}
}, 500);
}
</script>
</body>
</html>
Conclusión
La etiqueta <progress> es una herramienta esencial para crear interfaces intuitivas que muestren el avance de tareas. Combínala con CSS y JavaScript para adaptarla a tus necesidades, y siempre prioriza la accesibilidad. ¡Ahora estás listo para implementar barras de progreso efectivas en tus proyectos web!