cursor

Меняем привычный курсор-стрелку на более подходящий.

Время чтения: 5 мин

Кратко

Скопировано

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

Пример

Скопировано

Пусть будет обычный блок статьи:

        
          
          <article>  <h2>Какая-то статья</h2>  <div>    <p>      Многие кометы имеют два хвоста, однако солнечное затмение однократно.      Элонгация представляет собой эллиптический аргумент перигелия. Как мы уже      знаем, полнолуние непрерывно.    </p>  </div></article>
          <article>
  <h2>Какая-то статья</h2>
  <div>
    <p>
      Многие кометы имеют два хвоста, однако солнечное затмение однократно.
      Элонгация представляет собой эллиптический аргумент перигелия. Как мы уже
      знаем, полнолуние непрерывно.
    </p>
  </div>
</article>

        
        
          
        
      

Пусть при наведении курсора на блок статьи показывается смайлик с котиком:

        
          
          article {  cursor: url(cat.png) 2 2, default;}
          article {
  cursor: url(cat.png) 2 2, default;
}

        
        
          
        
      

Спойлер: может не работать в Google Chrome. Лучше смотреть в Firefox или Safari.

Если навести курсор на блок статьи, то увидите картинку котика вместо привычной стрелочки.

Открыть демо в новой вкладке

Как пишется

Скопировано

Есть набор стандартизированных значений:

  • auto — браузер сам решит какой курсор показывать в зависимости от того, на какой элемент он наведён. Например, для ссылки это будет рука с пальчиком, для поля ввода чёрточка, а для обычного блока — стандартная стрелка.
  • default — обычная, привычная стрелочка.
  • none — курсора совсем нет.
  • pointer — курсор, который обычно появляется над нажимаемыми элементами типа ссылок.
  • text — курсор в виде чёрточки с засечками сверху и снизу. Обычно показывается там, где текст может быть выбран, выделен.
  • Остальные, менее популярные значения:
    • context-menu — курсор контекстного меню (обычно вызывается правой кнопкой мыши).
    • help — доступен вспомогательный информационный контент.
    • progress — программа в фоне выполняет какие-то действия, но пользователь всё ещё может с ней взаимодействовать.
    • wait — программа не отвечает, занята обработкой какой-то операции.
    • cell — можно выбрать одну или несколько ячеек таблицы.
    • crosshair — курсор-крестик, обычно используется, чтобы показать, что на изображении можно выбрать какую-то область.
    • vertical-text — практически как text, но вертикально.
    • alias — загнутая стрелочка, так обозначают ссылки, клик по которым уведёт с текущего сайта.
    • copy — содержимое можно скопировать.
    • move — содержимое можно подвигать.
    • no-drop — в эту область нельзя перетащить файл.
    • not-allowed — действие не будет выполнено.
    • grab — содержимое можно схватить, чтобы перетащить.
    • grabbing — содержимое было схвачено для перетаскивания.
    • all-scroll — содержимое может быть проскроллено в любом направлении.
    • col-resize — колонку / ячейку таблицы можно изменить в размерах по горизонтали.
    • row-resize — строку в таблице или другой элемент можно изменить в размерах по вертикали.
    • zoom-in — содержимое можно приблизить, увеличить.
    • zoom-out — содержимое можно отдалить, уменьшить.

Демо со всеми перечисленными курсорами:

Открыть демо в новой вкладке

Внешне курсоры могут отличаться в разных операционных системах.

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

        
          
          selector {  cursor: url(cat.png), auto;}
          selector {
  cursor: url(cat.png), auto;
}

        
        
          
        
      

Если вы решили сделать кастомный курсор, то обязательно укажите через запятую одно из стандартных значений. Это нужно на случай, если браузер не смог загрузить или отобразить картинку. Тогда будет показан тот курсор, который вы указали в конце значения.

Можно указывать несколько картинок подряд. Будет показана первая из доступных.

        
          
          selector {  cursor: url(cat.svg), url(cat.png), url(cat.cur), pointer;}
          selector {
  cursor: url(cat.svg), url(cat.png), url(cat.cur), pointer;
}

        
        
          
        
      

Для каждой из картинок можно после закрывающей круглой скобки указать позицию курсора-картинки.

        
          
          selector {  cursor: url(cat.png) 2 2, auto;}
          selector {
  cursor: url(cat.png) 2 2, auto;
}

        
        
          
        
      

В этом примере мы смещаем картинку на 2 пикселя вниз и 2 пикселя вправо относительно кончика стандартного курсора-стрелки.

Координаты сдвига могут быть только положительными в пределах от 0 до 32. Единицы измерения при этом не указываются. Координаты не могут быть отрицательными. И их обязательно должно быть две.

Как понять

Скопировано

На экране курсор заменяет нам руки. Мы выполняем большую часть операций на компьютере при помощи мыши, её курсора: кликаем на кнопки, ставим курсор в поля ввода, выделяем текст, перетаскиваем элементы интерфейса и так далее.

Обычно на простых сайтах нужны всего два значения: pointer и default. Поскольку контент там во многом состоит из текста и ссылок / кнопок.

Если у вас сервис или сложная система управления, в которой есть больше вариантов взаимодействия с интерфейсом, чем просто на что-то нажать или что-то выделить, то отнеситесь внимательно к подбору правильных курсоров для каждого из интерактивных элементов. Именно по изменению внешнего вида курсора пользователь будет понимать, как именно взаимодействовать с элементом.

Подсказки

Скопировано

💡 Если используете картинку вместо курсора, то используйте небольшое изображение, поскольку нельзя явно указать размеры отображаемого курсора. Лучше не злоупотреблять, чтобы не перекрыть часть контента на странице.

💡 Пользователь привык целиться в то, на что хочет нажать кончиком курсора. Если вы сильно сдвинете картинку относительно этого самого кончика, то пользователь может не попасть в область клика.

На практике

Скопировано

Алёна Батицкая советует

Скопировано

🛠 Чаще всего это свойство пригождается при вёрстке кнопок. По умолчанию браузер не меняет внешний вид курсора при наведении мыши на кнопку. Поэтому, если на кнопку можно нажать, ей следует прописать cursor: pointer, чтобы пользователь точно понял, что с элементом можно взаимодействовать.