cursor: pointerCSS pointer cursor
The default 'this is clickable' cursor — usually a hand. The single most common custom-cursor request on the web.
Every CSS cursor keyword and pattern, with a runnable snippet and a “use this when” note. Bookmarkable for the next time you forget the difference between grab, move, and all-scroll.
cursor: pointerThe default 'this is clickable' cursor — usually a hand. The single most common custom-cursor request on the web.
cursor: handThe original Internet Explorer 'cursor: hand' value, deprecated in favor of cursor: pointer.
cursor: crosshairA simple precision plus sign — perfect for image editors, color pickers, and aiming UIs.
cursor: textThe vertical I-beam that signals text selection. Browsers apply it automatically inside text inputs and over selectable text.
cursor: grab / grabbingOpen hand for draggable items at rest, closed fist while dragging. Required some browsers' -webkit- prefix until 2018.
cursor: moveA four-way arrow indicating that an element can be moved freely.
cursor: not-allowedA circle with a slash through it. The standard 'this control is disabled' affordance.
cursor: wait / progressHourglass / spinner for blocking operations (wait) or background work (progress).
cursor: helpAn arrow with a question mark — signals that hovering will show contextual help.
cursor: zoom-in / zoom-outA magnifying glass with a plus or minus. Indicates click-to-zoom on images or maps.
cursor: ns-resize, ew-resize, nesw-resize, nwse-resizeBidirectional arrows pointing in cardinal or diagonal directions. Used on resize handles.
cursor: col-resize / row-resizeSpecialized resize arrows for table column and row dividers, with a distinct 'split' visual.
cursor: url('cursor.png') x y, fallbackLoad any image (PNG, GIF, SVG, .cur) as the cursor with an explicit hotspot and a fallback.
cursor: url('.svg')SVG cursors are sharp at every DPI and tiny over the wire. Add shape-rendering='crispEdges' for pixel art.
cursor: url('data:image/svg+xml;...')Inline an SVG cursor as a data URI to eliminate the first-hover load flash.
cursor: url('a.png') X YThe two integers after the URL are the cursor's hotspot — the pixel that counts as the click point.
cursor: url(...), pointerAlways provide a built-in cursor keyword after the custom URL so browsers, assistive tech, and old IE can fall back gracefully.
cursor: noneHide the cursor entirely. Used for fullscreen video players, immersive games, and kiosks.
cursor: url('animated.gif')Animated GIF cursors are technically supported but inconsistent across browsers; SVG with SMIL or .ani files via cursor: url work better in some engines.
:hover { cursor: ... }Use a hover-state cursor to telegraph that an element is interactive only when actively hovered.
button { cursor: pointer }By default, browsers do not apply pointer to <button> elements (Chrome and Firefox give them default). Add cursor: pointer to fix it.
a { cursor: pointer }Anchor tags with a valid href get cursor: pointer for free; href-less <a> tags do not.
input { cursor: ... }Text inputs default to cursor: text. Disabled inputs default to cursor: default. Override only when necessary.
img { cursor: zoom-in }Images get cursor: default by browser. Add zoom-in for clickable galleries or pointer for clickable thumbnails.
canvas { cursor: crosshair }Canvas elements default to cursor: default. For drawing apps, set crosshair; for game canvases, set none.
[disabled] { cursor: not-allowed }Browsers' default for disabled controls is cursor: default — which lies. Override globally.
image-rendering: pixelated; cursor: url(...)Browsers smooth small cursor images by default. Use a pre-rendered upscale or SVG with crispEdges to keep pixels crisp.
<svg shape-rendering='crispEdges'>Mark SVG cursors with shape-rendering='crispEdges' so browsers do not antialias the pixel grid.
cursor: url(a), url(b), pointerYou can list multiple cursor URLs; the first one the browser supports is used.
cursor: url() in FirefoxFirefox supports SVG, PNG, and GIF cursors but caps cursor images at 32x32 unless DPI scaling is in play.
cursor: url() in ChromiumChromium accepts cursors up to 128x128. Use larger images for HiDPI without aliasing.
cursor: url() in WebKitSafari supports SVG cursors but historically had issues with URL-only fallback chains; always include a CSS keyword fallback.
@media (pointer: fine)Touch devices have no cursor. Wrap custom cursor rules in @media (pointer: fine) to skip the work on phones.
cursor: <keyword>Reference list of every system cursor keyword: default, none, context-menu, help, pointer, progress, wait, cell, crosshair, text, vertical-text, alias, copy, move, no-drop, not-allowed, grab, grabbing, all-scroll, col-resize, row-resize, n-resize, e-resize, s-resize, w-resize, ne-resize, nw-resize, se-resize, sw-resize, ew-resize, ns-resize, nesw-resize, nwse-resize, zoom-in, zoom-out.
cursor-pointer, cursor-not-allowedTailwind ships utility classes for every CSS cursor keyword. Custom cursors require a small config extension.
style={{ cursor: 'url(...)...'}}In React, set cursor via inline style or CSS module. Custom cursor packs work identically to vanilla CSS.
:style with cursorIn Vue, bind cursor via :style or set it in a scoped style block. Same syntax as plain CSS.
style='cursor: ...'You can set cursor via the inline style attribute on any HTML element. Quick for prototyping; not recommended at scale.
button.gradient { cursor: url(...) ... }Pair a saturated gradient CTA with a glowing pixel cursor for maximum 'click here' affordance.
canvas { cursor: url(...) ... }Set the canvas cursor in CSS, not in canvas drawing calls. The OS-level cursor is faster than a canvas-rendered one.
CSS exposes more than thirty system cursor keywords plus a url() form for custom cursors. This reference covers each one — what it looks like, when to use it, and the gotchas that make custom cursors silently break in Safari or fall back to auto in Firefox. Pages are short on purpose: open the one for the keyword you forgot, copy the snippet, close the tab.
For a full step-by-step on shipping a custom cursor on a real website, see the Adding a custom cursor to a website with pure CSS tutorial. For game-engine cursors, see the game dev hub.