Feedback

Meter

A meter represents a quantity within a known range, or a fractional value.

Completeness: styles-sufficient

The stylesheet is the whole component. There is no keyboard map beyond what the native element already does and nothing sets state at runtime that the CSS keys on, so a CSS-only port reproduces it.

Import

import { Meter, Label } from '@blakeui/react';

Usage

Storage60%
import {Label, Meter} from "@blakeui/react";

export function Basic() {
  return (
    <Meter aria-label="Storage" className="w-64" value={60}>

Anatomy

import { Meter, Label } from '@blakeui/react';

export default () => (
  <Meter value={60}>
    <Label>Storage</Label>
    <Meter.Output />
    <Meter.Track>
      <Meter.Fill />
    </Meter.Track>
  </Meter>
);

Sizes

Small40%
Medium60%
Large80%
import {Label, Meter} from "@blakeui/react";

export function Sizes() {
  return (
    <div className="flex w-64 flex-col gap-6">

Colors

Default50%
Accent50%
Success50%
Warning50%
Danger50%
import {Label, Meter} from "@blakeui/react";

export function Colors() {
  return (
    <div className="flex w-64 flex-col gap-6">

Custom Value Scale

Use minValue, maxValue, and formatOptions to customize the value range and display format.

Revenue$750.00
import {Label, Meter} from "@blakeui/react";

export function CustomValue() {
  return (
    <Meter

Without Label

When no visible label is needed, use aria-label for accessibility.

import {Meter} from "@blakeui/react";

export function WithoutLabel() {
  return (
    <Meter aria-label="Storage usage" className="w-64" value={45}>

Styling

Passing Tailwind CSS classes

You can customize individual Meter parts:

import { Meter, Label } from '@blakeui/react';

function CustomMeter() {
  return (
    <Meter value={60}>
      <Label>Storage</Label>
      <Meter.Output />
      <Meter.Track className="bg-purple-100 dark:bg-purple-900">
        <Meter.Fill className="bg-purple-500" />
      </Meter.Track>
    </Meter>
  );
}

Customizing the component classes

To customize the Meter component classes, you can use the @layer components directive.
Learn more.

A worked example is in Styling.

blakeUI follows the BEM methodology to ensure component variants and states are reusable and easy to customize.

CSS Classes

The Meter component uses these CSS classes (View source styles):

Base & Element Classes

  • .meter - Base container (grid layout)
  • .meter__output - Value text display
  • .meter__track - Track background
  • .meter__fill - Filled portion of the track

Size Classes

  • .meter--sm - Small size variant (thinner track)
  • .meter--md - Medium size variant (default)
  • .meter--lg - Large size variant (thicker track)

Color Classes

  • .meter--default - Default color variant
  • .meter--accent - Accent color variant
  • .meter--success - Success color variant
  • .meter--warning - Warning color variant
  • .meter--danger - Danger color variant

API Reference

Meter Props

Inherits from React Aria Meter.

PropTypeDefaultDescription
valuenumber0The current value
minValuenumber0The minimum value
maxValuenumber100The maximum value
size"sm" | "md" | "lg""md"Size of the meter track
color"default" | "accent" | "success" | "warning" | "danger""accent"Color of the fill bar
formatOptionsIntl.NumberFormatOptions{style: 'percent'}Number format for the value display
valueLabelReactNode-Custom value label content
childrenReactNode | (values: MeterRenderProps) => ReactNode-Content or render prop

MeterRenderProps

When using the render prop pattern, these values are provided:

PropTypeDescription
percentagenumberThe percentage of the meter (0-100)
valueTextstringThe formatted value text

On this page