W3docs

CSS свойство cursor

Свойство cursor управляет видом указателя мыши при наведении на элемент. Все значения и примеры.

Свойство cursor управляет формой указателя мыши при наведении на элемент. Это визуальная подсказка: форма указателя сообщает пользователю, что произойдёт при клике, перетаскивании или наведении — рука означает «это кликабельно», текстовый курсор означает «здесь можно выделить текст», вращающееся колесо означает «подождите».

На этой странице рассматривается, когда использовать cursor, полный список ключевых значений, сгруппированных по назначению, как загрузить собственное изображение в качестве пользовательского курсора (с синтаксисом <url> и запасными вариантами), а также ловушки доступности, которых следует избегать.

Зачем и когда использовать

Браузеры уже выбирают подходящий курсор для каждого элемента — текстовый луч над абзацем, указывающую руку над ссылкой. Вы переопределяете значение по умолчанию в основном когда:

  • Вы создаёте пользовательский интерактивный элемент управления (<div> в роли кнопки, перетаскиваемую карточку, ручку сортировки), где браузер не может угадать правильный курсор. Здесь курсор pointer или grab восстанавливает поведение, которого ожидают пользователи.
  • Вы хотите сигнализировать о состоянии — отключённый элемент с not-allowed или занятая область с wait/progress.
  • Вам нужен фирменный или игровой указатель через пользовательское изображение.

Используйте свойство экономно и предсказуемо. Курсор, противоречащий поведению (рука pointer над некликабельным текстом или none, скрывающий курсор на обычной странице), сбивает пользователей с толку больше, чем помогает.

Обзор синтаксиса

Значение — это ноль или более разделённых запятыми значений <url>, каждое из которых указывает на файл изображения, за которым следует обязательное ключевое слово-запасной вариант. Браузер пробует каждое изображение по порядку и переходит к следующему, если изображение не загружается; если ни одно не загружается, используется ключевое слово. Именно поэтому ключевое слово в конце обязательно — оно гарантирует, что пользователь всегда увидит какой-нибудь курсор.

/* 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;
Информация

Современные браузеры поддерживают grab, grabbing, zoom-in и zoom-out без вендорных префиксов. Чтобы клики попадали туда, куда ожидают пользователи, сочетайте изменения пользовательского курсора со связанными свойствами pointer-events и user-select.

Начальное значениеauto
Применяется кВсем элементам.
НаследуетсяДа.
АнимируемоНет.
ВерсияCSS2
DOM Синтаксисobject.style.cursor = "cell";

Все ключевые значения

Все ключевые слова, которые принимает свойство, в одном месте. Наиболее распространённые в повседневной работе с UI: pointer (кликабельно), default (обычная стрелка), text, move, grab/grabbing и 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

Пример со значениями auto и help

Пример свойства CSS cursor со значениями auto и 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>

Следующий пример отображает подписанный блок для каждого ключевого значения, чтобы вы могли навести на каждое и увидеть его курсор в своём браузере.

Пример со всеми значениями cursor

Пример свойства CSS cursor со всеми значениями

<!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>

Пользовательский курсор со значением "url"

Вы можете указать собственное изображение в качестве курсора. Несколько правил обеспечивают надёжность:

  • Всегда заканчивайте ключевым словом-запасным вариантом (, auto в примере ниже). Без него объявление недействительно и полностью игнорируется.
  • Используйте маленькие изображения. Браузеры ограничивают пользовательские курсоры примерно до 32×32 пикселей (128×128 пикселей в некоторых); большие изображения молча отбрасываются и используется запасной вариант.
  • Задайте горячую точку — активную точку клика — с помощью двух необязательных чисел после URL: cursor: url("crosshair.png") 16 16, auto; делает центр изображения 32×32 точкой клика. Если их опустить, используется верхний левый угол.
  • Используйте формат, поддерживаемый каждым целевым браузером (PNG и SVG безопасны; .cur/.ani работают только в Windows).

Пример свойства cursor со значением 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>

Значения

ЗначениеОписаниеПопробуйте
autoБраузер устанавливает курсор автоматически. Это значение по умолчанию.Попробуйте »
defaultКурсор по умолчанию.Попробуйте »
noneКурсор для элемента не отображается.Попробуйте »
context-menuКурсор указывает на доступность контекстного меню.Попробуйте »
helpКурсор указывает на доступность справки.Попробуйте »
pointerКурсор в виде указателя, обозначающего ссылку.Попробуйте »
progressКурсор указывает, что программа занята или выполняет задачу.Попробуйте »
waitКурсор указывает, что программа занята.Попробуйте »
cellКурсор указывает, что можно выбрать ячейку или набор ячеек.Попробуйте »
crosshairКурсор отображается в виде перекрестия.Попробуйте »
textКурсор указывает на текст, который можно выделить.Попробуйте »
<url>Разделённый запятыми список 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Курсор указывает, что элемент в данный момент перетаскивается.Попробуйте »
initialУстанавливает для свойства значение по умолчанию.Попробуйте »
inheritНаследует свойство от родительского элемента.

Доступность и частые ошибки

  • cursor — это подсказка, а не управление. Он меняет вид указателя, но никак не влияет на поведение элемента. Курсор pointer не делает <div> кликабельным, а not-allowed не отключает кнопку — для этого по-прежнему нужно реальное поведение (onclick, атрибут disabled, роли ARIA).
  • Не полагайтесь только на курсор для сигнализации отключённого или занятого состояния. Пользователи клавиатуры и сенсорных устройств его не видят. Сочетайте его с видимыми стилями и правильными атрибутами.
  • Избегайте cursor: none на обычных страницах. Скрытие указателя может дезориентировать пользователей, которые его не находят. Оставьте это для полноэкранных приложений (игры, киоски), самостоятельно управляющих указателем.
  • Пользовательские изображения могут ухудшить юзабилити, если они низкоконтрастные, слишком большие или имеют смещённую горячую точку, из-за чего пользователи нажимают немного мимо цели. Тестируйте на светлом и тёмном фоне.
  • cursor наследуется, поэтому значение, установленное на контейнере, применяется к его дочерним элементам, если они его не переопределяют.

Связанные свойства

  • pointer-events — определяет, реагирует ли элемент на указатель вообще.
  • user-select — управляет возможностью выделения текста (хорошо сочетается с cursor: text / cursor: default).
  • :hover — изменяет стили, когда указатель находится над элементом.
  • caret-color — стилизует мигающий текстовый курсор ввода, совершенно другой вид «курсора».

Практика

Практика
Что задаёт CSS свойство 'cursor' в веб-дизайне?
Что задаёт CSS свойство 'cursor' в веб-дизайне?
Was this page helpful?