2025 07 . 16 WED
【2025年版】CSSのみでドロップダウンメニューを作る方法|JavaScript不要で簡単実装
Web開発・フロントエンド

【2025年版】CSSのみでドロップダウンメニューを作る方法|JavaScript不要で簡単実装

2025.07.12

このサイトはアフィリエイト広告を利用しています。

はじめに

こんにちは。Webサイトのナビゲーションを作っていると、「ドロップダウンメニューってJavaScriptがないと作れないのかな?」と思われる方も多いのではないでしょうか。

実は、CSSだけでも十分実用的なドロップダウンメニューを作ることができるんです。私も以前はJavaScriptに頼りがちでしたが、CSSの疑似クラスを活用することで、軽量で動作の安定したメニューが実現できることがわかりました。

この記事では、CSSのみを使ったドロップダウンメニューの実装方法を、基本形からレスポンシブ対応まで段階的にご紹介します。よろしければ、ご覧ください。

基本的なドロップダウンメニューの実装

まずは、最もシンプルなドロップダウンメニューから始めましょう。ここでは:hover疑似クラスを使って、マウスをホバーした時にサブメニューが表示される仕組みを作ります。

基本的なドロップダウンメニュー

実行結果

💪 ポイント

position: relativeを親要素に、position: absoluteを子要素に設定することで、ドロップダウンの位置を正確にコントロールできます。また、opacitytransformを組み合わせることで、なめらかなアニメーション効果を実現しています。

HTML構造のポイント

ドロップダウンメニューの実装では、HTML構造がとても重要です。以下の点を意識してマークアップしましょう:

要素役割重要なポイント
.menuメインメニューの容器display: flexで横並びに配置
.menu-item各メニュー項目position: relativeでドロップダウンの基準点に
.has-dropdownドロップダウンを持つ項目クラス名で明確に識別
.dropdownサブメニューの容器position: absoluteで配置
柴犬アイコン

実際に作ってみると、position の設定が一番つまずきやすいポイントなんです。親要素に relative、子要素に absolute を忘れずに!

アニメーション効果を追加した応用版

基本形ができたら、より洗練されたアニメーション効果を追加してみましょう。ここではCSS Transitionsを活用して、ユーザビリティの高いメニューを作成します。

アニメーション効果付きドロップダウンメニュー

実行結果

アニメーションのテクニック

この応用版では、以下のテクニックを使って、より魅力的なユーザー体験を実現しています:

  1. cubic-bezier関数:カスタムイージング効果で自然な動き
  2. transform: scale():表示時に少し拡大することで注目度アップ
  3. 矢印の回転:視覚的なフィードバックでユーザビリティ向上

    💡 ブラウザ対応について

    CSS Transitionsは現在のモダンブラウザでは安定してサポートされています。Internet Explorer 11以降であれば問題なく動作します。

アクセシビリティの配慮

優れたドロップダウンメニューは、すべてのユーザーが使いやすいものでなければなりません。ここでは、アクセシビリティの観点から配慮すべきポイントをご紹介します。

WAI-ARIA属性の追加

<nav class="navbar" role="navigation" aria-label="メインナビゲーション">
<ul class="menu">
<li class="menu-item has-dropdown">
<a href="#" class="menu-link" aria-haspopup="true" aria-expanded="false">
サービス
</a>
<ul class="dropdown" role="menu">
<li role="none">
<a href="#" class="dropdown-link" role="menuitem">Webデザイン</a>
</li>
<li role="none">
<a href="#" class="dropdown-link" role="menuitem">システム開発</a>
</li>
</ul>
</li>
</ul>
</nav>

キーボード操作への対応

/* フォーカス時のスタイル */
.menu-link:focus,
.dropdown-link:focus {
outline: 2px solid #007acc;
outline-offset: 2px;
background-color: #f0f8ff;
}
/* フォーカス時にもドロップダウンを表示 */
.has-dropdown:focus-within .dropdown {
opacity: 1;
visibility: visible;
transform: translateY(0);
}
柴犬アイコン

アクセシビリティを意識すると、結果的にすべてのユーザーにとって使いやすいUIになるんです!

よくある質問

CSSだけでドロップダウンメニューを作るメリットは何ですか?

主なメリットは軽量性と安定性です。JavaScriptが不要なため、ページの読み込み速度が向上し、スクリプトエラーの心配もありません。また、ブラウザの互換性も高く、古いブラウザでも安定して動作します。

ドロップダウンメニューが他の要素の下に隠れてしまいます

z-indexプロパティを適切に設定する必要があります。ドロップダウンメニューには z-index: 1000; など、十分に大きな値を設定してください。また、親要素のpositionプロパティがstaticでないことも確認しましょう。

アニメーション効果が重い場合の対処法は?

アニメーションが重い場合は、transform と opacity のみを使用することをお勧めします。これらのプロパティはGPUアクセラレーションが効き、滑らかなアニメーションが実現できます。widthやheightのアニメーションは避けるのが賢明です。

SEO的にドロップダウンメニューの影響はありますか?

適切にマークアップされたドロップダウンメニューは、SEOに悪影響を与えることはありません。むしろ、構造化されたナビゲーションとして検索エンジンに評価される可能性があります。nav要素やaria属性を適切に使用することが重要です。

まとめ

CSSのみでドロップダウンメニューを実装する方法について、基本形から応用版、レスポンシブ対応まで幅広くご紹介しました。

重要なポイントをまとめると:

  • 基本実装::hover疑似クラスとpositionプロパティの組み合わせ
  • アニメーション:transformとopacityを使った軽量な演出
  • アクセシビリティ:すべてのユーザーが使いやすい設計

私自身、最初はJavaScriptに頼りがちでしたが、CSSだけでもこれだけ多機能なメニューが作れることに驚きました。軽量で安定したナビゲーションは、ユーザー体験の向上に大きく貢献します。

この記事が、ドロップダウンメニュー実装の参考になれば嬉しいです。

公式リソース(Official Resources)

著者アイコン
コッチ フロントエンドエンジニア

フロントエンドエンジニア歴10年。コロナ禍を機にフル在宅ワークへ移行。Web開発の知見を活かし、AI活用法や仕事が捗るガジェットについて発信しています。柴犬が好きです。