サイトロゴ

Enjoy Creating
Web & Mobile Apps

MENU BOX
WEB
MOBILE
OPEN

ホーム

 > 

 > 

CSSでマウスカーソルを変える方法【cursor】

CSSでマウスカーソルを変える方法【cursor】

この記事にはプロモーションが含まれています。

Webページにはボタンやリンクテキストなど、クリックできるものを配置する機会が多いですよね。

見た目をボタンらしいデザインにすることで、『これはクリックできるボタンである』ということを分かりやすくするのも大事ですが、マウスカーソル(ポインタ)を乗せた時に、マウスカーソルが変化するという機能もUI改善につながる重要な要素です。

 用語解説:UI(ユーザーインターフェース)とは?

下に、マウスカーソルを乗せるとカーソルが変化するボタンと、変化しないボタンを用意しました。

どちらもクリックしても何も起こりませんが、マウスカーソルが変わる方は、マウスカーソルを乗せた時にクリックできるボタンだとわかりやすいことが感覚的に掴めると思います。

また、お問い合わせフォームで、『確認しました』にチェックを入れないと送信ボタンがクリックできないようにする場合など、クリックできないオブジェクトであることを明示するために、クリック不可(禁止)を表すマウスカーソルにすることもUIの向上になると言えます。

マウスカーソル調整はスマホページには関係ないことですが、2022年1月現在、プログラミング教育やIT化の遅れを取り戻す動きが国全体の課題として取り上げられており、PCを扱う機会が増えつつあると筆者は感じています。

ということは、今後はPCからWebページが閲覧される機会が増える可能性があるということなので、今のうちからPC向けのUI改善に取り組んでおきましょう!

- 目次 -

cursorプロパティの値

要素にマウスカーソルが乗っかった時にマウスカーソルを変更するCSSプロパティは、cursorプロパティです。

このcursorプロパティは値の種類が非常に多く、その数30種類以上もあります。
ですが、一般的なWebサイトを作る際に知っておきたい値の種類はせいぜい、そのうちの数種類です。

WebサイトではなくWebアプリケーションを作りたい場合…例えば、ユーザーが画像をドラッグ&ドロップでアップロードできる仕組みを作りたい場合などは、マウスドラッグ・ドロップ用のカーソル変化を用意する必要がありますが、一般的なWebサイトでそのような機能は必要ないですよね。

ということで、ここではシンプルにわかりやすくするため、cursorプロパティの値の種類を厳選し、余計な情報は省いて掲載しました。

下の表が、Webサイト制作において必ず知っておきたいcursorプロパティの値です。

*値の上にマウスカーソルを乗せると、該当のカーソルになります*

説明
auto初期値。ブラウザのデフォルトのカーソルが表示される。
例えばテキストならば『I』字型のカーソル(Iビーム)になる。
default基本のマウスカーソル。普通は矢印。
noneマウスカーソルが非表示になる。
pointerリンクやボタンなどクリックできることを表すカーソルになる。
textテキストが選択可能であることを示すカーソルになる。
not-allowed選択(クリック)不可であることを示すカーソルになる。

上の表の中でも特に使用頻度が高いのが、pointer(クリックできることを明示する)です。

UIを考えたときに最も避けなければならないのは、クリックできるボタンやテキストをクリックできると認識できずに、クリックされないこと…と言えます。

ブラウザのデフォルトの設定である程度カバーはしてくれますが、それだけでは不十分であることも多いです。
特にリセットCSSなどでブラウザのデフォルトの挙動を変更している場合は注意が必要です。

ということで次の章では、cursorプロパティのpointerについて解説していきます。

    POINT!
  1. ・マウスカーソルを変化させるCSSプロパティは、cursorプロパティ!
  2. ・cursorプロパティの値の種類はとても多いが、通常のWebサイト制作では数種類知っておくだけでOK!
  3. ・cursorプロパティの中でもっとも使用頻度が高いのは、クリックできることを明示するpointer!

値:pointerの使い方

この章ではcursorプロパティの値の中でも最も使用頻度が高い、pointerの使い方と注意点について解説していきます。

値:pointerに限ったことではありませんが、cursorプロパティの扱いはとても簡単で、マウスカーソルを乗せた時にカーソルを変化させたい要素に、該当のCSSを指定するだけです。

要素の上にマウスカーソルが乗っかる=擬似クラス:hoverの指定が必要なのでは?…と思ってしまう方もいるかもしれませんが、:hoverは必要ありません。

 用語解説:擬似クラス:hover(ホバー)とは?

cursorプロパティそのものが要素上のマウスカーソルを変更するためのCSSなので、マウスカーソルが乗っかったとき(マウスオーバー)という条件指定が必要ないというわけですね。

