
共通メニューアニメーション効果を実装したい……



いろんなメニューで使える汎用的な効果を作りたい……
今回はこのようなお悩みをお持ちの方へ向けて
Web制作において人気の高いアニメーション効果
共通メニューアニメーション効果
をご紹介します。
- ホバー効果(マウスオーバー時の変化)
- フォーカス効果(キーボード操作時の変化)
- アクティブ効果(クリック時の変化)
- トランジション効果(状態変化時の変化)



特に様々なメニューで汎用的に使用できる共通メニューアニメーション効果は、Web制作の効率化に非常に効果的です。この記事のコードをご活用いただきWeb制作の効率化に繋がれば何よりです。
なお、今回ご紹介するアニメーションはCSSとJavaScriptを組み合わせて実装するので、より高度で魅力的なインタラクションを実現できます。
あわせて読みたい
共通メニューアニメーション効果とは
共通メニューアニメーション効果は、様々なメニューで汎用的に使用できる視覚的な効果です。ユーザーの注目を集め、スムーズなインタラクションを提供するための手法です。
効果的な使用場面
適している場面
- 様々なメニューでの汎用使用
- 統一感のあるデザイン
- 効率的なWeb制作
- 一貫性のあるユーザー体験
- 再利用可能なコンポーネント
避けるべき場面
- 特定のメニューに特化した効果
- 過度に複雑なアニメーション
- アクセシビリティを重視する場面
- 過度に使用した場合
実装方法の比較
アニメーション | 難易度 | 視覚的インパクト | パフォーマンス | ブラウザ対応 |
---|---|---|---|---|
ホバー効果 | ⭐⭐ | ⭐⭐⭐ | ⭐⭐⭐⭐ | ⭐⭐⭐⭐⭐ |
フォーカス効果 | ⭐⭐ | ⭐⭐⭐ | ⭐⭐⭐⭐ | ⭐⭐⭐⭐⭐ |
アクティブ効果 | ⭐⭐ | ⭐⭐⭐ | ⭐⭐⭐⭐ | ⭐⭐⭐⭐⭐ |
トランジション効果 | ⭐⭐ | ⭐⭐⭐ | ⭐⭐⭐⭐ | ⭐⭐⭐⭐⭐ |
ホバー効果
① デモ
See the Pen 共通メニューホバー by ケケンタ (@lgshifbg-the-looper) on CodePen.
- マウスオーバー時の変化
- スムーズな効果
- 視覚的インパクト中
- 直感的な印象
② HTML
<nav class="menu-container">
<ul class="menu-list">
<li class="menu-item">
<a href="#" class="menu-link hover-effect">
<span class="menu-text">ホーム</span>
<span class="menu-icon">🏠</span>
</a>
</li>
<li class="menu-item">
<a href="#" class="menu-link hover-effect">
<span class="menu-text">サービス</span>
<span class="menu-icon">⚙️</span>
</a>
</li>
<li class="menu-item">
<a href="#" class="menu-link hover-effect">
<span class="menu-text">会社概要</span>
<span class="menu-icon">🏢</span>
</a>
</li>
<li class="menu-item">
<a href="#" class="menu-link hover-effect">
<span class="menu-text">お問い合わせ</span>
<span class="menu-icon">📧</span>
</a>
</li>
</ul>
</nav>
③ CSS
* {
margin: 0;
padding: 0;
box-sizing: border-box;
}
body {
font-family: 'Arial', sans-serif;
background: #f8f9fa;
padding: 50px 20px;
}
.menu-container {
max-width: 600px;
margin: 0 auto;
background: white;
border-radius: 12px;
box-shadow: 0 4px 20px rgba(0, 0, 0, 0.1);
overflow: hidden;
}
.menu-list {
list-style: none;
}
.menu-item {
border-bottom: 1px solid #f0f0f0;
}
.menu-item:last-child {
border-bottom: none;
}
.menu-link {
display: flex;
justify-content: space-between;
align-items: center;
padding: 20px 30px;
color: #333;
text-decoration: none;
font-weight: 500;
font-size: 16px;
transition: all 0.3s cubic-bezier(0.4, 0, 0.2, 1);
position: relative;
overflow: hidden;
}
.menu-link::before {
content: '';
position: absolute;
top: 0;
left: -100%;
width: 100%;
height: 100%;
background: linear-gradient(90deg, transparent, rgba(102, 126, 234, 0.1), transparent);
transition: left 0.5s ease;
}
.menu-link:hover::before {
left: 100%;
}
.menu-link:hover {
background: linear-gradient(135deg, #667eea 0%, #764ba2 100%);
color: white;
transform: translateX(10px);
box-shadow: 0 4px 15px rgba(102, 126, 234, 0.3);
}
.menu-text {
position: relative;
z-index: 1;
}
.menu-icon {
position: relative;
z-index: 1;
font-size: 20px;
transition: transform 0.3s ease;
}
.menu-link:hover .menu-icon {
transform: scale(1.2) rotate(5deg);
}
④ カスタマイズ例
/* ホバー速度の変更 */
.menu-link {
transition: all 0.5s cubic-bezier(0.4, 0, 0.2, 1);
}
/* ホバー方向の変更 */
.menu-link:hover {
transform: translateY(-5px);
}
/* ホバー色の変更 */
.menu-link:hover {
background: linear-gradient(135deg, #ff6b6b 0%, #ee5a24 100%);
}
フォーカス効果
① デモ
See the Pen 共通メニューフォーカス by ケケンタ (@lgshifbg-the-looper) on CodePen.
- キーボード操作時の変化
- アクセシビリティ重視
- 視覚的インパクト小
- 実用的な印象
② HTML
<nav class="menu-container">
<ul class="menu-list">
<li class="menu-item">
<a href="#" class="menu-link focus-effect" tabindex="0">
<span class="menu-text">ホーム</span>
<span class="menu-icon">🏠</span>
</a>
</li>
<li class="menu-item">
<a href="#" class="menu-link focus-effect" tabindex="0">
<span class="menu-text">サービス</span>
<span class="menu-icon">⚙️</span>
</a>
</li>
<li class="menu-item">
<a href="#" class="menu-link focus-effect" tabindex="0">
<span class="menu-text">会社概要</span>
<span class="menu-icon">🏢</span>
</a>
</li>
<li class="menu-item">
<a href="#" class="menu-link focus-effect" tabindex="0">
<span class="menu-text">お問い合わせ</span>
<span class="menu-icon">📧</span>
</a>
</li>
</ul>
</nav>
③ CSS
* {
margin: 0;
padding: 0;
box-sizing: border-box;
}
body {
font-family: 'Arial', sans-serif;
background: #f8f9fa;
padding: 50px 20px;
}
.menu-container {
max-width: 600px;
margin: 0 auto;
background: white;
border-radius: 12px;
box-shadow: 0 4px 20px rgba(0, 0, 0, 0.1);
overflow: hidden;
}
.menu-list {
list-style: none;
}
.menu-item {
border-bottom: 1px solid #f0f0f0;
}
.menu-item:last-child {
border-bottom: none;
}
.menu-link {
display: flex;
justify-content: space-between;
align-items: center;
padding: 20px 30px;
color: #333;
text-decoration: none;
font-weight: 500;
font-size: 16px;
transition: all 0.3s ease;
position: relative;
outline: none;
}
.menu-link:focus {
background: linear-gradient(135deg, #667eea 0%, #764ba2 100%);
color: white;
box-shadow: 0 0 0 3px rgba(102, 126, 234, 0.3), 0 4px 15px rgba(102, 126, 234, 0.2);
transform: scale(1.02);
}
.menu-link:focus .menu-icon {
transform: scale(1.1);
transition: transform 0.3s ease;
}
.menu-text {
position: relative;
z-index: 1;
}
.menu-icon {
position: relative;
z-index: 1;
font-size: 20px;
transition: transform 0.3s ease;
}
/* フォーカスインジケーター */
.menu-link::after {
content: '';
position: absolute;
top: 0;
left: 0;
right: 0;
bottom: 0;
border: 2px solid transparent;
border-radius: 0;
transition: all 0.3s ease;
pointer-events: none;
}
.menu-link:focus::after {
border-color: rgba(255, 255, 255, 0.5);
border-radius: 4px;
}
④ カスタマイズ例
/* フォーカス速度の変更 */
.menu-link {
transition: all 0.5s ease;
}
/* フォーカス色の変更 */
.menu-link:focus {
background: linear-gradient(135deg, #ff6b6b 0%, #ee5a24 100%);
}
/* フォーカス効果の変更 */
.menu-link:focus {
transform: scale(1.05) translateY(-2px);
}
アクティブ効果
① デモ
See the Pen 共通メニューアクティブ by ケケンタ (@lgshifbg-the-looper) on CodePen.
- クリック時の変化
- 即座の反応
- 視覚的インパクト大
- インタラクティブな印象
② HTML
<nav class="menu-container">
<ul class="menu-list">
<li class="menu-item">
<a href="#" class="menu-link active-effect">
<span class="menu-text">ホーム</span>
<span class="menu-icon">🏠</span>
</a>
</li>
<li class="menu-item">
<a href="#" class="menu-link active-effect">
<span class="menu-text">サービス</span>
<span class="menu-icon">⚙️</span>
</a>
</li>
<li class="menu-item">
<a href="#" class="menu-link active-effect">
<span class="menu-text">会社概要</span>
<span class="menu-icon">🏢</span>
</a>
</li>
<li class="menu-item">
<a href="#" class="menu-link active-effect">
<span class="menu-text">お問い合わせ</span>
<span class="menu-icon">📧</span>
</a>
</li>
</ul>
</nav>
③ CSS
* {
margin: 0;
padding: 0;
box-sizing: border-box;
}
body {
font-family: 'Arial', sans-serif;
background: #f8f9fa;
padding: 50px 20px;
}
.menu-container {
max-width: 600px;
margin: 0 auto;
background: white;
border-radius: 12px;
box-shadow: 0 4px 20px rgba(0, 0, 0, 0.1);
overflow: hidden;
}
.menu-list {
list-style: none;
}
.menu-item {
border-bottom: 1px solid #f0f0f0;
}
.menu-item:last-child {
border-bottom: none;
}
.menu-link {
display: flex;
justify-content: space-between;
align-items: center;
padding: 20px 30px;
color: #333;
text-decoration: none;
font-weight: 500;
font-size: 16px;
transition: all 0.1s ease;
position: relative;
overflow: hidden;
}
.menu-link:active {
background: linear-gradient(135deg, #667eea 0%, #764ba2 100%);
color: white;
transform: scale(0.98);
box-shadow: inset 0 2px 10px rgba(0, 0, 0, 0.2);
}
.menu-link:active::before {
content: '';
position: absolute;
top: 50%;
left: 50%;
width: 0;
height: 0;
background: rgba(255, 255, 255, 0.3);
border-radius: 50%;
transform: translate(-50%, -50%);
animation: ripple 0.6s ease-out;
}
@keyframes ripple {
0% {
width: 0;
height: 0;
opacity: 1;
}
100% {
width: 300px;
height: 300px;
opacity: 0;
}
}
.menu-text {
position: relative;
z-index: 1;
}
.menu-icon {
position: relative;
z-index: 1;
font-size: 20px;
transition: transform 0.1s ease;
}
.menu-link:active .menu-icon {
transform: scale(0.9);
}
④ カスタマイズ例
/* アクティブ速度の変更 */
.menu-link {
transition: all 0.2s ease;
}
/* アクティブ色の変更 */
.menu-link:active {
background: linear-gradient(135deg, #ff6b6b 0%, #ee5a24 100%);
}
/* アクティブ効果の変更 */
.menu-link:active {
transform: scale(0.95) translateY(2px);
}
トランジション効果
① デモ
See the Pen 共通メニュートランジション by ケケンタ (@lgshifbg-the-looper) on CodePen.
- 状態変化時の変化
- スムーズな効果
- 視覚的インパクト中
- 洗練された印象
② HTML
<nav class="menu-container">
<ul class="menu-list">
<li class="menu-item">
<a href="#" class="menu-link transition-effect">
<span class="menu-text">ホーム</span>
<span class="menu-icon">🏠</span>
<span class="transition-line"></span>
</a>
</li>
<li class="menu-item">
<a href="#" class="menu-link transition-effect">
<span class="menu-text">サービス</span>
<span class="menu-icon">⚙️</span>
<span class="transition-line"></span>
</a>
</li>
<li class="menu-item">
<a href="#" class="menu-link transition-effect">
<span class="menu-text">会社概要</span>
<span class="menu-icon">🏢</span>
<span class="transition-line"></span>
</a>
</li>
<li class="menu-item">
<a href="#" class="menu-link transition-effect">
<span class="menu-text">お問い合わせ</span>
<span class="menu-icon">📧</span>
<span class="transition-line"></span>
</a>
</li>
</ul>
</nav>
③ CSS
* {
margin: 0;
padding: 0;
box-sizing: border-box;
}
body {
font-family: 'Arial', sans-serif;
background: #f8f9fa;
padding: 50px 20px;
}
.menu-container {
max-width: 600px;
margin: 0 auto;
background: white;
border-radius: 12px;
box-shadow: 0 4px 20px rgba(0, 0, 0, 0.1);
overflow: hidden;
}
.menu-list {
list-style: none;
}
.menu-item {
border-bottom: 1px solid #f0f0f0;
}
.menu-item:last-child {
border-bottom: none;
}
.menu-link {
display: flex;
justify-content: space-between;
align-items: center;
padding: 20px 30px;
color: #333;
text-decoration: none;
font-weight: 500;
font-size: 16px;
transition: all 0.4s cubic-bezier(0.4, 0, 0.2, 1);
position: relative;
overflow: hidden;
}
.menu-link:hover {
background: linear-gradient(135deg, #667eea 0%, #764ba2 100%);
color: white;
transform: translateX(10px);
}
.menu-text {
position: relative;
z-index: 1;
transition: transform 0.3s ease;
}
.menu-link:hover .menu-text {
transform: translateX(5px);
}
.menu-icon {
position: relative;
z-index: 1;
font-size: 20px;
transition: all 0.3s ease;
}
.menu-link:hover .menu-icon {
transform: scale(1.2) rotate(10deg);
}
.transition-line {
position: absolute;
bottom: 0;
left: 0;
width: 0;
height: 3px;
background: linear-gradient(90deg, #667eea, #764ba2);
transition: width 0.4s cubic-bezier(0.4, 0, 0.2, 1);
}
.menu-link:hover .transition-line {
width: 100%;
}
/* 追加のトランジション効果 */
.menu-link::before {
content: '';
position: absolute;
top: 0;
left: -100%;
width: 100%;
height: 100%;
background: linear-gradient(90deg, transparent, rgba(255, 255, 255, 0.1), transparent);
transition: left 0.6s ease;
}
.menu-link:hover::before {
left: 100%;
}
④ カスタマイズ例
/* トランジション速度の変更 */
.menu-link {
transition: all 0.6s cubic-bezier(0.4, 0, 0.2, 1);
}
/* トランジション方向の変更 */
.menu-link:hover {
transform: translateY(-5px);
}
/* トランジション色の変更 */
.transition-line {
background: linear-gradient(90deg, #ff6b6b, #ee5a24);
}
まとめ
今回ご紹介した共通メニューアニメーション効果は、Webサイトのユーザーエクスペリエンスを向上させる重要な要素です。
実装のコツ
- 適切なアニメーション時間(300ms〜500ms)
- スムーズなイージング関数の使用
- アクセシビリティの配慮
- パフォーマンスの最適化
- 一貫性のあるデザイン
避けるべきポイント
- 過度に複雑なアニメーション
- 長すぎるアニメーション時間
- 読みにくい色の組み合わせ
- パフォーマンスを考慮しない実装
- 過度な使用
おすすめの組み合わせ
- 汎用メニュー: ホバー効果、トランジション効果
- アクセシビリティ重視: フォーカス効果、アクティブ効果
- モダンなUI: トランジション効果、ホバー効果



特に様々なメニューで汎用的に使用できる共通メニューアニメーション効果は、Web制作の効率化に大きく貢献します。この記事のコードをご活用いただき、より魅力的なWebサイトの制作に繋がれば何よりです。
あわせて読みたい
もっと効率的にWeb制作を学びたい方へ
Web制作の学習は楽しいものですが、一人で進めていると「これで合っているのかな?」と不安になることもありますよね。
僕も独学でWeb制作を学んできましたが、今思うと「もっと早く知りたかった」と思うことがたくさんあります。
特に以下のような方は、一度プログラミングスクールの利用を検討してみることをおすすめします。
- 学習の方向性に迷いがある方
- 効率的にスキルを身につけたい方
- 転職や副業でWeb制作を活用したい方
- 挫折経験がある方
忍者CODEなら、業界最安値で24時間サポート付きの学習環境が整っています。


コメント