On day 1 of the #HTMHellAdventCalendar @5t3ph describes an accessibility issue that can arise when you use popovers and dialogs together. #HTMHellAdventCalendar

https://htmhell.dev/adventcalendar/2025/1/

Top layer troubles: popover vs. dialog - HTMHell

A collection of bad practices in HTML, copied from real websites.

Top layer troubles: popover vs. dialog - HTMHell

On day 2 @boldewyn reminds us of a hellish deprecated element in HTML: `<plaintext>` #HTMHellAdventCalendar

https://htmhell.dev/adventcalendar/2025/2/

Using the Ancient Evils for Debugging - HTMHell

A collection of bad practices in HTML, copied from real websites.

Using the Ancient Evils for Debugging - HTMHell

On day 3 @tunetheweb introduces us to Speculation Rules and recent improvements to the API that help us speed up our websites. #HTMHellAdventCalendar

https://htmhell.dev/adventcalendar/2025/3/

Speculation rules improvements - HTMHell

A collection of bad practices in HTML, copied from real websites.

Speculation rules improvements - HTMHell

On day 4 @mehm8128 introduces us two future solutions for creating cross-root references. #htmHellAdventCalendar

https://htmhell.dev/adventcalendar/2025/4/

Referencing HTML elements inside Shadow DOM - HTMHell

A collection of bad practices in HTML, copied from real websites.

Referencing HTML elements inside Shadow DOM - HTMHell
IDREFs: What they are and how to use them - HTMHell

A collection of bad practices in HTML, copied from real websites.

IDREFs: What they are and how to use them - HTMHell

On day 6 @colabottles reminds us how powerful the lang attribute is #HTMHellAdventCalendar

https://htmhell.dev/adventcalendar/2025/6

Accessible by Design: The Role of the 'lang' Attribute - HTMHell

A collection of bad practices in HTML, copied from real websites.

Accessible by Design: The Role of the 'lang' Attribute - HTMHell
Controlling dialogs and popovers with the Invoker Commands API - HTMHell

A collection of bad practices in HTML, copied from real websites.

Controlling dialogs and popovers with the Invoker Commands API - HTMHell

On day 8 @patrickbrosset illustrates how the fact that HTML is so forgiving can be a blessing and a curse. #htmhellAdventCalendar

https://htmhell.dev/adventcalendar/2025/8/

What's wrong with this HTML, and is it valid? - HTMHell

A collection of bad practices in HTML, copied from real websites.

What's wrong with this HTML, and is it valid? - HTMHell
Discover Dialog - HTMHell

A collection of bad practices in HTML, copied from real websites.

Discover Dialog - HTMHell

On day 10 @SteveFaulkner revisits the 1st rule of ARIA, which he originally formulated, and there's also something about beavers…I think. #HTMHellAdventcalendar

https://htmhell.dev/adventcalendar/2025/10/

a11y freedom beaver - HTMHell

A collection of bad practices in HTML, copied from real websites.

a11y freedom beaver - HTMHell

On day 11 @robinwhittleton shares what he knows about HTML for ePub. #htmHellAdventcalendar

https://htmhell.dev/adventcalendar/2025/11/

How HTML changes in ePub - HTMHell

A collection of bad practices in HTML, copied from real websites.

How HTML changes in ePub - HTMHell

On day 12 Manuel Sanchez lists things we need to consider when using Math on the web. #HTMHellAdventcalendar

https://htmhell.dev/adventcalendar/2025/12/?m

A11y Considerations in Math on the Web - HTMHell

A collection of bad practices in HTML, copied from real websites.

A11y Considerations in Math on the Web - HTMHell

On day 13 @lloydi presents one of my favourite debugging tools. #htmHellAdventcalendar

https://htmhell.dev/adventcalendar/2025/13/

Hell is other people's markup - HTMHell

A collection of bad practices in HTML, copied from real websites.

Hell is other people's markup - HTMHell

@matuzo @lloydi this is rad, will add it to my bookmarks

Also a good benchmark: if your code needs de-crapulation you might need to reevaluate your work 🤷‍♂️