※擬似クラス:hoverとマウスオーバーアクションについての詳しい記事は、こちらをご覧ください。

下は、ボタンに対してマウスカーソルをpointer指定したCSSコードサンプルです。

HTML

<button type="button" name="button" class="pointer_bt">カーソルをポインターに</button>

CSS

.pointer_bt {
	cursor: pointer;
	padding: 10px 20px;
	font-size: 16px;
}

*表示結果*

このように、マウスカーソルを変更するのはとても簡単です。
cursorプロパティを使ってマウスカーソルをpointerにする場面としては、サンプルのようにbuttonタグを使ったボタンなどが多いです。

aタグを使ったリンク挿入要素は、通常であればブラウザのデフォルト設定によりマウスカーソルがpointerになるため、cursorプロパティを指定する必要はありません。

しかし、button要素などデフォルトではpointerにならない要素に関しては、クリックで何かしらの変化が起こるようにしているのであればマウスカーソルをpointerにしておいた方が親切かと思います。

特に、button要素の見た目をCSSで大きく調整している場合はボタンに見えるデザインにしていても、「色んなWebサイトでも見かけるボタン」とは言えなくなります。

こういった場合はマウスカーソルをpointerにしておくことで、少なくともPCからWebサイトを訪問したユーザーはボタンであると確信を持つことができると言えるでしょう。

    POINT!
  1. ・マウスカーソルを変更するには、該当の要素をセレクタに指定してcursorプロパティを指定すればOK!
  2. ・マウスカーソルが要素の上に乗った時の指定だが、擬似クラス:hoverの指定は必要なし!
  3. ・button要素など、デフォルト(auto)ではpointerにならないが、クリックできるものにpointer指定をすると良い!

値:pointerの応用

cursor: pointer;は、前章で紹介したようにクリックできるbutton要素などに指定するのが一般的ですが、他にも役に立つ場面があるのでその具体例を紹介します。


具体例1)カルーセル

下のような、ユーザーが矢印(<、>)をクリックすることで表示画像などが切り替わる機能を、カルーセルと言います。

左右に配置されている矢印(<、>)はクリックできますが、これはリンクテキストでもなければボタンでもないため、対策なしではクリックできることに気づきにくいものであると言えます。

こういった、リンクでもボタンでもないものをクリックできることを少しでも分かりやすくするために、マウスカーソルをpointerにすることは有効な対策です。

1
2
3

具体例2)ライトボックス

下のような、画像をクリックすると画像が拡大(全画面)表示される機能をライトボックスと言います。

しかし、ただ画像を配置しただけではそれがクリックで拡大表示される画像だとは判別できませんよね。

こういった場合もマウスカーソルをpointerにすることで、クリックできる画像であるということがわかります。
ただ、それだけではまだ不十分なので、さらに「画像をクリックで拡大表示できます。」と一言添えておくと尚良いでしょう。

*クリックで拡大*

アニメーションをつけたサンプル画像

このように、リンクやボタンだけでなく、クリックで何かが起こる要素に対してマウスカーソルをpointerに指定することで、ユーザーがよりわかりやすくWebサイトの機能を利用できるようになります。

    POINT!
  1. ・cursor: pointer;指定の使い道は、button要素だけではない!
  2. ・カルーセルを配置する場合、クリックできる矢印にpointer指定すると良い!
  3. ・ライトボックスの画像要素にも、クリックできることを明示するためにpointer指定が有効!

not-allowedの使い道

これまでご紹介してきたように、cursorプロパティはpointerに指定して、クリックできる要素を分かりやすくする目的で使うことが多いです。

とは言え、pointer以外の値の使い道がないわけではありません。
アイデア次第で色々と使い道は考えられるので、活用していきましょう!

この章では、クリック不可であることを明示するnot-allowedの活用例をご紹介します。


*チェックを入れないとクリックできない送信ボタン

お問い合わせフォームは個人・法人問わず多くのWebサイトに設置されていますが、あまりにも簡単に送信できるようにしておくと迷惑メール・スパムが多く送られてくることになってしまいます。

そこで、○文字以上入力しないと受け付けないようにするとか、入力必須項目を多くするとか、そういった対策が取られるわけですが、対策の1つとして確認のチェックを入れることを必須にするという方法があります。

チェックボックスにチェックを入れるまで送信ボタンをクリックできないようにしておくことで、ある程度迷惑メールが送られてしまうことを減らすことができます。

この場合、チェックボックスにチェックを入れるまでは、cursor: not-allowed;を使って、クリックできないようにしておくと良いでしょう。

下がそのサンプルです。(チェックを入れて送信ボタンを押しても何も起こりません)

チェックボックスにチェックが入っているかどうかの判定はJavaScriptを使っています。
サンプルのコードは下のようになっています。

