@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