CSS Portal

CSS cursor Property

If this site has been useful, we’d love your support! Consider buying us a coffee to keep things going strong!

Description

The cursor property controls the visible mouse pointer when the pointer is over an element; it is a purely visual affordance that communicates possible interactions (for example, whether something is clickable, draggable, or resizable). Because it only affects appearance, it does not change the element’s ability to receive input or alter its behavior — it’s intended to guide the user’s expectations about what will happen if they click or drag.

When designing interfaces, consider how cursor interacts with event delivery and element interactivity. For example, the behavior of whether an element receives pointer events is governed by pointer-events, so changing an element’s cursor alone won’t make it interactive if pointer events are disabled. Likewise, when text selection is a concern, the selection behavior (which can influence the text-selection caret or selection cursor) is controlled with user-select, so cursor choices should be aligned with whether text within an element is selectable.

Practical use of cursor should prioritize clarity and consistency: use it to reinforce standard affordances rather than to create confusion (avoid using a “link” cursor on elements that do nothing). Do not rely solely on cursor changes to convey important information about interactivity or accessibility — always provide keyboard focus, clear visible focus indicators, and semantic HTML or ARIA roles so assistive technologies and keyboard users receive the same cues. Also remember that on touch-only devices the cursor is irrelevant, so ensure touch targets and gestures remain discoverable without pointer feedback.

In more complex UI scenarios, cursors are often used as part of a broader visual language: pairing cursor changes with animated feedback, hover states, and explicit icons helps users understand actions. Because cursor appearance can vary across platforms and user agent settings, design choices should be resilient—avoid critical functionality that depends on a very specific pointer look, and test interactions with different input modes (mouse, touch, stylus) to ensure a coherent experience.

Definition

Initial value
auto
Applies to
All elements
Inherited
Yes
Computed value
As specified, but with relative URI converted into absolute URI
Animatable
No
JavaScript syntax
object.style.cursor

Interactive Demo

Hover mouse here to see cursor in action.

Syntax

cursor: [ [<uri> [<x> <y>]?,]* [ auto | default | none | context-menu | help | pointer | progress | wait | cell | crosshair | text | vertical-text | alias | copy | move | no-drop | not-allowed | e-resize | n-resize | ne-resize | nw-resize | s-resize | se-resize | sw-resize | w-resize | ew-resize | ns-resize | nesw-resize | nwse-resize | col-resize | row-resize | all-scroll | zoom-in | zoom-out ] ] | inherit

Values

Move mouse over values to see cursors in action

General Purpose Cursors:
  • autoThe browser determines the cursor to display based on the current context.
  • defaultThe platform-dependent default cursor. Often rendered as an arrow.
  • noneNo cursor is rendered for the element.
Links and Status Cursors:
  • context-menuA context menu is available for the object under the cursor. Often rendered as an arrow with a small menu-like graphic next to it.
  • helpHelp is available for the object under the cursor. Often rendered as a question mark or a balloon.
  • pointerThe cursor is a pointer that indicates a link.
  • progressThe program is busy in the background but the user can still interact with the interface.
  • waitIndicates that the program is busy and the user should wait. Often rendered as a watch or hourglass.
Selection Cursors:
  • cellIndicates that a cell or set of cells may be selected. Often rendered as a thick plus-sign with a dot in the middle.
  • crosshairA simple crosshair (e.g., short line segments resembling a "+" sign). Often used to indicate a two dimensional bitmap selection mode.
  • textIndicating text can be selected, typically an I-beam.
  • vertical-textIndicating that vertical text can be selected, typically a sideways I-beam.
Drag and Drop Cursors:
  • aliasIndicates an alias of/shortcut to something is to be created. Often rendered as an arrow with a small curved arrow next to it.
  • copyIndicates something is to be copied. Often rendered as an arrow with a small plus sign next to it.
  • moveIndicates something is to be moved.
  • no-dropIndicates that the dragged item cannot be dropped at the current cursor location. Often rendered as a hand or pointer with a small circle with a line through it.
  • not-allowedIndicates that the requested action will not be carried out. Often rendered as a circle with a line through it.