HTML

<div class="sample_form">
	<input type="text" name="" value="" placeholder="サンプルです">
	<input class="sample_check" type="checkbox" name="" value="">
	<div style="margin-top: 2rem;">
		<div class="sample_submit_outer">
			<input class="sample_submit" type="submit" name="" value="送信する">
		</div>
	</div>
</div>

CSS

.pointer_bt {
	cursor: pointer;
	padding: 10px 20px;
	font-size: 16px;
}
.sample_form input {
	font-size: 16px;
}
.sample_submit_outer {
	cursor: not-allowed;
	width: fit-content;
}
.sample_submit {
	pointer-events: none;
	opacity: .5;
}

JavaScript

const sampleCheck = document.querySelector('.sample_check');
const sampleSubmit = document.querySelector('.sample_submit');
const sampleCursor = document.querySelector('.sample_submit_outer');
sampleCheck.addEventListener('input', () => {
	if (sampleCheck.checked ) {
		sampleSubmit.style.cursor = 'pointer';
		sampleSubmit.style.opacity = '1';
		sampleSubmit.style.pointerEvents = 'auto';
	}
	else {
		sampleCursor.style.cursor = 'not-allowed';
		sampleSubmit.style.opacity = '.5';
		sampleSubmit.style.pointerEvents = 'none';
	}
});

Webサイト制作においては「クリックできる・できない」を明確にする…ということがとにかく大切です。

クリックできるか、できないか、実際にクリックしてみるまでわからない…というのは使い勝手が悪く、UI改善が必要と言えるでしょう。

そういった意味で、cursorプロパティのpointernot-allowedは、特に上手に活用すると良いと思います。

    POINT!
  1. ・cursor: not-allowed;は、要素がクリックできないことを表すカーソルになる!
  2. ・チェックを入れないと押せないボタンなどに使用すると分かりやすい!
  3. ・pointerとnot-allowedを使いこなして、クリックできるorできないを明確にしよう!
- 関連記事 -

今回の動画で紹介したコード!

今回の解説動画で使用したコードです。学習用としてご自由にコピペしてお使い下さい。(※スクロールできます)

<!DOCTYPE html>
<html lang="ja" dir="ltr">
  <head>
    <meta charset="utf-8">
    <title></title>
    <style media="screen">
    .height {
      height: 400px;
    }

    .pointer_bt {
      cursor: pointer;
      padding: 10px 20px;
      font-size: 16px;
    }

    .sample_form input {
      font-size: 16px;
    }
    .sample_submit_outer {
      cursor: not-allowed;
      width: fit-content;
      width: -moz-fit-content;
    }
    .sample_submit {
      pointer-events: none;
      opacity: .5;
    }
    </style>
  </head>
  <body>
    <div class="height"></div>

    <button type="button" name="button" class="pointer_bt">カーソルをポインターに</button>

    <div class="height"></div>

    <div class="">
      <a href="#">リンクテキストはデフォルトでポインターになります。</a>
    </div>

    <div class="height"></div>

    <div class="sample_form">
      <input type="text" name="" value="" placeholder="サンプルです">
      <input class="sample_check" type="checkbox" name="" value="">
      <div style="margin-top: 2rem;">

        <div class="sample_submit_outer">
          <input class="sample_submit" type="submit" name="" value="送信する">
        </div>
      </div>
    </div>


    <div class="height"></div>

    <script type="text/javascript">
    {
      const sampleCheck = document.querySelector('.sample_check');
      const sampleSubmit = document.querySelector('.sample_submit');
      const sampleCursor = document.querySelector('.sample_submit_outer');

      sampleCheck.addEventListener('input', () => {
        if (sampleCheck.checked ) {
          sampleCursor.style.cursor = 'pointer';
          sampleSubmit.style.opacity = '1';
          sampleSubmit.style.pointerEvents = 'auto';
        }
        else {
          sampleCursor.style.cursor = 'not-allowed';
          sampleSubmit.style.opacity = '.5';
          sampleSubmit.style.pointerEvents = 'none';
        }
      });
    }
    </script>
  </body>
</html>

« »

カテゴリーリンク

著者について- author profile -

ROYDOプロフィール写真
Michihiro

モバイルアプリ(iOS・Android)ディベロッパー&デザイナー

これまでに、可読性の高いカラーパターンを自動で生成するアプリや、『第3火曜日』といった形式で通知をスケジュールできるアプリなどを制作。

サブでWebデザイン・フロントエンドエンジニアとしても活動しています。

📝ツール・言語:JavaScript/React Native/Kotlin/Android Studio/Swift/SwiftUI

🎓資格:基本情報技術者/ウェブデザイン技能検定3級

Twitterアイコン Instagramアイコン