MDN wants to learn about developers like you: https://qsurvey.mozilla.com/s3/MDN-survey

The cursor CSS property specifies which mouse cursor to display when the mouse pointer is over an element.

/* Keyword value */
cursor: pointer;
cursor: auto;

/* URL, with a keyword fallback */
cursor: url(hand.cur), pointer;

/* URL and coordinates, with a keyword fallback */
cursor: url(cursor1.png) 4 12, auto;
cursor: url(cursor2.png) 2 2, pointer;

/* Global values */
cursor: inherit;
cursor: initial;
cursor: unset;

Initial valueauto
Applies toall elements
Inheritedyes
Mediavisual, interactive
Computed valueas specified, but with <url> values made absolute
Animation typediscrete
Canonical orderthe unique non-ambiguous order defined by the formal grammar

Syntax

The cursor property is specified as zero or more <url> values, separated by commas, followed by a single mandatory keyword value. Each <url> should point to an image file. The browser will try to load the first image specified, falling back to the next if it can't, and falling back to the keyword value if no images could be loaded (or if none were specified).

Each <url> may be optionally followed by a pair of space-separated numbers, which represent <x><y> coordinates. These will set the cursor's hotspot, relative to the top-left corner of the image.

For example, this specifies two images using <url> values, providing <x><y> coordinates for the second one, and falling back to the progress keyword value if neither image can be loaded:

cursor: url(one.svg), url(two.svg) 5 5, progress;

Values

<url>
A url(…) or a comma separated list url(…), url(…), …, pointing to an image file. More than one <url> may be provided as fallbacks, in case some cursor image types are not supported. A non-URL fallback (one or more of the keyword values) must be at the end of the fallback list. See Using URL values for the cursor property for more details.
<x> <y>
Optional x- and y-coordinates. Two unitless nonnegative numbers less than 32.
Keyword values

Move your mouse over values to see their live appearance in your browser:

Category CSS value Actual Description
General auto   The browser will determine the cursor to display based on the context. E.g., equivalent to text when hovering text.
default default.gif No special behavior is present. Typically an arrow.
none   No cursor is rendered.
Links & status context-menu context-menu.png A context menu is available.
help help.gif Help information is available.
pointer pointer.gif The element can be interacted with by clicking on it. Used, e.g., when hovering over links. Typically an image of a hand.
progress progress.gif The program is busy in the background, but the user can still interact with the interface (in contrast to wait).
wait wait.gif The program is busy, and the user can't interact with the interface (in contrast to progress). Sometimes an image of an hourglass or a watch.
Selection cell cell.gif The table cell can be selected.
crosshair crosshair.gif Cross cursor, often used to indicate selection in a bitmap.
text text.gif The text can be selected. Typically the shape of an I-beam.
vertical-text vertical-text.gif The vertical text can be selected. Typically the shape of a sideways I-beam.
Drag & drop alias alias.gif An alias or shortcut is to be created.
copy copy.gif Something can be copied.
move move.gif Something can be moved.
no-drop no-drop.gif An item may not be dropped at the current location.
bug 275173: On Windows and Mac OS X, no-drop is the same as not-allowed.
not-allowed not-allowed.gif Something can't be done.
Resize & scrolling all-scroll all-scroll.gif Something can be scrolled in any direction (panned).
bug 275174: On Windows, all-scroll is the same as move.
col-resize col-resize.gif The item/column can be resized horizontally. Often rendered as arrows pointing left and right with a vertical bar separating them.
row-resize row-resize.gif The item/row can be resized vertically. Often rendered as arrows pointing up and down with a horizontal bar separating them.
n-resize Example of a resize towards the top cursor Some 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.
In some environments, an equivalent bidirectional resize cursor is shown. For example, n-resize and s-resize are the same as ns-resize.
e-resize Example of a resize towards the right cursor
s-resize Example of a resize towards the bottom cursor
w-resize Example of a resize towards the left cursor
ne-resize Example of a resize towards the top-right corner cursor
nw-resize Example of a resize towards the top-left corner cursor
se-resize Example of a resize towards the bottom-right corner cursor
sw-resize Example of a resize towards the bottom-left corner cursor
ew-resize 3-resize.gif Bidirectional resize cursor.
ns-resize 6-resize.gif
nesw-resize 1-resize.gif
nwse-resize 4-resize.gif
Zoom zoom-in zoom-in.gif

Something can be zoomed (magnified) in or out.

