W3docs

Propriedade CSS cursor

A propriedade CSS cursor define a aparência do ponteiro ao passar sobre um elemento. Conheça todos os valores e veja exemplos de cada um.

A propriedade cursor controla a forma do ponteiro do mouse quando ele passa sobre um elemento. É uma dica visual: a forma do ponteiro indica ao usuário o que acontecerá ao clicar, arrastar ou passar o mouse — uma mão significa "isto é clicável", um cursor de texto significa "você pode selecionar texto aqui", uma roda girando significa "aguarde".

Esta página aborda quando usar cursor, a lista completa de valores de palavra-chave agrupados por finalidade, como carregar sua própria imagem como cursor personalizado (com a sintaxe <url> e seus fallbacks), e as armadilhas de acessibilidade a evitar.

Por que e quando usar

Os navegadores já escolhem um cursor adequado para cada elemento — um cursor de texto sobre um parágrafo, uma mão apontando sobre um link. Você sobrescreve o padrão principalmente quando:

  • Você cria um controle interativo personalizado (um <div> funcionando como botão, um cartão arrastável, uma alça de ordenação) onde o navegador não tem como adivinhar o cursor correto. Aqui, um cursor pointer ou grab restaura a indicação que os usuários esperam.
  • Você quer sinalizar estado — um controle desativado com not-allowed, ou uma região ocupada com wait/progress.
  • Você precisa de um ponteiro personalizado estilizado ou para jogos via uma imagem customizada.

Use com moderação e de forma previsível. Um cursor que contradiz o comportamento (uma mão pointer sobre texto não clicável, ou none ocultando o cursor em uma página normal) confunde mais do que ajuda.

Visão geral da sintaxe

O valor é zero ou mais valores <url> separados por vírgula, cada um apontando para um arquivo de imagem, seguido de um fallback de palavra-chave obrigatório. O navegador tenta cada imagem em ordem e recorre à próxima se uma imagem não puder ser carregada; se nenhuma carregar, usa a palavra-chave. É por isso que a palavra-chave no final é obrigatória — ela garante que o usuário sempre obtenha algum cursor.

/* keyword only */
cursor: pointer;

/* custom image with a keyword fallback (the fallback is required) */
cursor: url("cursor.png"), auto;

/* multiple images tried in order, then the fallback */
cursor: url("cursor.svg"), url("cursor.png"), auto;
Informação

Os navegadores modernos suportam grab, grabbing, zoom-in e zoom-out sem prefixos de fornecedor. Para manter os cliques onde os usuários esperam, combine alterações de cursor personalizado com as propriedades relacionadas pointer-events e user-select.

Valor Inicialauto
Aplica-se aTodos os elementos.
HerdadoSim.
AnimávelNão.
VersãoCSS2
Sintaxe DOMobject.style.cursor = "cell";

Todos os valores de palavra-chave

Cada palavra-chave que a propriedade aceita, em um único lugar. Os mais comuns no trabalho diário de UI são pointer (clicável), default (a seta simples), text, move, grab/grabbing e not-allowed.

cursor: auto | default | none | context-menu | help | pointer | progress | wait | cell | crosshair | text | <url> | vertical-text | alias | copy | move | no-drop | not-allowed | all-scroll | col-resize | row-resize | n-resize | s-resize | e-resize | w-resize | ns-resize | ew-resize | ne-resize | nw-resize | se-resize | sw-resize | nesw-resize | nwse-resize | zoom-in | zoom-out | grab | grabbing

Exemplo com os valores auto e help

Exemplo da propriedade CSS cursor com os valores auto e help

<!DOCTYPE html>
<html>
  <head>
    <title>Title of the document</title>
    <style>
      body {
        text-align: center;
        font-family: Roboto, Helvetica, Arial, sans-serif;
      }
      .auto {
        cursor: auto;
      }
      .help {
        cursor: help;
      }
      .cursor {
        display: flex;
        flex-wrap: wrap;
      }
      .cursor > div {
        flex: 120px;
        padding: 10px 2px;
        white-space: nowrap;
        border: 2px solid #666;
        border-radius: 20px;
        margin: 0 5px 5px 0;
      }
      .cursor > div:hover {
        background: #eee;
      }
    </style>
  </head>
  <body>
    <h2>Cursor property example</h2>
    <div class="cursor">
      <div class="auto">auto</div>
      <div class="help">help</div>
    </div>
  </body>
</html>

O próximo exemplo exibe uma caixa rotulada para cada valor de palavra-chave, para que você possa passar o mouse sobre cada uma e ver o cursor no seu navegador.

Exemplo mostrando todos os valores de cursor

Exemplo da propriedade CSS cursor com todos os valores

