@me/changelog: HTML
version: 2026.04
Contextual & Historical Importance
I learned HTML around 2003 as a child. I was learning right in the middle of the XHTML era, when every tutorial was teaching <br /> as gospel. XHTML was the official standard, and self-closing void elements were required.
From 2012 to 2014, I was moving through some pretty big life stages—college graduation, moving out, falling into a career by-way-of internship, a post-hire for one year before lay-off, six months of unemployment, and finally finding a position I would stay at for ten years before moving on again. During those two turbulent years, HTML5 quietly reversed the trailing slash, and void elements no longer required it. I focused on learning other technologies required for the job I was trying to keep, and the demands for my position evolved so quickly that I never had a reason to look back at something as basic as <br>. I adopted the patterns that were being used around me, omitted the trailing slash most times, but it never felt intentional. The problem remains, though; I still sometimes default to the old habit and include it. The reality is the HTML platform kept growing while I was heads-down in deadlines, frameworks, and casually adopting new habits without really understanding why.
Void Elements
area, base, br, col, embed, hr, img, input, link, meta, source, track, wbr
- Severity: cosmetic → browsers ignore trailing slash
- Previous Pattern:
<br /> - New Pattern:
<br> - Exception: self-closing tags required in void elements for JSX, XML, XHTML, SVG
Semantic Tags
<header>, <nav>, <article>, <section>, <footer>, etc.
- Severity: cosmetic → additive
- Value: accessibility, SEO
- Previous Pattern: <div> soup
- New Pattern: retire the reflex to reach for <div> when a more specific element exists
Native Lazy Loading
loading="lazy"
- Severity: additive → deprecated (the JS approach)
- Previous Pattern: lazysizes library, IntersectionObserver boilerplate
- New Pattern: loading="lazy" on img and iframe
Dialog
<dialog>
- Severity: deprecated (the div/JS modal pattern)
- Previous Pattern: div + z-index + JS focus trap + aria roles + backdrop div
- New Pattern: <dialog> with showModal() handles all of it natively