zoom-out zoom-out.gif
Grab grab grab.gif

Something can be grabbed (dragged to be moved).

grabbing grabbing.gif

Formal syntax

[ [ <url> [ <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 | grab | grabbing ] ]

Examples

.foo {
  cursor: crosshair;
}

.bar {
  cursor: zoom-in;
} 

/* A fallback keyword value is required when using a URL */
.baz {
  cursor: url("hyper.cur"), auto;
}

Specifications

Specification Status Comment
CSS Basic User Interface Module Level 3
The definition of 'cursor' in that specification.
Proposed Recommendation Addition of several keywords and the positioning syntax for url().
CSS Level 2 (Revision 1)
The definition of 'cursor' in that specification.
Recommendation Initial definition.

Browser compatibility

 

FeatureChromeEdgeFirefoxInternet ExplorerOperaSafari
Basic support1 Yes14171.2
auto1 Yes1471.2
default1 Yes1471.2
inherit1 Yes1891.2
none5 Yes39155
context-menu12 Yes1.521010.63
help1 Yes1471.2
pointer1 Yes1671.2
progress1 Yes1671.2
wait1 Yes1471.2
cell1 Yes1.51010.63
crosshair1 Yes1471.2
text1 Yes1471.2
vertical-text1 Yes1.5 No10.63
alias1 Yes1.51010.63
copy1 Yes1.51010.63
move1 Yes1471.2
no-drop1 Yes1.5610.63
not-allowed1 Yes1.5610.63
all-scroll1 Yes1.5610.63
col-resize1 Yes1.5610.63
row-resize1 Yes1.5610.63
Unidirectional resize cursors (n-resize, e-resize, s-resize, w-resize, ne-resize, nw-resize, se-resize, and sw-resize)1 Yes1471.2
Bidirectional resize cursors (ew-resize, nesw-resize, ns-resize, and nwse-resize)1 Yes1.51010.63
Zoom cursors (zoom-in and zoom-out)

37

1 -webkit-

Yes

24

1 -moz-

No

24

15 — 23 -webkit-

9

3 -webkit-

Grab cursors (grab and grabbing)1 -webkit- 3 Yes

27

1.5 -moz-

No Yes4 -webkit-
url()1 Yes1.546 ?3
url() positioning syntax Yes No Yes No ? Yes
FeatureAndroid webviewChrome for AndroidEdge mobileFirefox for AndroidOpera AndroidiOS SafariSamsung Internet
Basic support No ? Yes ? ? ? ?
auto No ? Yes ? ? ? ?
default No ? Yes ? ? ? ?
inherit No ? Yes ? ? ? ?
none No ? Yes ? ? ? ?
context-menu No ? Yes ? ? ? ?
help No ? Yes ? ? ? ?
pointer No ? Yes ? ? ? ?
progress No ? Yes ? ? ? ?
wait No ? Yes ? ? ? ?
cell No ? Yes ? ? ? ?
crosshair No ? Yes ? ? ? ?
text No ? Yes ? ? ? ?
vertical-text No ? Yes ? ? ? ?
alias No ? Yes ? ? ? ?
copy No ? Yes ? ? ? ?
move No ? Yes ? ? ? ?
no-drop No ? Yes ? ? ? ?
not-allowed No ? Yes ? ? ? ?
all-scroll No ? Yes ? ? ? ?
col-resize No ? Yes ? ? ? ?
row-resize No ? Yes ? ? ? ?
Unidirectional resize cursors (n-resize, e-resize, s-resize, w-resize, ne-resize, nw-resize, se-resize, and sw-resize) No ? Yes ? ? ? ?
Bidirectional resize cursors (ew-resize, nesw-resize, ns-resize, and nwse-resize) No ? Yes ? ? ? ?
Zoom cursors (zoom-in and zoom-out) No ? Yes ? ? ? ?
Grab cursors (grab and grabbing) No ? Yes ? ? ? ?
url() No ? Yes ? ? ? ?
url() positioning syntax No ? No ? ? ? ?

1. In Internet Explorer 11, when cursor is applied to an element and this element is underneath an open <select> menu and the user hovers over a <select> menu item that's on top of said element, the cursor for said element will be displayed rather than the <select>'s normal cursor. See bug 817822.

2. This cursor is only supported on macOS and Linux.

3. Chrome 22 added Windows support.

4. Firefox 4 added macOS support.

 

See also