HTML <progress> Tag

Beginner
⏱️ 6 min read
📚 Updated: Jun 2026
🎯 2 Examples
HTML5 Forms

What You’ll Learn

The <progress> tag shows how far a task has advanced. This guide covers syntax, value and max, file upload patterns, and how progress differs from meter.

01

Task Progress

Completion feedback.

02

value

Current amount.

03

max

Completion goal.

04

File Uploads

Upload indicators.

05

vs meter

Task vs gauge.

06

Accessible UI

Labels and updates.

What Is the <progress> Tag?

The <progress> tag is an HTML5 element designed to represent the completion progress of a task. It is particularly useful for indicating the advancement of file uploads, form submissions, or any process with a measurable completion status.

Valid HTML5 — Task Completion Indicator

Browsers render <progress> as a native progress bar. Update value with JavaScript to reflect real-time completion.

Omit value when completion is unknown — the browser shows an indeterminate animated bar.

📝 Syntax

Place the tag in your document and use value to specify the current completion level:

syntax.html
<progress value="50" max="100"></progress>

Here, value represents the current progress and max sets the maximum value, indicating the completion threshold.

Syntax Rules

  • max defaults to 1 if omitted; use max="100" for percentage-style bars.
  • value must be between 0 and max.
  • Provide fallback text inside the element for very old browsers: 50%.
  • Pair with a label so users know what is progressing.

⚡ Quick Reference

TopicCode SnippetNotes
50% completevalue="50" max="100"Half-filled bar
IndeterminateNo valueUnknown completion
Form linkform="myForm"Outside form
Fallback textInner text contentLegacy browsers
vs meterTask completionmeter = gauge
Browser supportModern 100%IE 10+ partial

⚖️ <progress> vs <meter>

ElementPurposeExample
<progress>Task completion over timeFile upload, install
<meter>Scalar measurement in rangeDisk usage, score
Indeterminateprogress onlyWaiting with no percent

🧰 Attributes

The <progress> tag supports attributes to define completion state and form association:

attributes.html
<progress value="75" max="100" form="uploadForm">75%</progress>
value Current

Current progress toward completion.

value="75"
max Goal

Maximum value representing full completion.

max="100"
form Associate

ID of the form when progress is outside it.

form="uploadForm"
id Target

Hook for JavaScript progress updates.

id="uploadProgress"

Examples Gallery

Build progress bars for file uploads and general task completion feedback.

👀 Live Preview

Task progress at 50%:

50%

📚 Common Use Cases

The <progress> tag gives users visual feedback during ongoing tasks such as uploads and long-running operations.

File Uploads

The progress tag is commonly used to display the progress of file uploads.

file-uploads.html
<form action="/upload" method="post" enctype="multipart/form-data">
  <label for="file">Select File:</label>
  <input type="file" id="file" name="file">
  <progress value="0" max="100" id="uploadProgress">0%</progress>
  <input type="submit" value="Upload">
</form>
Try It Yourself

Task Completion

Showcasing the progress of a task, such as a lengthy computation, provides valuable feedback to users.

task-completion.html
<progress value="30" max="100">30%</progress>
Try It Yourself

♿ Accessibility

  • Label the bar — Use <label for="id"> to describe what is progressing.
  • Use progress for tasks — Do not use meter for upload bars; semantics differ for assistive technology.
  • Provide text fallback — Include percentage text inside the element for older user agents.
  • Update aria-valuenow — Native progress exposes values; keep JavaScript updates in sync.

🧠 How <progress> Works

1

Author sets value and max

Define current completion and the total goal.

Markup
2

Browser draws the bar

Fill width reflects value / max.

Render
3

JavaScript updates value

Real uploads and tasks change progress.value live.

Dynamic
=

Informed users

Visitors see how far a task has advanced without guessing.

Browser Support

The <progress> element is an HTML5 tag with full support in all modern browsers and partial support in Internet Explorer 10+.

Baseline · HTML5

Native progress bars everywhere

Chrome, Firefox, Safari, Edge, and Opera all render interactive progress indicators.

100% Modern 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
Internet Explorer IE 10+ · Partial
Partial
Opera Fully supported
Full support
<progress> tag 100% modern support

Bottom line: Use <progress> for task completion bars in all modern browsers.

Conclusion

Effectively implementing the <progress> tag is crucial for providing users with real-time feedback on task completion. By incorporating this tag into your web development projects, you enhance the user experience by keeping them informed about ongoing processes.

💡 Best Practices

✅ Do

  • Label progress bars with clear descriptions
  • Update value dynamically with JavaScript
  • Use max="100" for percentage-style UIs
  • Choose progress over meter for tasks

❌ Don’t

  • Use meter for upload completion
  • Set value greater than max
  • Leave progress unlabeled for screen reader users
  • Fake progress with divs when native progress fits

Key Takeaways

Knowledge Unlocked

Six truths every developer should know about <progress>

Bookmark these before you add progress bars to your UI.

6
Core concepts
⚙️ 02

value

Current progress.

Attributes
🎯 03

max

Completion goal.

Attributes
📤 04

Uploads

Common use case.

Pattern
⚖️ 05

Not meter

Task vs gauge.

Semantics
🌐 06

Modern 100%

IE 10+ partial.

Compatibility

❓ Frequently Asked Questions

It shows how far a task has completed, such as an upload or install.
progress tracks task completion; meter shows a measurement in a range.
Omit the value attribute for an indeterminate animated bar.
value is current progress; max is the total goal.
Yes in all modern browsers. IE 10+ has partial support.

Build Progress Indicators

Practice <progress> with file uploads and task completion in the Try It editor.

Try task progress →

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.

6 people found this page helpful