Customize inherited button browser styles

By: on May 13, 2024

Buttons play a crucial role in web design and accessibility by providing interactive elements for users. However, default browser styles often clash with design aesthetics or interfere with custom styling, affecting the overall user experience.

The dreaded default buttons styles:

To address this issue, we can implement a set of base styles that strip away default button styles while retaining semantic HTML and functionality.

Example

  .btn-no-styles {
background-color: transparent;
border: none;
padding: 0;
margin: 0;
width: auto;
height: auto;
overflow: visible;
line-height: normal;
color: inherit;
text-align: left;
font: inherit;
cursor: pointer;
box-sizing: border-box;
-webkit-appearance: none;
-moz-appearance: none;
appearance: none;
}
<button class="btn-no-styles" onclick="alert('You clicked the button!')">Click Me</button>

Now, all default browser styles are removed, allowing developers to apply custom styles as needed.

Using all: unset

Another option is to use the all CSS global property with the unset value. This will quickly wipeout all the button styles. Although this may be limiting when adding back custom styles.

Example

<button class="all-unset" onclick="alert('You clicked the button!')">Click Me</button>
button.all-unset {
all: unset;
}

Key benefits to this approach

  • Accessibility: Semantic buttons improve accessibility by conveying purpose to assistive technologies.
  • Customization: Developers have full control over button styling without browser interference.
  • Consistency: Ensures a consistent user experience across different browsers and devices.

Also, implementing these base styles in a website eliminates the need to use role="button" on elements to mimic button behavior, enhancing both accessibility and design.