<!DOCTYPE html>
<html>
  <head>
    <title>Title of the document</title>
    <style>
      body {
        text-align: center;
        font-family: Roboto, Helvetica, Arial, sans-serif;
      }
      .cursor {
        display: flex;
        flex-wrap: wrap;
      }
      .cursor > div {
        flex: 120px;
        padding: 10px 2px;
        white-space: nowrap;
        border: 2px solid #666;
        border-radius: 20px;
        margin: 0 5px 5px 0;
      }
      .cursor > div:hover {
        background: #eee;
      }
      .auto {
        cursor: auto;
      }
      .default {
        cursor: default;
      }
      .none {
        cursor: none;
      }
      .context-menu {
        cursor: context-menu;
      }
      .help {
        cursor: help;
      }
      .pointer {
        cursor: pointer;
      }
      .progress {
        cursor: progress;
      }
      .wait {
        cursor: wait;
      }
      .cell {
        cursor: cell;
      }
      .crosshair {
        cursor: crosshair;
      }
      .text {
        cursor: text;
      }
      .vertical-text {
        cursor: vertical-text;
      }
      .alias {
        cursor: alias;
      }
      .copy {
        cursor: copy;
      }
      .move {
        cursor: move;
      }
      .no-drop {
        cursor: no-drop;
      }
      .not-allowed {
        cursor: not-allowed;
      }
      .all-scroll {
        cursor: all-scroll;
      }
      .col-resize {
        cursor: col-resize;
      }
      .row-resize {
        cursor: row-resize;
      }
      .n-resize {
        cursor: n-resize;
      }
      .e-resize {
        cursor: e-resize;
      }
      .s-resize {
        cursor: s-resize;
      }
      .w-resize {
        cursor: w-resize;
      }
      .ns-resize {
        cursor: ns-resize;
      }
      .ew-resize {
        cursor: ew-resize;
      }
      .ne-resize {
        cursor: ne-resize;
      }
      .nw-resize {
        cursor: nw-resize;
      }
      .se-resize {
        cursor: se-resize;
      }
      .sw-resize {
        cursor: sw-resize;
      }
      .nesw-resize {
        cursor: nesw-resize;
      }
      .nwse-resize {
        cursor: nwse-resize;
      }
      .grab {
        cursor: grab;
      }
      .grabbing {
        cursor: grabbing;
      }
      .zoom-in {
        cursor: zoom-in;
      }
      .zoom-out {
        cursor: zoom-out;
      }
    </style>
  </head>
  <body>
    <h2>Cursor property example</h2>
    <p> Hover the mouse cursor over the element to see the changes</p>
    <div class="cursor">
      <div class="auto">auto</div>
      <div class="default">default</div>
      <div class="none">none</div>
      <div class="context-menu">context-menu</div>
      <div class="help">help</div>
      <div class="pointer">pointer</div>
      <div class="progress">progress</div>
      <div class="wait">wait</div>
      <div class="cell">cell</div>
      <div class="crosshair">crosshair</div>
      <div class="text">text</div>
      <div class="vertical-text">vertical-text</div>
      <div class="alias">alias</div>
      <div class="copy">copy</div>
      <div class="move">move</div>
      <div class="no-drop">no-drop</div>
      <div class="not-allowed">not-allowed</div>
      <div class="all-scroll">all-scroll</div>
      <div class="col-resize">col-resize</div>
      <div class="row-resize">row-resize</div>
      <div class="n-resize">n-resize</div>
      <div class="s-resize">s-resize</div>
      <div class="e-resize">e-resize</div>
      <div class="w-resize">w-resize</div>
      <div class="ns-resize">ns-resize</div>
      <div class="ew-resize">ew-resize</div>
      <div class="ne-resize">ne-resize</div>
      <div class="nw-resize">nw-resize</div>
      <div class="se-resize">se-resize</div>
      <div class="sw-resize">sw-resize</div>
      <div class="nesw-resize">nesw-resize</div>
      <div class="nwse-resize">nwse-resize</div>
      <div class="grab">grab</div>
      <div class="grabbing">grabbing</div>
      <div class="zoom-in">zoom-in</div>
      <div class="zoom-out">zoom-out</div>
    </div>
  </body>
</html>

Cursor personalizado com o valor "url"

Você pode fornecer sua própria imagem como cursor. Algumas regras tornam isso confiável:

  • Sempre termine com um fallback de palavra-chave (, auto abaixo). Sem ele, a declaração é inválida e é completamente ignorada.
  • Mantenha as imagens pequenas. Os navegadores limitam cursores personalizados a aproximadamente 32×32 px (128×128 px em alguns); imagens maiores são descartadas silenciosamente e o fallback é usado.
  • Defina o hotspot — o ponto de clique ativo — com dois números opcionais após a URL: cursor: url("crosshair.png") 16 16, auto; faz o centro de uma imagem 32×32 ser o ponto de clique. Omiti-los faz o canto superior esquerdo ser usado.
  • Use um formato que todos os navegadores alvo suportam (PNG e SVG são seguros; .cur/.ani são exclusivos do Windows).

Exemplo da propriedade cursor com url

<!DOCTYPE html>
<html>
  <head>
    <title>Title of the document</title>
    <style>
      .cursor {
        display: inline-block;
        width: 30px;
        height: 30px;
        cursor: url("/uploads/media/default/0001/04/6388ec92938ec31c9f019a249174f683118b55d6.png"), auto;
      }
    </style>
  </head>
  <body>
    <h2>Cursor property example</h2>
    <p> Hover the mouse cursor over the element to see the changes</p>
    <i class="cursor">Icon</i>
  </body>
