HTML reabsorbs JS
Popover, dialog, view transitions all moved into the platform.
One more thing
Declarative shadow DOM lets server-rendered Web Components hydrate cleanly.
HTML isn't a programming language — it's markup: no variables, no loops, not Turing-complete. But every UI on the web begins here: from TBL's first website at CERN in 1991 to popover / dialog / view transitions still pushing the platform outward in 2026. Thirty-five years old, still evolving, still re-absorbing JS.
HTMLHTML = HyperText Markup Language. A markup language — it tells the browser what a chunk is (heading / paragraph / link), not how to do anything. It is not a programming language: no variables, expressions, control flow or functions; not Turing-complete. But every web UI starts here — CSS handles "how it looks," JS handles "how it moves," HTML handles "what it is."
No variables, loops, or functions; not Turing-complete. You don't "run HTML" — it's a declarative structural description parsed into a DOM, then operated on by CSS and JS. The same family as XML / Markdown / JSON.
Since 2019 the spec lives only at WHATWG (jointly run by Apple, Mozilla, Google, Microsoft) — no more version numbers. "HTML5" is a historical label; in 2026 the spec is just "HTML" or "the Living Standard". PRs land daily.
1991 HTML still renders in a 2026 browser. The WHATWG spec explicitly forbids breaking old content — a structural difference between the web and every other platform. No deprecation cycle, only "renders forever."
HTML / CSS / JS are the web's three-legged stool. HTML = structure, CSS (/code/css) = presentation, JS (/code/javascript) = behaviour. Decoupling the three has been the design consensus since HTML 4.01 in 1999.
<TITLE>The WorldWideWeb project</TITLE>
<NEXTID N="55">
<H1>World Wide Web</H1>
<A NAME="0">The WorldWideWeb (W3) is a wide-area
hypermedia</A> information retrieval
initiative aiming to give universal
access to a large universe of documents.
# 22 tags · uppercase · no CSS · no JS
# still renders in 2026 Chrome<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="utf-8">
<meta name="viewport"
content="width=device-width">
<title>HTML in 2026</title>
</head>
<body>
<article>
<h1>HTML in 2026</h1>
<button popovertarget="m">menu</button>
<div id="m" popover>...</div>
</article>
</body>
</html>: 1989 → 2026HTML's story breaks into four arcs: birth (1989–1995) → the W3C era, ending in the XHTML detour (1995–2008) → HTML5 + the browser wars (2008–2019) → WHATWG Living Standard + re-absorbing JS (2019–2026).
"Information Management: A Proposal" — a single diagram and a few pages of prose laying out what a hypertext system should look like. This is the seed of the web; HTML doesn't exist by name yet, but everything that follows grows out of this page.
TBL deploys the first website on a NeXT workstation at CERN. 22 tags: <a>, <p>, <h1>–<h6>, <ul>… No CSS, no JavaScript, no images. Pure structure.
Marc Andreessen builds Mosaic at the University of Illinois — the first graphical browser to show text and images on the same page. The <img> tag lands the same year. The web becomes "pretty." Andreessen leaves a year later to found Netscape.
Netscape 1.0 ships in October and grabs ~80% browser share within a year. The same month, TBL founds W3C at MIT to pull web standards back to a neutral home — a tug-of-war that lasts 25 years.
IETF RFC 1866 codifies the de-facto usage of 1993–95 as the first formal HTML standard: forms (<form>), images, links, tables (added soon after). Also in 1995: JavaScript (Brendan Eich, in 10 days), IE 1.0, PHP — every pillar of the web platform arrives in one year.
W3C ships its first own spec: tables (<table>), applets, font tags, frames. The era of "layout with <table>" begins here and runs a full decade — exactly what the later CSS revolution sets out to undo.
The first step toward separating structure from presentation: CSS recommended instead of <font> / bgcolor. Semantic tags arrive: <abbr>, <q>, <label>. For the next decade the HTML mainline stalls while W3C bets everything on XHTML.
IE6 ships with Windows XP, claims ~95% desktop browser share, and Microsoft disbands the IE team entirely. Web standards freeze at 2001 levels. The seven-year dark age burns into the industry's memory just how bad a browser monopoly is.
W3C bets on XHTML 2.0: strict XML parsing — one unclosed <br> breaks the whole page. Elegant on paper, but real-world content is too messy and strict parsing shatters everything. W3C formally abandons XHTML 2.0 in 2009.
W3C refuses to keep evolving HTML, so Apple, Mozilla and Opera form WHATWG (Web Hypertext Application Technology Working Group) on the spot at a W3C meeting and start evolving HTML themselves. The moment the open-standards body effectively walks out on W3C.
Rebuilt from Netscape's ashes, Mozilla ships Firefox 1.0; within four years it holds ~30% share. The browser market becomes multipolar for the first time — but IE6 isn't dead and the compat hell will last five more years.
<canvas> — Apple ships it quietly in SafariApple drops <canvas> into Safari 2 to power Dashboard widgets — no notice, no committee, just shipped. Mozilla follows within a month. The first piece of HTML5: WHATWG's "implement first, standardise after" approach in action.
Google ships Chrome with V8 and a multi-process architecture. An order of magnitude faster than IE6 / Firefox; within a year it holds 15% share, four years on it passes IE for #1. The 8-year IE monopoly stalemate is over. HTML5's fast lane starts here.
<video> / <audio> — Flash's death certificateWHATWG codifies <video> / <audio>. Apple simultaneously rejects Flash on iPhone — native media tags become the only proper way to play video on the web. Adobe announces Flash EOL for 2020 in 2017, but the death warrant was signed in 2009.
Both Chrome and Safari render with WebKit. The year sees <details> / <summary>, early CSS Grid, hardware-accelerated compositing. The "is WebKit the new IE?" debate begins; Google forks Blink out of WebKit in 2013 and the split becomes real.
W3C marks HTML5 as a Recommendation. A long list lands: <section> / <article> / <nav> / <header> / <footer> / <canvas> / <video> / localStorage / WebSocket / Web Workers. The web platform officially shifts from "documents" to "applications".
<picture> / srcsetThe same year: Custom Elements + Shadow DOM + HTML Templates ship in Chrome — defining your own elements without a framework; <picture> + srcset standardise responsive images. Two quiet through-lines for the next decade of the web.
Fifteen years of standoff end on this date: W3C and WHATWG issue a joint statement — WHATWG's "Living Standard" is now the sole authoritative HTML spec; W3C no longer maintains a separate HTML standard. WHATWG's "implement first, standardise after" approach wins.
Microsoft announces Microsoft 365 will drop IE 11 in 2021 and ends Edge Legacy in 2021. Edge Chromium takes its place, now built on Blink. The IE rendering engine's 25-year run ends. "IE compatibility" disappears from the front-end vocabulary.
ACM awards Tim Berners-Lee the 2016 Turing Award (presented in 2017) for "inventing the World Wide Web, the first web browser, and the fundamental protocols and algorithms allowing the web to scale." HTML is finally recognised in computer-science canon, not just engineering folklore.
<dialog> goes cross-engineSpecced in 2014, after eight years all three major engines (Blink / WebKit / Gecko) finally ship it. The modal dialog that used to take ~150 lines of JS + ARIA is now <dialog open> — the first move in HTML clawing back work the framework era took.
Two big ones: Declarative Shadow DOM (server-rendering Web Components finally works) + View Transitions API (page-transition fades / morphs as a single CSS property — no router framework needed). Both are "give it back to HTML, not yet another framework".
The popover attribute + popovertarget give you native popups / menus / tooltips without JS, without z-index battles, with automatic top-layer. Chrome 114, Safari 17 and Firefox 125 ship in sync. The biggest "HTML re-absorbs JS" win of 2024.
<selectlist>CSS Anchor Positioning (Chrome 125+) makes popovers track their trigger automatically; <selectlist> / <selectmenu> brings fully styleable select dropdowns into HTML — 25 years of un-stylable <select> finally cracks. HTML reclaims another patch of UI-framework territory.
2026: HTML no longer ships version numbers — the Living Standard changes daily; <dialog>, popover, anchor positioning and view transitions are default tooling; declarative shadow DOM + custom elements make the "framework-less framework" actually viable. HTML isn't a "legacy tech" — it's one of the few languages in 2026 that's still actively evolving.
: TagTimelineFourteen tags arranged by introduction year — the 35-year arc from "22 tags of hypertext" to "2024 popover attribute". Each tag carries a slice of industry history.
: PlatformAPIBy 2026 "HTML" means far more than tags — it carries the full HTML5-era API surface: canvas, media, dialog, details, custom elements, popover, ARIA. The eight cards below are the native surface web-UI engineers touch every day.
<canvas> — 2D / WebGL / WebGPUImmediate-mode drawing. 2D context, WebGL, and WebGPU all attach here — the root of every game / visualisation / 3D renderer in the browser.
<canvas id="c" width="512" height="512">
</canvas>
<script>
const gl = c.getContext('webgl2');
// or 'webgpu' on modern Chrome
</script><video> / <audio>Native media. HLS / DASH adaptive streaming via Media Source Extensions; the controls attribute hands you free UI. What killed Flash.
<video
src="clip.mp4"
controls muted loop
poster="thumb.jpg">
</video><dialog> — native modalCross-engine in 2022. Auto top-layer, ESC-to-close, ::backdrop pseudo-element, focus trap via showModal(). Replaces ~150 lines of JS.
<dialog id="d">
<form method="dialog">
<button>OK</button>
</form>
</dialog>
<script>d.showModal()</script><details> / <summary>Native collapsible widget. The killer of the jQuery toggle. Accessibility comes for free; the open attribute is the state.
<details>
<summary>Read more</summary>
<p>Hidden until clicked.</p>
</details><picture> + srcsetThe responsive-image standard. Retina 2× / 3×, swap sources per viewport, multi-format <source> chains (avif → webp → jpg). Stop switching images from JS.
<picture>
<source srcset="hero.avif" type="image/avif">
<source srcset="hero.webp" type="image/webp">
<img src="hero.jpg" alt="…">
</picture>The real framework-less framework: class extends HTMLElement, register once, use like any built-in tag. Shadow DOM isolates styles; the 2023 declarative variant unlocks SSR.
<script>
class XBadge extends HTMLElement {
connectedCallback(){ this.textContent = '!' }
}
customElements.define('x-badge', XBadge);
</script>
<x-badge></x-badge>Cross-browser in 2024. Add popover to any element, trigger via popovertarget. Automatic top-layer, no z-index battles; bubbles, tooltips and menus all in one mechanism.
<button popovertarget="menu">Open</button>
<div id="menu" popover>
I float above everything.
</div>The patch layer for when native semantics aren't enough: role, aria-label, aria-expanded… "The best ARIA is no ARIA" — reach for the right native element first.
<div
role="button"
tabindex="0"
aria-pressed="false">
Toggle
</div>
// vs just <button>: free + correctThe first of the "5 rules of ARIA" is literally "don't add ARIA if a native element does it". <button> brings keyboard, focus and an accessible name for free; <div role="button" tabindex="0"> is equivalent only after three attributes. ARIA is a patch layer, not a structural one.
"The first rule of ARIA is: don't use ARIA. — W3C ARIA Authoring Practices"
: LiveDemoThe two boxes look almost identical, but the HTML behind them is wildly different. A screen reader reads the left as "article, heading, time, navigation, ..." and the right as "section, section, ..." — the gap between semantics and zero semantics. Live-rendered, not screenshots.
<article>
<header class="demo-header">
<h2>HTML reabsorbs JS</h2>
<time datetime="2026-04">2026-04</time>
</header>
<nav class="demo-nav">
<a href="#">spec</a>
<a href="#">mdn</a>
</nav>
<p>Popover, dialog, view transitions…</p>
<details>
<summary>One more thing</summary>
<p>Declarative shadow DOM.</p>
</details>
<footer class="demo-footer">CC-BY</footer>
</article>Popover, dialog, view transitions all moved into the platform.
Declarative shadow DOM lets server-rendered Web Components hydrate cleanly.
<div class="div-soup">
<div class="h-fake">HTML reabsorbs JS</div>
<div class="nav-fake">
<span>spec</span>
<span>mdn</span>
</div>
<div>Popover, dialog, view transitions…</div>
<div>One more thing</div>
<div>Declarative shadow DOM.</div>
<div class="footer-fake">CC-BY</div>
</div>: 1996 → 2026HTML's evolution is bolted to browser market share: whoever runs the dominant engine decides which tags you can actually ship. From NN's 80% in 1996 → IE6's 92% in 2002 → Chrome's arrival in 2008 → W3C's 2019 surrender, this curve is HTML's real-world evolution rate.
One row = April global desktop share snapshot; x-axis 0–100%
"I never patented the web. I never charged royalties. If it had been proprietary, we wouldn't have it today — the web exists because it was open. HTML, URLs, HTTP — I wanted nobody to ever own them.
In one line: The browser wars aren't HTML's backdrop — they're its engine. Every major version (HTML 4, HTML5, Living Standard) lines up with a share inversion: NN dies, IE freezes, Chrome cracks the dam, W3C surrenders. Market share drives the spec, not the other way around.
: WhyHTML"HTML is legacy, ship it and move on" — the standard junior-frontend mistake. HTML in 2026 is the actively expanding edge of the web platform — popover, view transitions, declarative shadow DOM all landed in the last three years. Six reasons below for why it can't be bypassed.
Reach for <button>, <nav>, <h1> and screen readers, keyboard tab order, SEO all come out correct for free. "The best ARIA is no ARIA" — most ARIA attributes are div soup patching itself.
<button>Save</button> // keyboard + AT free
<div role="button" tabindex="0">...</div>
// equivalent — only after 3 ARIA fixesState you can express as an attribute shouldn't live in JS. open on <dialog> is its state; popover declares popover-ness; <details open>. The core mechanism behind HTML re-absorbing JS.
<dialog open>...</dialog>
// vs: el.showModal(); + handlersHTML is the only web language that runs without compiling, transpiling, or bundling. "Open the file in a browser, refresh" — a feedback loop that has been unchanged for 25 years. TS / Rust / Swift will never offer that zero-friction.
$ open index.html
# done.1991 HTML still renders in 2026 Chrome. The WHATWG spec explicitly forbids breaking old content — the deepest difference between the web and every other platform. No deprecation cycle, only "renders forever".
// info.cern.ch (1991) — still loads
// no IE6 → Edge migration tax for HTMLSpecced in 2014, completed for SSR in 2023 (declarative shadow DOM). Cross-framework reusable: one <x-rating> runs in React, Vue and plain HTML alike. The real exit ramp from React lock-in.
<x-rating value="4.5"></x-rating>
// works in any frameworkHTML isn't only for humans: itemscope / itemprop let Google parse schema.org; JSON-LD ships inside <script type="application/ld+json">. In the AI-crawling era, this semantic layer matters more than it did in 2015.
<script type="application/ld+json">
{ "@type": "Article", "headline": "…" }
</script>: WebPlatformHTML isn't "a project" — it's a platform composed of the spec + three engines + docs + validators + compat data. These 12 nodes are the core daily-use anchors for front-end work in 2026.
: TheTriadHTML / CSS / JS form the web's three-legged stool. Putting the same job in the wrong layer is the single most common web-engineering mistake: swapping images in JS instead of srcset; using div + role instead of button; hiding via CSS instead of the hidden attribute.
| HTML | CSS | JavaScript | |
|---|---|---|---|
| Category | Markup language | Style sheet language | Programming language |
| Concern | What it is | How it looks | How it behaves |
| Origin | TBL · 1989 CERN | Håkon Wium Lie · 1996 | Brendan Eich · 1995 (10 days) |
| Turing-complete? | No | No (CSS3 Rule 110 hacks exist; doesn't count) | Yes |
| Parsing | Forgiving HTML parser · broken markup still renders | Cascade + specificity | ECMAScript spec parser |
| Standards body | WHATWG (sole since 2019) | W3C CSSWG | TC39 (ECMA) |
| Versioning | None, "Living Standard" | None, level-* drafts | Year-versioned (ES2024, ES2025…) |
| Backward compat | Spec forbids breakage | Spec forbids breakage | Spec forbids breakage |
| Build tooling | None, runs as-is | Sass / PostCSS / Tailwind | esbuild / Vite / Webpack / TS |
| 2024+ direction | Re-absorbing JS · popover / dialog / view transitions | Container queries · :has · nesting | Stable ES · types via TypeScript |
| Substitutes / subsets | Markdown · MDX · JSX (compile target) | None · Tailwind is tooling not replacement | TS / WASM / Dart |
: TheNext5YearsHTML in 2026 isn't "waiting for the next version" — it's actively claiming JS's workload. The popover / anchor / view transitions / <selectlist> line keeps running another 3-5 years; the "must use React" surface keeps shrinking back into the platform. It's the first time in 30 years HTML is actively expanding.
Almost everything HTML has added since 2024 takes the form "a thing you used to need JS for, now an attribute": popover, anchor positioning, view transitions, <dialog>, <selectlist>, scroll-driven animations. For the first time in 30 years, the HTML/CSS boundary is pushing outward.
Practical takeaway: in 2026 new pages should first ask "is there a native HTML feature for this?" before pulling in a library. The React-era "write it all yourself" reflex is a regression here.
<selectlist> goes cross-engineShipped in Chrome in 2025, Safari and Firefox in progress. A fully styleable native dropdown — the first time in 25 years that <select> accepts CSS. After this, the wave of "div-based custom selects" in UI libraries will recede hard.
Chrome shipped it in 2025; cross-engine convergence is in progress for 2026. Popovers and tooltips track their anchor automatically — no JS positioning, no z-index battles. Floating UI, Popper.js and friends will gradually fade — the reason they existed five years ago has gone away.
Same-document view transitions went cross-browser in 2024; 2025+ focuses on cross-document (MPA) navigation — classic multi-page sites get SPA-grade fade/morph transitions without a router framework. Another reason for SPAs to exist gets carved away.