Use <button>, Not <div>, for Clickable Elements

Use <button>, Not <div>, for Clickable Elements

This article is old

This article was written more than a year ago. Some of the information might be outdated.

Using <button> instead of <div> for interactive elements improves accessibility, keyboard navigation, and screen reader support. Buttons are naturally focusable, respond to Enter and Space, and require far less extra code. Avoid unnecessary complexity — use the right semantic element for better usability and compliance with web accessibility standards.

1. Accessibility Benefits

Using the correct semantic elements ensures your web application is accessible to all users, including those who rely on assistive technologies like screen readers. The <button> element, for example, is automatically recognized by screen readers and can be navigated via keyboard shortcuts, while a <div> doesn't provide any of this built-in functionality without extra effort.

2. Built-in Functionality

Elements like <button> come with default behaviors that enhance the user experience. These include:

  • Keyboard focus (users can tab to the button without any extra code)
  • Click event handling (automatically triggered when pressing Enter or Space)
  • Appropriate styling and theming across different browsers

Using a <div> instead of a <button> requires you to implement all of these features manually, which increases development effort and the potential for bugs.

Code Example

Here's a comparison between <div> and <button>:

<!-- Wrong approach using div --> <div onclick="handleClick()" role="button" tabindex="0">Click Me</div> <!-- Correct approach using button --> <button onclick="handleClick()">Click Me</button>

In the wrong approach, extra attributes like role="button" and tabindex="0" are needed to make the <div> behave like a button, whereas <button> handles all of this naturally.

3. SEO and Performance Improvements

Search engines prioritize well-structured semantic HTML. Using the right elements helps improve site indexing and rankings. Additionally, built-in functionality reduces the need for extra JavaScript, which improves performance and maintainability.

4. Consistent User Experience

Browsers and operating systems optimize interactions based on semantics. For instance, <button> elements automatically inherit platform-specific styles, behaviors, and accessibility features that users expect. This results in a more consistent and predictable experience across different devices.

Conclusion

Using the right semantic tags isn't just a best practice — it's essential for accessibility, usability, and maintainability. By using <button> instead of <div> for interactive elements, you create a more inclusive, user-friendly, and efficient web experience.

So next time you're tempted to reach for a <div> for an interactive element, ask yourself: would a <button> or another semantic element be the better choice?

Like the article? Share it with others or copy the link!