Why Are Buttons Losing the Pointer Cursor? ft. ShadCn
mmvergara

mmvergara @mmvergara

About: Creator of Supadart 🎯 | Fresh Grad

Location:
Philippines
Joined:
Aug 3, 2022

Why Are Buttons Losing the Pointer Cursor? ft. ShadCn

Publish Date: Apr 21
19 9

Developers working with ShadCN v4 and Tailwind CSS v4 noticed something odd: buttons no longer showed the pointer cursor on hover. For many, this broke expectations. Clicking a button without the familiar hand cursor felt... off.

A github issue was opened but the change wasn’t a bug. It was a deliberate design choice buttons now use the default cursor by design.

The Fix

Workarounds by @aow3xm and @Koda-Pig

@layer base {
  button:not([disabled]),
  [role="button"]:not([disabled]) {
    cursor: pointer;
  }
}
Enter fullscreen mode Exit fullscreen mode

This custom CSS restores expected behavior, with added care to avoid pointer cursors on disabled buttons.

The reason.. i think.

A UX StackExchange thread explains: originally, GUI buttons relied on visual affordances (like shadows) rather than cursors to suggest interactivity. The pointer cursor was reserved for hyperlinks. Even today, native buttons in OSs typically don’t change to a hand cursor.

But web apps are not traditional GUIs they’re hybrid interfaces that mix form and function. Users now expect visual cues like cursor changes for all clickable elements.


TL;DR: Tailwind v4 removed cursor: pointer from buttons by default. It’s intentional, rooted in legacy UX logic. But if your users expect a hand cursor, just add a small CSS override.

Comments 9 total

  • Abhay Pratap Singh
    Abhay Pratap SinghApr 22, 2025

    But this is how we are wired up now... Button without cursor pointer seems incomplete

    • mmvergara
      mmvergaraApr 22, 2025

      Yeah i agree, how would you even explain this to other people like PM,QA users and stuff.

  • Adrian Knapp
    Adrian KnappApr 26, 2025

    Nice, thanks for sharing this way to fix this behavior.

  • Liam Hayes
    Liam HayesApr 26, 2025

    Interesting design choice! Glad there’s an easy fix to bring back the pointer cursor Pink Rave Outfits — users definitely expect that visual feedback today.

    • mmvergara
      mmvergaraApr 27, 2025

      all thanks to open source community and css <3

  • Nevo David
    Nevo DavidApr 26, 2025

    Insane how a tiny thing like the cursor can throw me off so much lol, gotta have that hand or my brain freaks out

    • mmvergara
      mmvergaraApr 27, 2025

      Yeahh, i wish theyd consult with the community first before shipping it, cause just as expressed it feels like a breaking change to me.

  • Eris Sulistina
    Eris SulistinaApr 27, 2025

    Your code looks good, but I personally prefer doing it like this:

    :where(button, [role="button"]):not([disabled]) {
      cursor: pointer;
    }
    
    Enter fullscreen mode Exit fullscreen mode
Add comment