demo · v134

What the parser drops — before / after

The Open UI / WHATWG bug that this fixed: pre-Chrome 134 the HTML parser quietly evicted any tag inside <select> that wasn’t <option> / <optgroup> / <hr>. Customizable select couldn’t exist because <div> wrappers never made it into the DOM. Below: paste HTML, see the resulting node tree under both parsing rules, and watch the rendered <select> behave (or not) depending on which version of Chrome you’re on.

probing select parser relaxation…

Try it

source HTML

parsed by this browser (live)

rendered <select> (relaxed parser uses extra DOM, legacy parser strips it)

what the legacy parser would build (model)

see also