HTML low Attribute

Beginner
⏱️ 6 min read
📚 Updated: Jun 2026
🎯 3 Examples
Meter & Form Controls

Introduction

The low attribute sets the upper bound of the low range on a <meter> element. It works only on <meter>—not on <input type="number">, range sliders, or other form controls. Together with min, max, high, optimum, and value, it helps browsers color-code gauge readings for test scores, fuel levels, battery indicators, and similar measurements.

What You’ll Learn

01

Meter Only

Valid on <meter> alone.

02

Lower Range

Upper bound of low zone.

03

With min/max

min ≤ low ≤ high ≤ max.

04

Not input min

Different from form limits.

05

meter.low

Update threshold in JS.

06

vs progress

Gauge semantics, not bars.

Purpose of low Attribute

The low attribute defines where the low (warning) region ends on a <meter> scale. Values at or below low fall into the low segment, which browsers typically render with a caution color. It does not set the meter’s minimum scale bound—that is what min does.

Use low alongside min, max, high, optimum, and value to create semantic gauges for quiz scores, fuel tanks, disk headroom, and similar measurements. When high is also set, the constraint is min ≤ low ≤ high ≤ max.

💡
Not the same as min on <input>

The low attribute marks a threshold zone on a read-only <meter> gauge. min on <input type="number"> or type="range" limits what a user can enter or select. They are completely different features—do not use low on form inputs.

📝 Syntax

Add low to a <meter> element with a numeric value within the scale:

low.html
<!-- Test score: value in low segment -->
<label for="score">Quiz score:</label>
<meter
  id="score"
  value="35"
  min="0"
  max="100"
  low="40"
  high="70"
  optimum="85">35/100</meter>

<!-- Fuel gauge with low threshold -->
<meter value="18" min="0" max="100" low="25">18%</meter>

Syntax Rules

  • low applies only to the <meter> element—not to <input>, <progress>, or other elements.
  • The value must be a valid floating-point number within the meter’s scale defined by min and max.
  • When high is set, ensure min ≤ low ≤ high ≤ max.
  • low marks the upper bound of the low range—values at or below it enter the low (warning) segment.
  • Pair with value (current reading), min/max (scale bounds), and optionally high and optimum.
  • Use <progress> for completion bars; use <meter> for gauges with semantic thresholds.

💎 Values

The low attribute accepts a floating-point number representing a point on the meter scale:

  • low="40" — Low range ends at 40 on a 0–100 scale. Values at or below 40 show in the low segment.
  • low="25" — On a fuel gauge, readings of 25% or below trigger the low zone.
  • low="0.3" — Valid on a 0–1 scale (default min/max when omitted).
  • Attribute absent — No explicit lower-range threshold; browser uses default coloring based on value and optimum alone.
low-values.html
<!-- Full meter with all range attributes -->
<meter
  value="35"
  min="0"
  max="100"
  low="40"
  high="70"
  optimum="85">35/100</meter>

<!-- JavaScript: change low threshold -->
<script>
  var meter = document.getElementById("fuel");
  meter.low = 30;   // number property
</script>

⚡ Quick Reference

ConceptDetailsNotes
Applies to<meter> onlyNot input, progress, or other elements
Value typeFloating-point numberWithin min–max scale
MeaningUpper bound of low rangeValues ≤ low = low segment
Constraintmin ≤ low ≤ high ≤ maxWhen high is set
JS propertymeter.low = 40Number, not string
Not the same asmin on <input>Form limit vs gauge threshold

Applicable Elements

ElementSupported?Notes
<meter>YesOnly element that supports low
<progress>NoUse for completion bars, not threshold gauges
<input type="range">NoUse min attribute for slider lower limit
<input type="number">NoUse min for validation, not low
<input> (other types)Nolow is not a form validation attribute
Any other HTML elementNolow is meter-specific per HTML spec

low vs min vs high vs optimum on <meter>

AttributeExampleRole on Meter
minmin="0"Lower bound of the entire scale
maxmax="100"Upper bound of the entire scale
lowlow="40"Upper bound of the low segment (at or below = low zone)
highhigh="70"Lower bound of the high segment (above = warning zone)
optimumoptimum="85"Preferred value; influences optimum coloring
valuevalue="35"Current measurement shown on the gauge

low on <meter> vs min on <input>

Featurelow on <meter>min on <input>
Element<meter> only<input type="number">, type="range", etc.
PurposeMarks upper bound of low warning zone on a gaugeSets minimum allowed user input value
InteractionRead-only displayUser-editable form control
ValidationNot used for form validationConstrains what users can submit
JavaScriptmeter.low = 40input.min = "1" (string)
Visual effectChanges meter color regionsLimits slider thumb or number entry

Examples Gallery

Test score meter with low threshold, fuel gauge, and dynamic low updates with JavaScript.

👀 Live Preview

A quiz score meter with value="35", min="0", max="100", and low="40":

35/100

Value 35 is at or below low="40", so it falls in the low segment. Above 40, the meter enters the moderate zone.

Example — Test Score Meter

Show a quiz score with a failing threshold at 40. Include visible fallback text inside the meter for older browsers:

score-meter.html
<label for="score">Quiz score:</label>
<meter
  id="score"
  value="35"
  min="0"
  max="100"
  low="40"
  high="70"
  optimum="85">35/100</meter>
Try It Yourself

How It Works

The browser divides the 0–100 scale into segments using low and high. Values at or below low="40" render in the low (warning) color. optimum="85" hints that higher scores are preferred.

