If you want to create a button from scratch, you must first create the universe | Marco Campos Blog
Автор наочно демонструє, чому не слід створювати кнопку з нуля: навіть базовий функціонал вимагає десятків рядків коду для обробки подій, доступності, валідації форм та інтеграції з API. Спроба повторити поведінку нативного <button> призводить до ~500 рядків JavaScript, які все одно не покривають усіх сценаріїв. Висновок: використовуйте семантичний HTML — це безкоштовно, надійно і не потребує підтримки.
Схоже, простіше навчити дизайнера любити стандартні елементи, ніж розробника — імітувати їх.