Resizing and Scrolling Cursors:
  • n-resizeSome edge is to be moved. For example, the se-resize cursor is used when the movement starts from the south-east corner of the box.
  • ne-resizeAs above
  • e-resizeAs above
  • se-resizeAs above
  • s-resizeAs above
  • sw-resizeAs above
  • w-resizeAs above
  • nw-resizeAs above
  • ew-resizeIndicates a bidirectional resize cursor.
  • ns-resizeAs above
  • nesw-resizeAs above
  • nwse-resizeAs above
  • col-resizeIndicates that the item/column can be resized horizontally. Often rendered as arrows pointing left and right with a vertical bar separating them.
  • row-resizeIndicates that the item/row can be resized vertically. Often rendered as arrows pointing up and down with a horizontal bar separating them.
  • all-scrollIndicates that the something can be scrolled in any direction. Often rendered as arrows pointing up, down, left, and right with a dot in the middle.
Zooming Cursors:
  • zoom-inIndicates that something can be zoomed (magnified) in.
  • zoom-outIndicates that something can be zoomed (magnified) out.
Image Cursors:
  • <uri>The user agent retrieves the cursor from the resource designated by the URI. If the user agent cannot handle the first cursor of a list of cursors, it must attempt to handle the second, etc. If the user agent cannot handle any user-defined cursor, it must use the cursor keyword at the end of the list.

Example

<div class='demo'>
<h2>CSS cursor examples</h2>
<div class='row'>
<button class='cursor-default'>default</button>
<button class='cursor-pointer'>pointer</button>
<button class='cursor-text'>text</button>
<button class='cursor-move'>move</button>
<button class='cursor-crosshair'>crosshair</button>
</div>
<div class='row'>
<button class='cursor-not-allowed'>not-allowed</button>
<button class='cursor-wait'>wait</button>
<button class='cursor-grab'>grab</button>
<button class='cursor-zoom-in'>zoom-in</button>
</div>
<p class='info'>Hover each control to see the cursor change.</p>
</div>
/* general styles */
* { box-sizing: border-box; font-family: system-ui, -apple-system, 'Segoe UI', Roboto, 'Helvetica Neue', Arial; }
.demo { max-width: 700px; margin: 24px auto; padding: 18px; border: 1px solid #e0e0e0; border-radius: 8px; background: #fafafa; }
h2 { margin: 0 0 12px; font-size: 18px; }
.row { display: flex; gap: 10px; margin-bottom: 12px; flex-wrap: wrap; }
button { padding: 10px 14px; border: 1px solid #ccc; background: #fff; border-radius: 6px; cursor: default; transition: background .12s; }
button:hover { background: #f3f7ff; }

/* cursor examples */
.cursor-default { cursor: default; }
.cursor-pointer { cursor: pointer; }
.cursor-text { cursor: text; }
.cursor-move { cursor: move; }
.cursor-crosshair { cursor: crosshair; }
.cursor-not-allowed { cursor: not-allowed; }
.cursor-wait { cursor: wait; }
.cursor-grab { cursor: grab; }
.cursor-grab:active { cursor: grabbing; }
.cursor-zoom-in { cursor: zoom-in; }

.info { margin-top: 8px; color: #555; font-size: 13px; }

Browser Support

The following information will show you the current browser support for the CSS cursor property. Hover over a browser icon to see the version that first introduced support for this CSS property.

This property is supported by all modern browsers.
Desktop
Chrome
Edge
Firefox
Opera
Safari
Tablets & Mobile
Chrome Android
Firefox Android
Opera Android
Safari iOS
Samsung Internet
Android WebView
-

Last updated by CSSPortal on: 1st January 2026

If this site has been useful, we’d love your support! Consider buying us a coffee to keep things going strong!