Why matTooltip Doesn't Work on Disabled Buttons
This is a classic accessibility/browser behavior issue. Here's why:
The Root Cause
Native HTML <button disabled> elements have pointer-events: none applied by the browser (and reinforced by Angular Material's styles). This means:
- Mouse hover events never reach the button
matTooltip relies on mouseenter/mouseleave events to show/hide
- Since those events are blocked, the tooltip never triggers
Disabled buttons also cannot receive focus, so keyboard-triggered tooltips don't work either.
The Angular Material Solution: disabledInteractive
Angular Material provides the disabledInteractive input precisely for this scenario. It styles the button as disabled but keeps it interactive: [Interactive Disabled Buttons]
<button
mat-flat-button
[disabled]="isDisabled"
[disabledInteractive]="true"
[matTooltip]="disabledReason"
>
Submit
</button>
When disabledInteractive is enabled: [Button API]
- The button is styled as disabled
- It is marked as
aria-disabled="true" for assistive technology
- It can still receive focus and pointer events — so
matTooltip works
- It is not natively disabled, so you must guard against unintended actions (e.g., form submissions) yourself
⚠️ Important caveat: Since the button is no longer natively disabled, it won't automatically prevent form submission. You need to handle that in your component logic.
Global Configuration