About this set
Styles for the two controls that look most out of place by default. Custom arrow keeps a native select element, so the option list, keyboard use and mobile pickers all stay the browser’s own, but removes the platform arrow with appearance: none and draws a chevron in its place from two borders of a rotated square. Multiple shows a four-row multi-select with rounded option rows and a hint that explains Ctrl and Command selection, linked with aria-describedby. Textarea is a resizable field with a 110px minimum height and relaxed line spacing for longer answers. With a counter adds a live character count under a 160-character bio: maxlength stops input at the limit, and a few lines of script keep the count in step as you type, with visually hidden text so it reads as characters rather than a fraction. Use the custom select wherever the default arrow clashes with the rest of the form. In Bootstrap the select is .form-select with its arrow swapped through –bs-form-select-bg-img; in Tailwind the chevron is drawn with after: utilities on a wrapper.
What’s included
- Native select with a drawn chevron, no replacement widget
- Multiple select with a hint for choosing several options
- Vertically resizable textarea with a 110px minimum
- Live character counter with maxlength
- Bootstrap version uses .form-select and --bs-form-select-bg-img
Accessibility
Selects stay native, so arrow keys, type-ahead and screen reader announcements work as normal. Every control has a visible label; the multiple select's hint and the counter are referenced with aria-describedby, and the counter includes visually hidden text so it is read as a character count. Borders reach 3:1 and hint text 4.5:1. Focus adds a blue border and 3px ring, removed from the transition list under prefers-reduced-motion.
Customise it
In plain CSS change --f-border, --f-focus, --f-ring and --f-hint on .f; --f-hint also colours the chevron. In Bootstrap edit the stroke colour inside --bs-form-select-bg-img and the --bs-* variables on .fx; in Tailwind edit the border- colour classes, including after:border- on the select wrapper.