</html>

Valores

ValorDescriçãoExperimente
autoSignifica que o navegador definirá um cursor. É o valor padrão desta propriedade.Experimente »
defaultÉ o cursor padrão.Experimente »
noneSignifica que nenhum cursor é exibido para o elemento.Experimente »
context-menuO cursor indica que um menu de contexto está disponível.Experimente »
helpO cursor indica que há ajuda disponível.Experimente »
pointerO cursor indica um link como um ponteiro.Experimente »
progressO cursor indica que o programa está ocupado ou em andamento.Experimente »
waitO cursor indica que o programa está ocupado.Experimente »
cellSignifica que o cursor indicará que uma célula ou conjunto de células pode ser selecionado.Experimente »
crosshairO cursor será exibido como uma mira.Experimente »
textO cursor indica texto que pode ser selecionado.Experimente »
<url>Uma lista separada por vírgulas de URLs para cursores personalizados.Experimente »
vertical-textO cursor indica texto vertical que pode ser selecionado.Experimente »
aliasSignifica que o cursor indicará que um alias de algo será criado.Experimente »
copyO cursor indica algo que pode ser copiado.Experimente »
moveO cursor indica que algo pode ser movido.Experimente »
no-dropO cursor indica que o item arrastado não pode ser solto aqui.Experimente »
not-allowedO cursor indica que a ação solicitada não será executada.Experimente »
all-scrollSignifica que o cursor indicará que algo pode ser rolado em qualquer direção.Experimente »
col-resizeO cursor indica que a coluna pode ser redimensionada horizontalmente.Experimente »
row-resizeO cursor indica que a linha pode ser redimensionada verticalmente.Experimente »
n-resizeO cursor indica que uma borda de uma caixa deve ser movida para cima.Experimente »
s-resizeO cursor indica que uma borda de uma caixa deve ser movida para baixo.Experimente »
e-resizeO cursor indica que uma borda de uma caixa deve ser movida para a direita.Experimente »
w-resizeO cursor indica que uma borda de uma caixa deve ser movida para a esquerda.Experimente »
ns-resizeO cursor indica um cursor de redimensionamento bidirecional.Experimente »
ew-resizeO cursor indica um cursor de redimensionamento bidirecional.Experimente »
ne-resizeO cursor indica que uma borda de uma caixa deve ser movida para cima e para a direita.Experimente »
nw-resizeO cursor indica que uma borda de uma caixa deve ser movida para cima e para a esquerda.Experimente »
se-resizeO cursor indica que uma borda de uma caixa deve ser movida para baixo e para a direita.Experimente »
sw-resizeO cursor indica que uma borda de uma caixa deve ser movida para baixo e para a esquerda.Experimente »
nesw-resizeO cursor indica um cursor de redimensionamento bidirecional.Experimente »
nwse-resizeO cursor indica um cursor de redimensionamento bidirecional.Experimente »
zoom-inO cursor indica que algo pode ser ampliado.Experimente »
zoom-outO cursor indica que algo pode ser reduzido.Experimente »
grabO cursor indica que algo pode ser agarrado.Experimente »
grabbingO cursor indica que um elemento está sendo arrastado no momento.Experimente »
initialFaz a propriedade usar seu valor padrão.Experimente »
inheritHerda a propriedade do elemento pai.

Acessibilidade e armadilhas comuns

  • cursor é uma dica, não um controle. Ele muda a aparência do ponteiro, nunca o que o elemento faz. Um cursor pointer não torna um <div> clicável, e not-allowed não desativa um botão — você ainda precisa do comportamento real (um onclick, o atributo disabled, funções ARIA).
  • Não confie apenas no cursor para sinalizar estados desativados ou ocupados. Usuários de teclado e toque nunca o veem. Combine com estilos visíveis e os atributos corretos.
  • Evite cursor: none em páginas comuns. Ocultar o ponteiro pode prender usuários que não conseguem mais encontrá-lo. Reserve para experiências em tela cheia (jogos, quiosques) que gerenciam seu próprio ponteiro.
  • Imagens personalizadas podem prejudicar a usabilidade se forem de baixo contraste, muito grandes ou com hotspot mal posicionado, fazendo os usuários clicarem ligeiramente fora do alvo. Teste em fundos claros e escuros.
  • cursor é herdado, portanto, um valor definido em um contêiner se aplica aos seus filhos, a menos que eles o substituam.

Propriedades relacionadas

  • pointer-events — decide se um elemento reage ao ponteiro.
  • user-select — controla se o texto pode ser selecionado (combina bem com cursor: text / cursor: default).
  • :hover — altera estilos enquanto o ponteiro está sobre um elemento.
  • caret-color — estiliza o cursor de texto piscante em campos de entrada, um "cursor" completamente diferente.

Prática

Prática
O que a propriedade CSS 'cursor' especifica no design web?
O que a propriedade CSS 'cursor' especifica no design web?
Was this page helpful?