CSS Cursor Generator

Free toolNo sign-up
All 36 standard cursors · hover any tile to preview · click to select
General
Links
Selection
Drag
Resize
Zoom
Modestandard
Valuepointer

About this generator

Two modes in one tool. Standard cursors gallery shows all 36 system keywords grouped by purpose (General / Links / Selection / Drag-and-Drop / Resize / Zoom) — hover any tile to preview that cursor live on the tile itself. Custom cursor builder turns emoji, 2-char text badges, or raw SVG into data-URL cursors with a visual hotspot picker (click the preview to set the exact click point).

4 export formats — CSS, SCSS @mixin, Tailwind (named utilities for standard cursors, arbitrary-value syntax for custom URLs), styled-components.

Permalink — URL encodes the entire cursor recipe. No login, no watermark, no paywall. Free and MIT-licensed.

Why use this Cursor Generator?

All 36 standard cursors
Every system cursor keyword in one grid, organized by purpose. Hover any tile to preview the cursor live on that tile — no docs jumping required.
Custom cursor builder
Turn an emoji, text badge, or full SVG into a working data-URL cursor. The generator handles the canvas rendering and URL encoding so the output drops straight into CSS.
Visual hotspot picker
Click directly on the cursor preview to set the hotspot — the actual click point. The crosshair shows where clicks register, in real pixel coordinates.
Four export formats
CSS, Tailwind utilities, styled-components, SCSS mixin. Switch the export tab to your stack and copy — no manual conversion.

How to use this generator

01
Pick standard or custom
Standard mode shows all 36 system cursors. Custom mode lets you build a cursor from an emoji, a text badge, or a full SVG.
02
Choose your source
In custom mode, switch between Emoji (any character), Text badge (2-letter colored circle), or SVG (paste any inline SVG markup).
03
Set the hotspot
Click anywhere on the preview canvas to set where clicks register. For a top-left pointer, set 4×4. For a center-click crosshair, set 16×16 (mid of a 32px image).
04
Pick a fallback
If the data URL fails to load (rare but possible), the browser falls back to your chosen system cursor. Use "pointer" for clickable elements.
05
Copy in your stack
Switch the export tab to CSS, Tailwind, styled-components, or SCSS. Copy the snippet and paste it into your project.

Cursor reference

CursorVisualUse it for
cursor: pointersystem pointer handClickable interactive element. The default for buttons and links.
cursor: textI-beamIndicates selectable text. Auto-applied to text elements; rarely needed manually.
cursor: not-allowedcircle with slashDisabled interactive element. Apply to disabled buttons, locked rows, blocked actions.
cursor: grab / grabbingopen / closed handDraggable element. Use grab for hover, grabbing for active drag (toggle via JS).
cursor: zoom-in / outmagnifier with +/−Image lightbox triggers, map zoom controls.
cursor: col-resize / row-resizedouble arrowResize handles between columns or rows in spreadsheets/tables.
cursor: url('...') X Ycustom image + hotspotCustom cursor. X and Y are the hotspot offset from the top-left of the image (in pixels).
cursor: noneno cursorHide the cursor entirely. Use for video players, kiosk modes, immersive canvas apps.

Common cursor patterns

Disabled button cursor
button:disabled,
button[aria-disabled='true'] {
  cursor: not-allowed;
  opacity: 0.5;
}
Draggable element
.draggable {
  cursor: grab;
}
.draggable:active,
.draggable.is-dragging {
  cursor: grabbing;
}
Custom cursor with fallback
.canvas-area {
  cursor: url('/cursors/brush.svg') 4 28, crosshair;
}
Resize handle between panels
.resize-handle {
  cursor: col-resize;
  width: 4px;
  background: transparent;
}
.resize-handle:hover {
  background: rgba(124, 108, 255, 0.4);
}

Pro tips

