The <select> element has been one of the biggest pain points in web development for over two decades. Unlike almost every other HTML element, the browser-rendered dropdown was essentially a black box. You could change the font and colors of the button, but the dropdown list, the options, the arrow indicator — all untouchable.
This led to an entire ecosystem of JavaScript replacements: Select2, Choices.js, React Select, Headless UI Listbox, and dozens more. These libraries replace the native <select> with a fully custom DOM structure, then re-implement keyboard navigation, ARIA attributes, focus management, and form participation from scratch.
