Si estás aprendiendo HTML5 y quieres dominar por completo el elemento <meter>, este curso te lleva desde lo más básico hasta los usos avanzados, incluyendo buenas prácticas, estilos, accesibilidad y ejemplos reales.
Qué es el elemento <meter> y para qué sirve en HTML5
El elemento <meter> representa un valor dentro de un rango acotado. No es una barra arbitraria ni un progreso indefinido: siempre requiere un valor mínimo, uno máximo y un valor actual.
Sirve para expresar:
- Niveles (batería, almacenamiento, combustible)
- Intensidades o rangos (temperatura, puntuaciones)
- Estados medibles dentro de límites claros
Muy util para mostrar progreso de una tarea, empecé usando <meter> porque visualmente encajaba, pero pronto descubrí que no es la mejor opción para tareas que no tienen un rango definido. Más abajo te explico por qué.
Cuándo usar <meter> y cuándo NO usarlo
Usa <meter> cuando:
- el valor está acotado
- existe un rango claro y medible
- necesitas marcar niveles “bajo / normal / alto”
No lo uses cuando:
- los valores no son predecibles
- no hay un máximo
- necesitas mostrar progreso real de tareas (ahí va <progress>)
Esto encaja justo con lo que me pasó: al usar <meter> para una tarea cuyo total no estaba definido, noté que el componente “mentía”, porque visualmente parecía progreso, pero semánticamente no lo era.
Sintaxis del elemento <meter> y explicación clara de cada atributo
La función de la etiqueta meter es la de indicar una medida dentro de un rango; es decir debe ser acotada, tener un inicio y un fin.
Su sintaxis es la siguiente:
<meter></meter>
Hasta ahora, nada nuevo; vemos que como la mayoría de las etiquetas en HTML presenta una etiqueta de inicio <meter> y otra de cierre </meter>.
Atributos de la etiqueta (tag) meter
value:Un valor punto flotante que representa el valor actual de la medición. Este valor debe de estar entre el valor máximo (max) y el valor mínimo (min).min <= value <= max.
min:Indica el límite inferior (cota inferior) del rango de medición; y por lo tanto el valor mínimo posible para el atributovalue; este valor debe ser más pequeño que el de el atributomax; si no se especifica el valor mínimo será cero.max:Indica el límite superior (cota superior) del rango de medición; y por lo tanto el valor máximo posible para el atributovalue; este valor debe ser más grande que el de el atributomin; si no se especifica el valor máximo será uno.low:Representa el límite superior de la parte baja del rango de medición. Esta debe ser mayor que el atributomin, pero menor quehighymax(si se especifica). Si no se especifica, o si es menor que el valor mínimo, el bajo valor es igual al valormin.high:Representa el límite inferior de la parte alta del rango de medición. Esto debe ser menor que el atributomax, pero mayor quelowymin(si se especifica). Si no se especifica, o si es mayor que el valor máximo, el alto valor es igual al valormax.optimum:Este atributo indica el valor óptimo o el mejor valor; el cual debe estar en el rango definido por los atributolowymin. Cuando son usados los atributoslowyhigh, estos indican la zona preferida por el rango dado. Por ejemplo:min <= optimum <= low; si el valor óptimo está en este rango (entreminylow) entonces el rango inferior se considera preferido.high <= optimum <= max; si el valor óptimo está en este rango (entrehighymax) entonces el rango superior se considera preferido.
Reglas en general para el uso del elemento meter
- Todos los atributos mencionados anteriormente pueden ser números punto flotantes.
- Segun las definiciones de cada atributo, las siguientes expresiones son verdaderas:
min <= value <= max.min <= low <= high <= max(Sí low/hight es especificado).min <= optimum <= max(Si optimum es especificado).
No debemos utilizar la etiqueta (tag) meter para
- Indicar el estado de un progreso o tarea; para eso está la etiqueta progress.
- Representar valores en donde el valor sea arbitrario o no pueda ser acotado.
Estilos de la etiqueta (tag) meter
Al igual que otros elementos, podemos definir atributos como width, height, display etc. Para variar el tamaño o comportamiento del elemento (tag) meter; sin embargo existen pseudo clases específicas para el elemento meter:
| Pseudo clases | Descripción |
|---|---|
-webkit-meter-bar | Define un color para el tag meter. |
-webkit-meter-optimum-value | Define un color para el tag meter cuando el medidor está dentro del rango low-high (low <= value <= high). El color por defecto es verde. |
-webkit-meter-suboptimum-value | Define un color para el tag meter cuando el medidor está fuera del rango low-high (low > value o value > high). El color por defecto es amarillo. |
Ejemplos prácticos del uso de <meter> (caso real y usos comunes)
Ejemplo 1
Este ejemplo muestra algunos de los atributos presentados anteriormente: value, max y min.
Además de esto, usaremos un script para variar el valor del tag meter en un tiempo determinado y apreciar su comportamiento en el tiempo.
Value: 80
Para ver el código completo del experimento, has clic aquí.
Ejemplo 2
Este ejemplo muestra todos los atributos presentados anteriormente: value, max, min, low y high; además, todos ellos presentan uno de las pseudo clases ya definidas y explicadas en la sección de arriba.
Con ayuda del script anterior, veremos como:
Cambiar el color del medidor:
#meter2::-webkit-meter-bar { background:blue; }Value: 80
Cambiar el color del medidor cuando el medidor esta en el rango
low <= optimum <= high:#meter2::-webkit-meter-bar { background:blue; }Value: 80
Cambiar el color cuando esta de este rango; es decir;
low <= optimum <= high:#meter2::-webkit-meter-bar { background:blue; }Value: 80
Para ver el código completo del experimento, has clic aquí.
Ejemplo 3
También podemos aplicarle un gradiente, en vez de un color solido:
#meter5 {
width:60%;
height:60px;
}
#meter5::-webkit-meter-bar {
background: -webkit-gradient(linear, left top, left bottom, from(#FFF), to(#FFF), color-stop(0.20, #eee), color-stop(0.45, #eee), color-stop(0.55, #ccc));
border-radius:5px;
}
#meter5::-webkit-meter-optimum-value {
background: -webkit-gradient(linear, left top, left bottom, from(#FFF), to(#FFF), color-stop(0.20, #cea), color-stop(0.45, #7a3), color-stop(0.55, #7a3));
border-radius:5px;
}
#meter5::-webkit-meter-suboptimum-value {
background: -webkit-gradient(linear, left top, left bottom, from(#FFF), to(#FFF), color-stop(0.20, #ffc), color-stop(0.45, #db3), color-stop(0.55, #db3));
border-radius:5px;
}Value: 80
Para ver el código completo del experimento, has clic aquí.
Ejemplo básico
<label>Nivel:</label>
<meter value="50" min="0" max="100"></meter>Ejemplo simulando progreso de tareas (basado en mi experiencia)
Una vez tuve que mostrar cuánto llevaba un usuario completando una tarea. Aunque al principio usé <meter>, terminé cambiándolo por <progress>. Aquí te muestro cómo habría quedado con <meter> si el rango fuese conocido:
<label>Progreso de la tarea</label>
<meter id="m1" value="30" min="0" max="100"></meter>Y para actualizarlo dinámicamente:
let m = document.getElementById("m1");
let v = 0;
setInterval(() => {
if(v <= 100) {
m.value = v;
v++;
}
}, 100);Ejemplo con rangos y estados
<label>Nivel de temperatura</label>
<meter value="65" min="0" max="100" low="30" high="70" optimum="60"></meter>Personalización y estilos: cómo cambiar el diseño del <meter>
Los navegadores basados en WebKit permiten personalizar con pseudoclases:
- ::-webkit-meter-bar
- ::-webkit-meter-optimum-value
- ::-webkit-meter-suboptimum-value
Yo mismo tuve que modificar estos estilos cuando quise que mi medidor combinara con la paleta de colores del proyecto.
Pseudoclases CSS específicas
meter::-webkit-meter-optimum-value {
background: green;
}
meter::-webkit-meter-suboptimum-value {
background: yellow;
}
meter::-webkit-meter-even-less-good-value {
background: red;
}Estilos avanzados con gradientes:
meter::-webkit-meter-bar {
background: linear-gradient(to bottom, #fff, #ccc);
}Accesibilidad del elemento <meter> en HTML5
Para que un <meter> sea accesible:
- Usa siempre label asociado
- Agrega texto alternativo si el significado no es obvio
- Considera usar aria-valuenow, aria-valuemin, aria-valuemax cuando personalices demasiado el estilo
Errores comunes y buenas prácticas al usar <meter>
- ❌ Error: Usarlo para progreso indefinido
- (Justo lo que me pasó la primera vez.)
- ❌ Error: No definir min y max
- Hace que el componente pierda semántica.
- ❌ Error: Valores fuera de rango
- Algunos navegadores ignoran el medidor.
- ✔ Buena práctica: Mostrar contexto textual
- Ejemplo: “65% (temperatura alta)”.
Preguntas frecuentes sobre el elemento <meter>
- ❓ ¿Puedo usar <meter> para progreso de tareas?
- Solo si conoces el valor final. Si no, usa <progress>.
- ❓ ¿Puedo cambiar el color del <meter>?
- Sí, pero solo con pseudoclases específicas en WebKit.
- ❓ ¿Qué pasa si no defino min o max?
- Los valores por defecto serán 0 y 1.
Conclusión
El elemento <meter> es potente, semántico y muy útil cuando necesitas mostrar valores dentro de un rango. Entender sus atributos y estados visuales no solo mejora la accesibilidad, sino que te permite construir interfaces más claras. Y como comprobé cuando intenté mostrar progreso de una tarea, elegir correctamente entre <meter> y <progress> marca la diferencia entre una interfaz correcta y una engañosa.
Acepto recibir anuncios de interes sobre este Blog.
Aprende a dominar el elemento