01
Keep custom cursors small
Browsers cap custom cursors at 32×32 (some at 64×64) — anything larger silently falls back. Design tight, with the hotspot visually obvious.
02
Always provide a fallback
The second value in `cursor: url(...) X Y, fallback;` is the system cursor used if your URL fails. Pick one that matches the intent (pointer for buttons, crosshair for canvas).
03
Match cursor to interaction
Cursors are state signals. `pointer` says "click me", `not-allowed` says "this won't work", `grab` says "drag me". Mismatched cursors confuse users faster than any other UI signal.
04
Skip cursors on touch
Touch devices ignore cursor styles entirely (no mouse to style). Don't engineer mobile-specific cursor logic — desktop-only feature, cleanly degrades.
?

Frequently asked questions

01

How many CSS cursor keywords are there?

36 standard keywords in modern CSS, grouped into 6 categories: General (auto, default, none), Links & Status (pointer, wait, progress, help, context-menu), Selection (cell, crosshair, text, vertical-text), Drag & Drop (alias, copy, move, no-drop, not-allowed, grab, grabbing), Resize (12 directional variants including ew-resize, ns-resize, nesw-resize, nwse-resize), and Zoom (zoom-in, zoom-out). The browser maps each keyword to a system-provided image — designers don't get to choose what the pointer LOOKS like, only which semantic meaning to apply.

02

What's a cursor hotspot and why does it matter?

The hotspot is the EXACT pixel within the cursor image that registers as the click point. For a standard arrow pointer, the hotspot is the tip — clicking lands on the pixel under the arrow's tip, not the center of the image. If you make a custom 32×32 cursor that LOOKS like an arrow pointing top-left but set hotspot to (16, 16), clicks register from the middle of the image, not the tip — confusing the user. The generator's hotspot picker shows you the click point visually so you can place it precisely on the tip / center / wherever the semantic 'click here' point is.

03

Why doesn't my custom SVG cursor work in Safari?

Safari is stricter about cursor data URLs than Chrome / Firefox. Common causes: (1) SVG width/height must be set as attributes (not just viewBox); (2) SVG must declare xmlns='http://www.w3.org/2000/svg'; (3) max cursor size is 32×32 (some Safari versions reject larger); (4) the SVG must not reference external resources (fonts, images). The generator's SVG mode produces conformant data URLs. If you're hand-rolling SVG and Safari fails silently, check the data URL with a base64 decoder + re-validate the SVG with W3C validator.

04

Does cursor: none work for hiding the cursor?

Yes, on all evergreen browsers since 2014. cursor: none completely hides the system cursor over the element. Use cases: full-screen image viewers, video players, fullscreen game UIs, custom-built cursors implemented in JS (where you draw a div following mousemove). The element still receives clicks — only the visual cursor disappears. WCAG note: hiding the cursor entirely violates 2.4.7 (Focus Visible) if the cursor is the only focus indicator; pair with an obvious hover/focus state to stay accessible.

05

How big can a custom cursor be?

32×32 is the safe size — every browser renders it identically. 64×64 works in Chrome / Firefox but Safari sometimes downscales. Beyond 128×128 most browsers reject the cursor and fall back to your specified fallback keyword. The generator emits 32×32 (the safe convergent size); if you need larger for accessibility (low-vision users may benefit from 48-64px cursors), test in target browsers before shipping.

06

Should I be using custom cursors at all?

Sparingly. Custom cursors disrupt accessibility — users with cursor-tracking disabilities (motor impairments, low vision) rely on system cursor consistency. Game UIs and creative tools (Figma, Procreate) genuinely benefit; product pages and dashboards usually don't. If you do ship a custom cursor: (1) set a sensible fallback keyword so broken data URLs degrade gracefully, (2) consider prefers-reduced-motion + opt-out toggle, (3) keep the hotspot at the natural click point so users don't mis-click.

07

Is this free for commercial use?

Free, MIT-licensed, zero attribution required, no watermark, no signup. Use on any project — personal, client, enterprise — without permission.

See it used in real designs

Browse hand-coded collections that put this tool to work.

Search CodeFronts

Loading…