フェードイン・フェードアウトで開閉するドロップダウンメニューの作り方
フェードイン・フェードアウトで開閉するドロップダウンメニューを作る方法を紹介します。このサンプルでは、ボタンをクリックするとメニューが上から少し移動しながらフェードインし、閉じるときはフェードアウトしながら非表示になります。HTML・CSS・JavaScriptだけで実装できるため、シンプルな構成で導入しやすく、さまざまなWebサイトへ応用できます。
管理画面の操作メニュー、会員サイトのアカウントメニュー、お問い合わせページのナビゲーション、ECサイトの商品カテゴリ一覧など、限られたスペースへ複数のリンクをまとめたい場面で活用できます。通常のドロップダウンメニューにアニメーションを追加することで、表示・非表示の切り替わりが分かりやすくなり、自然な操作感を実現できます。
ボタンの文字やメニュー項目はHTMLから変更でき、CSSでは背景色、文字色、角丸、余白、影、フェード時間などを調整できます。JavaScriptはクリック時の開閉処理だけを行うシンプルな構成のため、初心者でも内容を理解しやすく、スマートフォン・タブレット・PCで利用しやすいドロップダウンメニューとして活用できます。
免責事項 本コードの利用により発生した損害について、当サイトは一切の責任を負いません。
デモ
コードをコピーして使おう!
<!DOCTYPE html>
<html lang="ja">
<head>
<!-- 文字コード -->
<meta charset="UTF-8">
<!-- スマートフォン対応 -->
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<!-- ページタイトル -->
<title>フェードイン・フェードアウトで開閉するドロップダウンメニュー</title>
<!-- CSSファイル -->
<link rel="stylesheet" href="style.css">
</head>
<body>
<!-- ドロップダウンメニュー全体 -->
<div class="fade-in-dropdown-menu_wrap">
<!-- タイトル -->
<div class="fade-in-dropdown-menu_title">
フェードで開閉するドロップダウンメニュー
</div>
<!-- 説明文 -->
<p class="fade-in-dropdown-menu_text">
ボタンをクリックすると、フェードイン・フェードアウトしながらメニューを開閉できます。
</p>
<!-- メニュー全体 -->
<div class="fade-in-dropdown-menu_box">
<!-- 開閉ボタン -->
<button
class="fade-in-dropdown-menu_button"
id="fade-in-dropdown-menu-button"
type="button">
メニュー
</button>
<!-- メニュー項目 -->
<div
class="fade-in-dropdown-menu_panel"
id="fade-in-dropdown-menu-panel">
<a href="#">ホーム</a>
<a href="#">サービス</a>
<a href="#">料金</a>
<a href="#">お問い合わせ</a>
</div>
</div>
</div>
<!-- JavaScriptファイル -->
<script src="script.js"></script>
</body>
</html>
サンプル一式を取得する場合 HTML・CSSなどすべてのファイルが必要な場合は、「サンプル一式をダウンロード」をクリックしてください。
Q ダウンロードしたけど、これをネット上で動かすにはどうするの?
Googleアカウントがあれば、InfinityFreeで無料サーバーを作成して、ダウンロードしたサンプルをネット上で動かせます。
InfinityFreeを初めて利用する場合は①から、すでにサーバーを作成している場合は②へ進んでください。
ファイル構成と設置方法
このサンプルはHTML・CSS・JavaScriptの3ファイルで構成されています。HTMLでは開閉ボタンとドロップダウンメニューの項目を作成し、CSSではメニュー全体のデザインとフェードイン・フェードアウトのアニメーションを設定します。JavaScriptでは「メニュー」ボタンをクリックしたときにis-activeクラスを付け外しし、メニューの表示・非表示を切り替えます。外部ライブラリは使用せず、HTML・CSS・バニラJavaScriptだけで動作します。
sample/
├── index.html
├── style.css
└── script.js
各ファイルの役割
index.htmlはドロップダウンメニュー全体を構成するファイルです。「フェードで開閉するドロップダウンメニュー」のタイトル、説明文、「メニュー」の開閉ボタン、「ホーム」「サービス」「料金」「お問い合わせ」のメニュー項目を配置しています。ボタン名、メニュー項目の文字、リンク先はこのファイルから変更できます。
style.cssはドロップダウンメニューのデザインとフェードアニメーションを設定するファイルです。全体の横幅や余白、ボタンの色、メニューの表示位置、角丸、影などを指定しています。閉じた状態ではopacity:0とvisibility:hiddenでメニューを非表示にし、transform:translateY(-10px)で少し上へ移動させています。is-activeクラスが付くとopacity:1、visibility:visible、transform:translateY(0)へ変化し、フェードインしながら表示されます。
script.jsはドロップダウンメニューを開閉するファイルです。fade-in-dropdown-menu-buttonとfade-in-dropdown-menu-panelのIDから対象要素を取得し、ボタンをクリックするたびにメニューへis-activeクラスを付け外しします。
設置方法・使い方
sampleフォルダへindex.html、style.css、script.jsを配置します。3つのファイルを同じ階層へ保存してください。index.htmlからstyle.cssとscript.jsを読み込む構成になっているため、ファイル名や配置場所を変更する場合はindex.htmlの読み込み先も合わせて変更します。
ファイルを配置したあと、sample/index.htmlをブラウザで開きます。「メニュー」ボタンをクリックすると、メニューが少し上の位置からフェードインしながら表示されます。もう一度クリックするとフェードアウトしながら非表示になります。実際に使用する場合は、index.htmlにある各href="#"を移動先のURLへ変更してください。
カスタマイズできる内容
index.htmlではタイトル、説明文、開閉ボタンの文字、メニュー項目、リンク先を変更できます。メニュー項目を追加する場合は、fade-in-dropdown-menu_panel内へ既存のa要素と同じ形式でリンクを追加します。
style.cssでは全体の最大横幅、余白、背景色、文字色、ボタンの色、ボタンとメニューの横幅、角丸、影、メニューの表示位置、フェード時の移動距離、アニメーション時間を変更できます。また、メニュー項目へマウスを乗せたときの背景色と文字色も変更できます。
script.jsでは開閉対象となる要素をIDで取得しています。HTML側のfade-in-dropdown-menu-buttonまたはfade-in-dropdown-menu-panelを変更する場合は、script.js側のIDも同じ名前へ変更してください。
数値調整
style.css
padding:40px 20px;
ページ全体の余白です。40pxが上下、20pxが左右の余白です。値を大きくすると画面端との間隔が広がります。
max-width:700px;
ドロップダウンメニュー全体の最大横幅です。値を大きくすると全体が横に広がり、小さくするとコンパクトになります。
margin:40px auto;
全体の上下余白です。40pxを大きくすると上下の間隔が広がります。autoによって左右中央へ配置しています。
padding:32px;
全体の内側余白です。値を大きくすると内容と外枠の間隔が広がり、小さくすると狭くなります。
border-radius:18px;
全体を囲む外枠の角丸です。値を大きくすると丸みが強くなり、0にすると四角になります。
font-size:22px;
タイトルの文字サイズです。値を大きくするとタイトルが大きく表示されます。
margin-bottom:12px;
タイトルと説明文の間隔です。値を大きくすると間隔が広がります。
margin-bottom:24px;
説明文と開閉ボタンの間隔です。値を大きくすると上下の間隔が広がります。
line-height:1.8;
説明文の行間です。値を大きくすると行間が広がります。
width:240px;
開閉ボタンとドロップダウンメニューの横幅です。値を大きくすると両方が横に広がり、小さくすると狭くなります。
padding:14px;
開閉ボタンの内側余白です。値を大きくするとボタンが高く表示されます。
border-radius:12px;
開閉ボタンとドロップダウンメニューの角丸です。値を大きくすると丸みが強くなります。
font-size:15px;
開閉ボタンの文字サイズです。値を大きくすると「メニュー」の文字が大きくなります。
top:58px;
開閉ボタンを基準としたドロップダウンメニューの表示位置です。値を大きくするとメニューが下へ移動し、小さくするとボタンへ近づきます。
padding:8px 0;
ドロップダウンメニューの上下の内側余白です。8pxを大きくすると最初と最後のメニュー項目と外枠の間隔が広がります。
box-shadow:0 16px 32px ...
ドロップダウンメニューの影です。16pxは下方向の位置、32pxはぼかしの大きさです。値を変更すると影の位置や広がりを調整できます。
transform:translateY(-10px);
閉じた状態でのメニュー位置です。通常位置より10px上からフェードインします。10pxの絶対値を大きくすると移動距離が長くなり、小さくするとフェード中心の動きになります。
transition:.35s;
フェードイン・フェードアウトと位置移動のアニメーション時間です。0.35秒で切り替わります。値を大きくするとゆっくり、小さくすると速くなります。
padding:12px 18px;
各メニュー項目の内側余白です。12pxが上下、18pxが左右の余白です。値を大きくすると各項目のクリックできる範囲が広がります。
レスポンシブ対応
このサンプルはレスポンシブ対応です。style.cssではドロップダウンメニュー全体にmax-width:700pxを設定し、画面幅に合わせて表示できる構成にしています。また、画面幅640px以下ではメディアクエリによってpadding:24px 18px;へ変更し、スマートフォンで全体の内側余白が広くなりすぎないよう調整しています。スマートフォン・タブレット・PCで利用できます。
コメント