Example — Fuel Gauge

Track fuel level with low="25" as the warning threshold on a 0–100 range:

fuel-meter.html
<label for="fuel">Fuel level:</label>
<meter
  id="fuel"
  value="18"
  min="0"
  max="100"
  low="25"
  high="75"
  optimum="80">18%</meter>
Try It Yourself

How It Works

The scale runs from min="0" to max="100". Values at or below low="25" trigger the low (caution) color—ideal for fuel, battery, or any “running low” indicator.

Dynamic Values with JavaScript

Update the low threshold at runtime using the meter.low number property:

dynamic-low.html
<label for="capacity">Storage free:</label>
<meter id="capacity" value="30" min="0" max="100" low="20">30%</meter>
<button type="button" id="raiseLow">Raise low to 35</button>

<script>
  document.getElementById("raiseLow").addEventListener("click", function () {
    var meter = document.getElementById("capacity");
    meter.low = 35;
  });
</script>
Try It Yourself

How It Works

Assigning a number to meter.low updates the lower-range threshold immediately. The browser recalculates which color region the current value falls into. Use addEventListener rather than inline handlers for cleaner separation of markup and behavior.

♿ Accessibility

  • Label every meter with visible text — Use <label for="id"> paired with the meter’s id, or wrap the meter in a labeled container so users know what the gauge measures.
  • Include fallback text inside <meter> — Browsers that do not support <meter> show the inner text (e.g. 35/100) instead of a blank element.
  • Do not rely on color alone — Supplement meter color regions with visible numeric values or descriptive labels so color-blind users understand the reading.
  • Announce changes when updating dynamically — If JavaScript changes value or low, consider an aria-live region for screen reader updates.
  • Use <meter> for gauges, <progress> for completion — Picking the correct element gives assistive technology the right semantics.
  • Keep scale attributes consistent — Ensure min, max, low, and high use the same units as value so readings make sense when spoken aloud.

🧠 How low Works

1

Author sets meter scale

min, max, low, high, value.

Markup
2

Browser divides scale

Low, moderate, and high segments.

Parse
3

Value mapped to region

Color reflects current segment.

Render
=

Semantic gauge display

Threshold-aware meter coloring.

Browser Support

The low attribute is fully supported in all modern browsers on <meter> elements. It works alongside min, max, high, optimum, and value for threshold-based gauge coloring.

HTML5 · Fully supported

Universal meter thresholds

All major browsers honor low on <meter> and expose the meter.low property.

97% Browser support
Google Chrome Fully supported
Full support
Mozilla Firefox Fully supported
Full support
Apple Safari Fully supported
Full support
Microsoft Edge Fully supported
Full support
low attribute on <meter> 97% supported

Bottom line: Use low confidently on <meter>; include inner text as a fallback for rare unsupported environments.

💡 Best Practices

✅ Do

  • Use low only on <meter> elements
  • Keep min ≤ low ≤ high ≤ max when all are set
  • Pair meters with visible <label> text
  • Include fallback text inside <meter> (e.g. 35/100)
  • Use meter.low = 40 (number) in JavaScript

❌ Don’t

  • Put low on <input> or <progress>
  • Confuse low with min on form controls
  • Set low above high or below min
  • Rely on meter color alone without numeric labels
  • Use <meter> for simple progress bars—use <progress>

Conclusion

The low attribute sets the upper bound of the low range on a <meter> gauge. It works exclusively on <meter> alongside min, max, high, optimum, and value to create threshold-aware displays for test scores, fuel levels, and capacity indicators.

Remember that low is not min on form inputs—it marks where the low warning zone ends, not the scale minimum. Update thresholds with meter.low = 40 in JavaScript, label meters for accessibility, and choose <progress> when you need a completion bar instead of a semantic gauge.

Key Takeaways

Knowledge Unlocked

Five truths every developer should know about low

Bookmark these before building your next meter gauge.

5
Core concepts
⚠️ 02

Lower range end

Upper bound of low zone.

Meaning
📝 03

Not input min

Threshold vs form limit.

Compare
⚙️ 04

meter.low = 40

Number property in JS.

Script
05

Label + fallback

Visible text inside meter.

A11y

❓ Frequently Asked Questions

It sets the upper bound of the low range on a <meter> element. Values at or below low fall into the low (warning) segment. Browsers use it with min, max, high, and optimum to color-code gauge readings.
Only the <meter> element. It does not apply to <input>, <progress>, range sliders, or any other HTML element.
No. low on <meter> marks where the low warning zone ends on a read-only gauge. min on <input type="number"> or type="range" limits what a user can enter or select. They serve completely different purposes.
When both low and high are set, the constraint is min ≤ low ≤ high ≤ max. low marks the upper bound of the low segment; high marks the lower bound of the high segment. value shows the current reading.
Use the numeric IDL property: meterElement.low = 40. This updates the threshold and may change which color region the current value falls into.
Yes. All modern browsers support the low attribute on <meter> along with min, max, high, optimum, and value. Include inner text as a fallback for rare unsupported environments.

Build threshold-aware meter gauges

Practice the low attribute with test scores, fuel gauges, and JavaScript examples in the Try It editor.

Try test score example →

About the author

Mari Selvan M P
Mari Selvan M P 🔗

Developer, cloud engineer, and technical writer

  • Experience 12 years building web and cloud systems
  • Focus Full Stack Development, AWS, and Developer Education

I write practical tutorials so students and working developers can learn by doing—from databases and APIs to deployment on AWS.

5 people found this page helpful