簡単なホバー処理をワンランク上質にする意識したい6つのこと

## はじめに
よくあるボタンなどのホバーアニメーションを
もう一段カッコよく、もう一段できるやつ風に...「あら、なんだか気が遣えていい感じね」と思わせたい。
そんな僕が普段頭の片隅で意識している6つのことを紹介します。

使い所を選ぶものもあり狙った通りの効果を生まない場面もありますので、
アイデアの1つと捉えていただくとちょうどいい内容です。

ぜひ今日から皆さんも意識しつつ、普段のホバーアニメーションのランクを上げる一助になればと思います。


### 透過は背景と混ざりすぎないように注意
一番多く実装されるやつですかね。
実装も簡単で、CSSのopacityプロパティを使うだけです。

背景が白や黒の単色の場合はあまり気にならないですが、
背景がボタンの補色であったり、
画像やグラデーションなど複雑なもので構成されている

そんな場合にボタンを透過すると、視認性が落ちまくりです。

透過させるボタンの背景に白もしくは黒の背景を追加することで、見た目を保つという方法をとります。
例は少し極端な色を背景にしていますが、ホバー領域がしっかり見やすく保ててよさそうですね。

<p class="codepen" data-height="300" data-default-tab="html,result" data-slug-hash="pvzPJZE" data-pen-title="背景透過" data-user="arichel-unt" style="height: 300px; box-sizing: border-box; display: flex; align-items: center; justify-content: center; border: 2px solid; margin: 1em 0; padding: 1em;">
  <span>See the Pen <a href="https://codepen.io/arichel-unt/pen/pvzPJZE">
  背景透過</a> by arichel-unt (<a href="https://codepen.io/arichel-unt">@arichel-unt</a>)
  on <a href="https://codepen.io">CodePen</a>.</span>
</p>


### テキストは透過させずに視認性を担保
さらにより視認性を高めるために、
ボタンの背景だけ透過させ、テキストは透過させないという方法もオススメです。

コントラスト比も意識しつつ、
どの部分をアニメーションさせるか意識して使うことで、より高品質なホバーアニメーションを目指しましょう。


<p class="codepen" data-height="300" data-default-tab="html,result" data-slug-hash="YPKVXgB" data-pen-title="背景透過&amp;amp;テキスト透過しない" data-user="arichel-unt" style="height: 300px; box-sizing: border-box; display: flex; align-items: center; justify-content: center; border: 2px solid; margin: 1em 0; padding: 1em;">
  <span>See the Pen <a href="https://codepen.io/arichel-unt/pen/YPKVXgB">
  背景透過&amp;テキスト透過しない</a> by arichel-unt (<a href="https://codepen.io/arichel-unt">@arichel-unt</a>)
  on <a href="https://codepen.io">CodePen</a>.</span>
</p>

### ホバー前後のスタイルを変える
ホバーした後のスタイルがホバーする前のスタイルと同じ場合、
アクティブ状態を知らせるのがアニメーション再生時しかないため不親切です。

ユーザーにボタンが反応していることを伝えるために重要ですので、
ホバーした前と後のスタイルは異なるようにすることをオススメします。

よくある矢印の例です。
矢印が帰ってくるアニメーションは簡単でかっこいいので好きですが、
元のスタイルと変化がわからなくなるので
やるなら違う箇所で差をつけたいところ。

<p class="codepen" data-height="300" data-default-tab="html,result" data-slug-hash="EaYmeqK" data-pen-title="ホバー前と後のスタイルを変える" data-user="arichel-unt" style="height: 300px; box-sizing: border-box; display: flex; align-items: center; justify-content: center; border: 2px solid; margin: 1em 0; padding: 1em;">
  <span>See the Pen <a href="https://codepen.io/arichel-unt/pen/EaYmeqK">
  ホバー前と後のスタイルを変える</a> by arichel-unt (<a href="https://codepen.io/arichel-unt">@arichel-unt</a>)
  on <a href="https://codepen.io">CodePen</a>.</span>
</p>
<script async src="https://public.codepenassets.com/embed/index.js"></script>

