CSSでイベントを取り扱う 〜マウスオーバーの例〜
Webページで起きる「イベント」とその処理
Webブラウザを使って、Webページを表示しているとき、コンピュータはさまざまな「イベント」を処理しています。
イベントとは、クリックやマウスの移動のような、ユーザーのアクションによって発生するコンピュータ内の出来事のことを指します(※細かくいうと、「画像ファイルの読み込みを終えた」のように、ユーザーのアクションとは関係なく起きるイベントもあります)。
Webブラウザが処理するイベントの1つに、「マウスオーバー」があります。このイベントは、ユーザーがマウスを特定の要素(ボタンや画像、画面上のある範囲など)の上に置いた時に発生します。
CSSを適切に記述することで、このイベントをきっかけに、リンクの色を変えたり、ボタンの背景色を変えたりすることができます。
サンプルプログラムの動作
以下で、サンプルの動作を確認することができます。
サンプルプログラムでは、マウスオーバーイベントを発生させて、画面の要素の表示方法を変えています。
ボタンの上にマウスポインタを移動すると(=ボタンでマウスオーバーイベントを発生させると)、ボタンの背景色が青から赤に変わります。
「ここにマウスを乗せると」という領域にマウスポインタを乗せると、ヘルプメッセージが追加で表示されます。
また、画像(Monaca Educationのロゴ)にマウスポインタを合わせると、画像の表示が切り替わります(あんこエデュケーションのロゴになる)。
サンプルプログラムのインポート
以下のボタンをクリックすると、Monaca Educationにプロジェクトをインポートできます。
Monaca Educationにインポートする(要ログイン)
CSSで、イベントが発生したら表示方法を変えてみる
サンプルのCSSの詳細は、プロジェクトをインポートし、確認してもらうとして、2点を説明しておきます。
マウスオーバーしたら表示方法を変更する
HTML(ファイルindex.html)では、次の記述でボタンを表示させています。
<button>マウスポインタをボタンの上に合わせる</button>
もちろん、これだけでは、色の表示は変わりません。ファイルindex.htmlのタグ<style>の中にある、次の部分が色の表示の切り替えを実現しています。
button {
background-color: blue;
/* 通常時の背景色 */
color: white;
/* 通常時の文字色 */
padding: 10px 20px;
/* パディング */
cursor: pointer;
/* カーソルをポインターにする */
}
button:hover {
background-color: red;
/* マウスオーバー時の背景色 */
}
前半の、”button { … }” の部分で、マウスオーバーが起きていない、通常時の表示方法を決めています。
後半の、”button:hover { … }” の部分で、マウスオーバーが起きている時の表示方法を決めています。この例では、背景色を赤に指定しています。
なお、”hover”は、「ホバー」です。ヘリコプターや昆虫などが、羽を動かしてその場に浮かぶ様子を「ホバリング」と言いますが、その「ホバー」です。
マウスオーバーしたら、表示する要素を追加する
アプリを操作していて、「このボタンを押すと何が起きるんだろう?」とか「この欄には何を入力したらいいんだろう?」とか、戸惑ったことはありませんか。
マウスカーソルをその要素に合わせたら、操作方法を表示させることができたら便利です(ヘルプメッセージ)。
サンプルアプリの中で、該当するのは、ファイルindex.htmlでは次の部分です。
<!-- ヘルプメッセージを表示する -->
<div id="help-message">ここにマウスを乗せると…</div>
操作方法をヘルプメッセージとして表示しているのは、ファイルindex.htmlの中にある、タグ<style>の中の、次の部分です。
#help-message {
position: relative;
/* 擬似要素の位置指定の基準とする */
border: 1px solid #000;
/* 枠線 */
text-align: center;
/* 中央寄せ */
}
/* マウスオーバー時に表示するメッセージのスタイル
:hoverや、::after
*/
#help-message:hover::after {
content: "メッセージが表示されます。幅を指定しておけば、折り返してくれます。";
width: 200px;
/* 幅 */
position: absolute;
/* 位置を指定。
::afterの対象である、#help-messageの位置から見て、
表示位置を決めるよう指定している */
left: 40%;
/* #help-messageの要素の左端から40%ずらした所に表示する */
top: 70%;
/* #help-messageの要素の上端から30%ずらした所に表示する */
background-color: lightyellow;
/* 背景色 */
text-align: left;
/* テキストを左揃えに */
}
後半部分は、” #help-message:hover::after { … } “という形になっています。
このうち、#help-messageは、HTMLファイルの中にあるid=”help-message”の要素(タグ<div>)を指しています。
:hoverは、上でも説明した、「マウスオーバーイベントのとき」という意味です。
さらに::afterという記述が続きます。これは、「後ろの擬似要素の」という意味です。
つまり、まとめると、
「ID属性がhelp-messageの要素について、マウスオーバーイベントが起きたら、後ろに(擬似的に)要素を追加して、表示方法を決める」
という意味になります。
補足説明:CSSの擬似クラスと擬似要素
今回のCSSのサンプルで使った書き方「擬似クラス」と「擬似要素」について、簡単に説明しておきます。最後にリファレンスページへのリンクも示しましたので、興味のある人はリファレンスも見てみてください。
CSSの擬似クラスとは
擬似クラスは、HTMLの中の要素(例えば、ボタン)の、特定の状態(マウスオーバーされた、クリックされた…等)に、スタイルを適用するために使用されます。
今回のサンプルでも使っている:hover 擬似クラスは、ユーザーが要素の上にマウスカーソルを置いた時に、その要素にスタイルを適用するために使用されます。
他にも、:active、:focus、:visited などの擬似クラスがあり、要素がクリックされた状態、フォーカスされている状態、訪問済みのリンクなど、特定の状態に応じてスタイルを適用するために使われます。
CSSの擬似要素
擬似要素は、文書の特定の部分にスタイルを適用するために使用されますが、これらの部分は実際のDOM要素としては存在しません。
たとえば、今回のサンプルで使っている::after 擬似要素は、要素の内容の後に、仮想的なコンテンツを挿入して、そのコンテンツにスタイルを適用するために使用されます。
参考資料
CSS 擬似クラス
https://developer.mozilla.org/ja/docs/Web/CSS/Pseudo-classes
CSS 擬似要素
https://developer.mozilla.org/ja/docs/Web/CSS/Pseudo-elements