HTML has been around since 1991 — and it has changed dramatically in that time. What started as a simple way to share academic documents has grown into the language that powers every website on the internet.
In this guide, you will learn how HTML evolved from HTML 1.0 through HTML5, what XHTML was, what the modern “living standard” means, and what features today’s HTML gives you that older versions did not. Every concept comes with real code and live previews.
What Are HTML Versions?
HTML is a language maintained by standards bodies. As the web grew, those bodies needed to publish formal specifications defining what tags existed and how browsers should interpret them. Each published specification became a “version” of HTML.
Understanding versions matters because:
- Older sites may use markup that modern HTML considers obsolete
- Some features only work in HTML5 and later
- Browser behavior often depends on which doctype you declare
- Job listings, tutorials, and documentation assume you know which version they are describing
However, there is an important nuance: since 2019, HTML has been maintained as a living standard. This means there are no longer numbered versions being released — the specification simply evolves continuously. So in practice, you will hear the phrase “modern HTML” more often than a version number.
If you are writing new HTML today, you are writing HTML5. There is no HTML6 to worry about,
and no version number to specify. The single doctype <!DOCTYPE html>
works everywhere.
The HTML Timeline at a Glance
Before diving into the details, here is the whole history of HTML on one table.
| Version | Year | Key contribution |
|---|---|---|
| HTML (invented) | 1991 | Tim Berners-Lee creates the first version at CERN |
| HTML 2.0 | 1995 | First formal specification, published by the IETF |
| HTML 3.2 | 1997 | Added tables, applets, and text flow around images |
| HTML 4.0 | 1997 | Introduced CSS support, scripting, frames, and internationalization |
| HTML 4.01 | 1999 | Bug fixes and clarifications; widely used through the 2000s |
| XHTML 1.0 | 2000 | Reformulated HTML as strict XML |
| XHTML 1.1 | 2001 | Stricter still; rarely adopted in practice |
| HTML5 | 2014 | Semantic elements, native media, new forms, APIs |
| HTML Living Standard | 2019 → now | Continuous updates by the WHATWG |
Each row represents a real shift in how people built websites. The next few sections explain what each one brought — and why some were abandoned.
The Early Days: HTML 1.0 to HTML 4.01
HTML was created by Tim Berners-Lee at CERN in 1991 as a way for researchers to share documents. It was simple: headings, paragraphs, links, and lists. That was essentially all.
Over the next decade, the language grew quickly. Browsers competed to add new tags, and standards bodies scrambled to catch up.
HTML 2.0 (1995)
The first formal specification. It defined a small, stable set of tags and made HTML implementable across browsers. It introduced forms for the first time.
HTML 3.2 (1997)
Added tables, image alignment, and a few presentational attributes. Tables became the primary tool for layout — which in hindsight was a mistake, but it was the state of the art at the time.
HTML 4.0 (1997) and HTML 4.01 (1999)
A major milestone. HTML 4 introduced:
- Proper support for CSS, splitting style from structure
- Scripting with JavaScript
- Frames (later deprecated)
- Better internationalization support
- Accessibility features like
altandtitleattributes
HTML 4.01 remained the recommended standard for nearly a decade. Many websites still use it today — though modern HTML has superseded it.
Older HTML used presentational tags like <font> and
<center> to style content. Modern HTML separates concerns, using CSS
for all styling instead. If you see these tags in old code, they were deprecated in HTML 4
and removed entirely in HTML5.
XHTML: The Strict Detour
In the late 1990s, XML was emerging as a universal markup format. Many people believed HTML should be reformulated as an XML application — and thus XHTML was born.
XHTML 1.0 was essentially HTML 4.01 rewritten with stricter rules:
- Every tag must be closed, even void elements like
<br /> - Element and attribute names must be lowercase
- Attribute values must always be quoted
- The document must be well-formed XML
Here is a small XHTML example:
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
<head>
<title>XHTML Example</title>
</head>
<body>
<h1>Hello</h1>
<p>This is XHTML.<br /></p>
</body>
</html>
For a while, XHTML seemed like the future. Many teams adopted it because the stricter rules felt more “professional.” But it caused two problems.
First, real-world browsers had to be lenient. A single syntax error in a strict XHTML
document could prevent the entire page from rendering. Second, XHTML’s XML foundation
required serving pages with the correct Content-Type header — something most
servers and authors got wrong.
By the mid-2000s, the web community pivoted back toward plain HTML. The XHTML 2.0 work was abandoned, and HTML5 became the new direction.
XHTML was a good idea in principle, but HTML5 replaced it. Use the modern
<!DOCTYPE html> doctype instead. If you see XHTML code, it is almost
always legacy.
HTML5: The Modern Standard
HTML5 was developed starting in 2004 by the WHATWG (a group formed by Apple, Mozilla, and Opera) and later standardized by the W3C. It became an official W3C Recommendation in 2014.
Its goal was ambitious: define exactly how browsers should behave, add features that developers had been hacking around for years, and preserve compatibility with the messy existing web.
HTML5 addressed three big problems:
- Semantic markup — new elements that described meaning instead of using
<div>for everything. - Native media — audio and video without Flash or plugins.
- Richer forms and APIs — input types, storage, geolocation, drag-and-drop, canvas, and more.
It also abandoned the XHTML strictness. HTML5 documents are tolerant of small errors and can be written in either HTML or XHTML syntax.
HTML5 introduced one of the shortest doctypes in history:
<!DOCTYPE html>. No DTD link, no version number, no URLs. Just those
three words — and every browser on the planet recognizes it.
HTML5 Semantic Elements
Before HTML5, developers used <div> for everything and relied on class
names to convey meaning. HTML5 added new elements that describe what a block of content
actually is.
<header>
Introductory content or navigational aids at the top of a page or section.
<nav>
A block of navigation links, typically for moving around the site.
<main>
The primary content of the page — only one per document.
<article>
Self-contained content that could stand alone — a blog post, a news item.
<section>
A thematic grouping of content, usually with a heading.
<aside>
Content indirectly related to the main content — sidebars, callouts.
<footer>
Footer content — copyright, contact info, related links.
<figure>
Self-contained content like an image, diagram, or code snippet.
Here is what a well-structured HTML5 page looks like:
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>HTML5 Structure</title>
</head>
<body>
<header>
<h1>My Site</h1>
<nav>
<a href="#home">Home</a>
<a href="#blog">Blog</a>
</nav>
</header>
<main>
<article>
<h2>First Post</h2>
<p>Content of the first post...</p>
</article>
<aside>
<p>Related links or ads.</p>
</aside>
</main>
<footer>
<p>© 2025 My Site</p>
</footer>
</body>
</html>
Compare this to what the same page would look like before HTML5:
<!-- Pre-HTML5 (div-based) -->
<div id="header">
<h1>My Site</h1>
<div class="nav">
<a href="#home">Home</a>
<a href="#blog">Blog</a>
</div>
</div>
<div id="main">
<div class="post">...</div>
<div class="sidebar">...</div>
</div>
<div id="footer">...</div>
The HTML5 version is immediately readable by anyone, including browsers, screen readers, and
search engines. The <div> version requires class names to convey the same
meaning — and those class names are not standard, so every project reinvents them.
Semantic HTML improves accessibility, search engine understanding, and code readability. It is one of the most valuable habits you can build as a web developer.
HTML5 Multimedia: Audio and Video
Before HTML5, embedding video on a website required third-party plugins — usually Adobe Flash. This was fragile, insecure, and excluded mobile devices that did not support Flash.
HTML5 introduced two native elements that solved this:
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>HTML5 Media</title>
</head>
<body>
<h1>HTML5 Video</h1>
<video controls width="420">
<source src="movie.mp4" type="video/mp4">
<source src="movie.webm" type="video/webm">
Your browser does not support the video element.
</video>
<h2>HTML5 Audio</h2>
<audio controls>
<source src="sound.mp3" type="audio/mpeg">
<source src="sound.ogg" type="audio/ogg">
Your browser does not support the audio element.
</audio>
</body>
</html>
The controls attribute adds browser-native playback controls. You can also
provide multiple <source> elements so the browser can pick the format it
supports.
Fallback text between the tags appears if the browser does not support the element at all — which is rare on modern browsers but useful for accessibility and legacy support.
This was one of the biggest wins of HTML5. Video and audio work natively on every modern device — including phones and tablets — without installing anything.
HTML5 Forms and Input Types
Before HTML5, HTML had essentially one input type: text. If you wanted an email
field, a date picker, or a color picker, you had to build it yourself with JavaScript.
HTML5 added more than a dozen new input types. Browsers provide native validation and specialized pickers for many of them.
| Type | Purpose | Native UI |
|---|---|---|
email | Email address | Email-format validation on mobile |
url | Web address | URL-format validation |
tel | Phone number | Phone keypad on mobile |
number | Numeric value | Spinner controls |
range | Slider value | Slider widget |
date | Date picker | Calendar popup |
time | Time picker | Time popup |
color | Color picker | Color palette |
search | Search box | Search-clearing icon |
file | File upload | File chooser |
Here is a small form using several of these new types:
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>HTML5 Form</title>
<style>
body { font-family: system-ui, sans-serif; padding: 24px; background: #f8fafc; }
label { display: block; margin: 12px 0 4px; font-weight: 600; font-size: 14px; }
input { padding: 8px 12px; border: 1px solid #cbd5e1; border-radius: 8px; font-size: 14px; width: 100%; max-width: 320px; }
button { margin-top: 16px; padding: 10px 18px; border: 0; border-radius: 8px; background: #0891b2; color: #fff; font-weight: 600; cursor: pointer; }
</style>
</head>
<body>
<form>
<label for="email">Email</label>
<input type="email" id="email" placeholder="you@inarlearn.com" required>
<label for="age">Age</label>
<input type="number" id="age" min="1" max="120">
<label for="date">Birthday</label>
<input type="date" id="date">
<label for="color">Favorite Color</label>
<input type="color" id="color" value="#0891b2">
<button type="submit">Submit</button>
</form>
</body>
</html>
Notice how much functionality you get without any JavaScript. The browser validates the email, constrains the number, provides a calendar for the date, and shows a color picker — all because the input types declare what the data should be.
Native validation is not a replacement for server-side validation, but it dramatically improves the user experience with zero code. Always start with HTML5 input types and add JavaScript only when you need custom behavior.
HTML5 APIs and Browser Features
HTML5 was never just about tags. It also introduced a set of JavaScript APIs that let web pages behave more like native applications.
Geolocation
Ask the browser for the user’s location. Requires user permission and works only on secure origins.
Web Storage
localStorage and sessionStorage for storing key-value data on the client — much larger than cookies.
Canvas
Draw graphics, charts, or games pixel-by-pixel with JavaScript on a canvas element.
Fetch & XHR
Request data from servers in the background without reloading the page.
Drag & Drop
Native support for dragging and dropping items between elements or from the desktop.
Web Workers
Run JavaScript in background threads so heavy tasks do not freeze the interface.
Notifications
Show system-level notifications, usually after the user has granted permission.
Offline & Service Workers
Cache assets and run scripts in the background for offline-first applications.
Many of these APIs were once experimental — you needed polyfills or plugins to use them. Today they are widely supported across modern browsers, and they are what makes progressive web apps, in-browser games, and complex single-page applications possible.
HTML5 vs HTML4 at a Glance
If you are coming from older HTML, this comparison captures the main shifts.
| Aspect | HTML4 | HTML5 |
|---|---|---|
| Doctype | Long DTD-based declaration | <!DOCTYPE html> |
| Semantic elements | Mostly <div> with classes |
<header>, <main>, <article>, and more |
| Audio and video | Requires plugins like Flash | Native <audio> and <video> |
| Form input types | Mainly text, password, checkbox |
Over a dozen new types |
| Vector graphics | Not supported natively | Inline SVG, <canvas> |
| Storage | Cookies only | Cookies + localStorage + IndexedDB |
| Parsing tolerance | Varies by browser | Precisely defined by the standard |
| Mobile support | Limited | Designed with mobile in mind |
The shift from HTML4 to HTML5 was not just a set of new tags. It was a fundamental change in how the web was built — treating HTML as an application platform rather than just a document format.
What “Living Standard” Really Means
In 2019, the W3C and WHATWG signed an agreement: HTML would be maintained by the WHATWG as a living standard. This is a significant change from how things used to work.
| Aspect | Versioned (HTML4 era) | Living standard (now) |
|---|---|---|
| Releases | Numbered versions every few years | Continuous updates |
| Version number | Explicit in the document | None — always “current HTML” |
| Doctype | Varied by version | One doctype for everything |
| Feature additions | Bundled into new versions | Added individually as they mature |
| Browser behavior | Defined by version-specific specs | Defined by one evolving spec |
In practice, this means:
- You do not need to say “HTML5” or “HTML6” — you just write HTML.
- New features like
<dialog>,<details>, or new input types appear in the spec and browsers gradually implement them. - You should check browser support for specific features — not versions.
- The phrase “modern HTML” usually refers to HTML5 plus everything added since 2014.
You do not need to track versions. Learn the elements and features that browsers support today, check Can I use for edge cases, and you will always be writing modern HTML.
Deprecated and Removed Elements
As HTML evolved, many elements became obsolete. They may still render in some browsers for backwards compatibility, but they should never be used in new code.
| Obsolete | Purpose | Modern replacement |
|---|---|---|
<font> | Text color and font | CSS color, font-family |
<center> | Center content | CSS text-align or margin: auto |
<big> | Larger text | CSS font-size |
<strike> | Strikethrough | CSS text-decoration or <del> |
<frame> | Page layouts | CSS Grid or Flexbox |
<applet> | Embedded Java | JavaScript, WebAssembly |
<marquee> | Scrolling text | CSS animations |
<blink> | Blinking text | CSS animations (please, do not) |
<acronym> | Acronym markup | <abbr> |
The pattern is consistent: presentational HTML was replaced by CSS, and plugin-based features were replaced by native browser capabilities.
Even if a browser still renders them, obsolete elements hurt accessibility, SEO, and code quality. If you inherit old code that uses them, refactor to modern HTML.
The Doctype: Old vs Modern
One of the most visible differences between HTML versions is the doctype — the declaration at the very top of every HTML document. It tells the browser which mode to render in.
Older doctypes
<!-- HTML 4.01 Strict -->
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN"
"http://www.w3.org/TR/html4/strict.dtd">
<!-- XHTML 1.0 Strict -->
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
Modern doctype
<!DOCTYPE html>
That single line is all you need. It triggers “standards mode” in every browser, which ensures consistent behavior across modern HTML features.
If you forget the doctype or use an old one, some browsers fall back to “quirks mode” — a legacy behavior mode that mimics bugs from the 1990s. This can cause layout problems and unpredictable CSS behavior.
Always start every HTML document with <!DOCTYPE html>. No exceptions.
It costs nothing and prevents quirks-mode issues entirely.
Common Misconceptions About HTML Versions
A few persistent myths confuse beginners learning HTML’s history.
“HTML5 is a separate language from HTML.”
No — HTML5 is the current version of HTML. It is not a different language.
“There is an HTML6.”
No. There are no plans for HTML6. The language is maintained as a living standard, and new features are added individually.
“XHTML is the modern version of HTML.”
It was once believed to be the future, but HTML5 replaced XHTML’s strict rules with a more tolerant parsing model. XHTML is now considered legacy.
“You need to specify the HTML version in your code.”
No. The single <!DOCTYPE html> declaration is all you need. There is no
version number to specify.
“Older HTML elements no longer work.”
Many still render because browsers maintain backward compatibility. That does not mean you should use them — they hurt code quality and accessibility.
“You need to learn HTML4 before HTML5.”
No. HTML5 is a superset of HTML4 in terms of syntax — everything you learn in modern HTML applies directly. Skip HTML4 entirely.
If you maintain legacy code, you may encounter HTML4 or XHTML patterns. Understanding what they are helps you refactor them, but you do not need to learn them to write modern HTML.
Frequently Asked Questions
1. What is the latest version of HTML?
HTML5 is the current major version of HTML. Since 2019, HTML has been maintained as a “living standard” by the WHATWG, meaning it is continuously updated rather than released in numbered versions.
2. What was the first version of HTML?
HTML was created by Tim Berners-Lee in 1991 and the first formal specification, HTML 2.0, was published by the IETF in 1995.
3. What is the difference between HTML4 and HTML5?
HTML5 introduced semantic elements like header, nav, and
main, native audio and video elements, new form input types, and many
JavaScript APIs. It also replaced XHTML’s strict rules with more forgiving parsing.
4. What is XHTML?
XHTML was a reformulation of HTML as an XML application. It enforced stricter rules such as mandatory closing tags and lowercase element names. It is no longer the recommended standard for new websites.
5. Is HTML5 still being updated?
Yes. HTML5 became a W3C Recommendation in 2014, and since 2019 it has been maintained as a living standard by the WHATWG. New features are added continuously without version number changes.
6. Do I need to specify a version in my HTML?
No. Modern HTML uses a single doctype, <!DOCTYPE html>, which
triggers standards mode in every browser. You do not need to specify a version number.
7. What are the new semantic elements in HTML5?
HTML5 introduced header, nav, main,
section, article, aside, footer,
figure, figcaption, details,
summary, and mark. These describe the meaning of content
rather than just its appearance.
8. What audio and video formats does HTML5 support?
The video element commonly supports MP4, WebM, and Ogg formats. The
audio element commonly supports MP3, WAV, and Ogg. Browser support varies,
so developers usually provide multiple formats.
9. What new input types did HTML5 add?
HTML5 added email, url, tel,
number, range, date, time,
month, week, color, search, and
file inputs. Browsers provide built-in validation and specialized pickers
for many of these.
10. Is XHTML still used?
Rarely. XHTML was popular in the 2000s but has been replaced by HTML5 in almost all modern development. Some legacy systems and XML-based toolchains still use it.
11. What is the WHATWG?
The WHATWG (Web Hypertext Application Technology Working Group) is the organization that maintains the HTML living standard. It was formed by Apple, Mozilla, and Opera and now includes Google and Microsoft.
12. Will there be an HTML6?
There are no plans for a numbered HTML6. HTML is now maintained as a continuously evolving living standard, so new features are added individually rather than in numbered major versions.
Key Takeaways
- HTML was created by Tim Berners-Lee in 1991 and has evolved through multiple numbered versions.
- HTML 2.0 through HTML 4.01 defined the language from the early 1990s through the 2000s.
- XHTML was a strict XML reformulation of HTML but was abandoned in favor of HTML5.
- HTML5, finalized in 2014, introduced semantic elements, native audio and video, new form input types, and many JavaScript APIs.
- Since 2019, HTML has been maintained as a living standard — continuously updated with no version numbers.
- Modern HTML uses one doctype,
<!DOCTYPE html>, which triggers standards mode everywhere. - Obsolete presentational tags like
<font>and<center>have been replaced by CSS — never use them in new code.
What to Learn Next
Now that you understand where HTML came from, the next step is to master the current version. Start with What Is HTML? for a complete beginner’s guide, then explore HTML Elements and Semantic HTML.
To see how HTML5 elements fit into the larger picture, see How Websites Work and HTML vs CSS vs JavaScript. For context on the runtime environment, explore How Web Browsers Work.
Practice Challenge
Build a single modern HTML5 page that demonstrates the version differences. Your page should:
- Start with the modern
<!DOCTYPE html>doctype - Use semantic structure:
<header>,<nav>,<main>,<article>,<aside>, and<footer> - Include at least one
<figure>with a<figcaption> - Embed an HTML5
<video>element with multiple<source>tags (the video file does not need to exist for the challenge) - Contain a form with at least three new HTML5 input types
- Use a
<details>and<summary>element for an expandable FAQ
If you can build that page, you have already used more HTML5 features than most older websites ever did — and you have a strong foundation for everything modern.