### ホバー範囲を縮めずガタガタ対策
ボタンに影が付いているデザインの時などは、scaleでボタンを縮めたくなりますよね。
ボタン押してます感があるのでとても素敵です。

ただホバー領域が縮まってしまうと、ボタンの端っこを狙っている時にホバーが外れてしまい、ガタガタと拡縮されるのがちょっとダサいかも。

例は赤枠が実際のボタンの領域です。「いい感じ！」のボタンは中身だけが縮小されている点に注目してください。
こちらの方がスムーズにホバーできるのでオススメです。

<p class="codepen" data-height="300" data-default-tab="html,result" data-slug-hash="RNbVWbz" data-pen-title="ホバー領域が縮まらないようにする" data-user="arichel-unt" style="height: 300px; box-sizing: border-box; display: flex; align-items: center; justify-content: center; border: 2px solid; margin: 1em 0; padding: 1em;">
  <span>See the Pen <a href="https://codepen.io/arichel-unt/pen/RNbVWbz">
  ホバー領域が縮まらないようにする</a> by arichel-unt (<a href="https://codepen.io/arichel-unt">@arichel-unt</a>)
  on <a href="https://codepen.io">CodePen</a>.</span>
</p>

### クリック範囲を広げる

スライダーのライブラリなどを使用しているとよく出現するこいつ。
ライブラリによってはクリックさせる気がないほど領域が狭いのでケアしたいところ。

擬似要素で領域を広げてあげるだけでもユーザビリティが向上するので、
積極的に見直してみてください。

<p class="codepen" data-height="300" data-default-tab="html,result" data-slug-hash="xbKdwYB" data-pen-title="クリック範囲を広げる" data-user="arichel-unt" style="height: 300px; box-sizing: border-box; display: flex; align-items: center; justify-content: center; border: 2px solid; margin: 1em 0; padding: 1em;">
  <span>See the Pen <a href="https://codepen.io/arichel-unt/pen/xbKdwYB">
  クリック範囲を広げる</a> by arichel-unt (<a href="https://codepen.io/arichel-unt">@arichel-unt</a>)
  on <a href="https://codepen.io">CodePen</a>.</span>
</p>
<script async src="https://public.codepenassets.com/embed/index.js"></script>

### マウスアウトも意識していきたい
アニメーションをワンランク上質にするためにはぜひ、ホバーが外れる時のアニメーションも重要視したいところ。

ホバー時とマウスアウト時のアニメーションは逆再生になると美しくないものもあります。

マウスアウトとはフォーカスから外れ、すでにユーザーの視線にはありません。
目についてしまうアニメーションを避け最小で元に戻ることを意識します。

例は、ホバー時よりマウスアウト時の方がtransitionの時間が0.1sほど短めにしています。
また、ボーダーのアニメーションも逆再生しないようにしました。

マウスアウト時は邪魔にならないように、を意識していくとよさそうですね。

<p class="codepen" data-height="300" data-default-tab="html,result" data-slug-hash="ByBRqNq" data-pen-title="マウスアウトを逆再生にしない" data-user="arichel-unt" style="height: 300px; box-sizing: border-box; display: flex; align-items: center; justify-content: center; border: 2px solid; margin: 1em 0; padding: 1em;">
  <span>See the Pen <a href="https://codepen.io/arichel-unt/pen/ByBRqNq">
  マウスアウトを逆再生にしない</a> by arichel-unt (<a href="https://codepen.io/arichel-unt">@arichel-unt</a>)
  on <a href="https://codepen.io">CodePen</a>.</span>
</p>
<script async src="https://public.codepenassets.com/embed/index.js"></script>
<script async src="https://production-assets.codepen.io/assets/embed/ei.js"></script>

## 終わりに
なんとも簡単な実装になりがちなボタンなどのホバーアニメーションですが、
簡単な実装からでも

もう一歩ユーザビリティを意識して
もう一歩かっこよさを意識して

そうしてこだわるとなかなか奥が深いものです。

欲張ると構造が複雑になってしまいがちですが、
JavaScriptを使わずともできる範囲で、よりご機嫌で上質な実装を目指したいですね。

ありちぇるでした。