Native HTML components don’t guarantee good UX


Last week I read a post by designer and frontend dev, Theodore Soti:

Stop clearing forms with JavaScript.
The browser already knows how.
I still see a lot of apps using custom code to track inputs and reset state.
But for many forms, you can just use the native reset button.


<input type="submit" value="Submit">
<input type="reset" value="Reset">

That reset button restores every field to its initial value.
Text inputs. Checkboxes. Radios. Selects. Textareas.
No event listeners.
No state management.
No missed fields and strange edge cases.
It’s native.
It’s instant.
And it works everywhere.

I love the spirit of this.

Theodore is calling out something real - many solutions are over-engineered. Custom code where native would do. More complexity, more cost.

But as much as I’m a fan of using what browsers give you for free, I want to point out that many native HTML elements are terrible UX.

For example:

  • Date inputs (type=date) are native but hard to use and inaccessible.
  • The maxlength attribute makes textareas feel broken and truncates values longer than the limit when the user pastes
  • The title attribute shows a tooltip on hover, but doesn’t work for keyboard users.

The list is long.

Theodore’s type=reset advice is another good example because:

  1. Most users never need to reset a form. If they make mistakes, they fix them and move on. I’ve watched 100s of users fill out all sorts of different forms over the years and not once has a user needed a reset button.
  2. If you include a reset button, some users will click it by mistake. It happens more than you’d think. And when it does, everything they just filled out is gone - no edit-undo, no Command Z.
  3. The more buttons in a form, the more users have to think about which to press.

Making users think = bad UX.

“But what about something like clearing filters?”

This is a good use case.

But type=reset won’t help you here:

When a user selects filters and hits submit, the form resets to it’s default state as it was when the page loaded. That means it will reset to the same filters the user already chose - not an empty form.

So yes, users want to clear their filters. But type=reset won’t do that.

In short:

  • If it’s a regular form, a reset button is unnecessary and harmful.
  • If it’s a filter form (or similar), a reset button won’t work.

I used to work as a frontend engineer. I hated when designers ignored perfectly good native elements to make me build something custom - to make things look good.

So I understand Theodore’s instinct completely.

And it’s one I still share.

But:

Just because it’s native doesn’t mean it guarantees good UX.

The lucky thing about the reset button is that the solution is simple:

Don’t use one - doesn’t matter if it’s native or not.

But unlike type=reset, many native elements can’t be scrapped - they need to be replaced with something better.

If you want to know which elements you can’t just scrap and how to replace them with something better, you might like my course, Form Design Mastery:

https://formdesignmastery.com

Cheers,
Adam

Design tips to help you create products that are ridiculously simple and accessible to use

Join 10,000+ designers, content designers and engineers who get my free weekly newsletter with evidence-based design tips (in 3 minutes or less). Mostly forms UX, but not always.

Read more from Design tips to help you create products that are ridiculously simple and accessible to use
Me holding a sign saying "Test boring patterns first."

Last week, someone paid me to review their form flow. One thing they wanted advice about was interruption pages. Coincidentally, the following day the GOV.UK Design System added the interruption page pattern. Interruption pages are designed to pause the user within a journey - usually to warn them about a possible mistake or give them important information before they continue. Here’s an example from the GOV.UK Design System: It has: An h1 heading to ask a simple question A paragraph to...

Me holding a sign saying, "We all have fuzzy edges."

Last week, Kate Ivey-Williams, the Head of UCD on my programme, asked me: “What do you think your role is as a designer?” I said: “Errr... I design products that are easy to use... errr... I realise that’s a rubbish answer...” Kate saved me: “Don’t worry, I put you on the spot” But even so, as a designer you should be ready to be put on the spot because: If you aren’t able to explain what you do, it’s much harder for your teammates and stakeholders to value what you do. I messaged Kate later...

Me holding a sign that says, "Good UX is holistic."

Last week, I ran a live training on file upload UX. Every day leading up to the event, I was stressed, constantly thinking: “Shall I just purchase one month of Zoom?” Let me explain: I use Circle to run my courses and it comes with something called Live Rooms. It’s like Zoom. But Live Rooms is better than Zoom because: it’s quicker and easier to set up for me it comes with my Circle subscription for free it automatically posts the recording afterward the call it has better UX for my students...