ドロップダウンメニューを開いた時の背景をぼかしたり暗くしたりする方法

ドロップダウンメニュー
無料ツール
ドロップダウンメニューを自由に作成

ボタン・メニュー項目・サイズ・色・余白・枠線などを設定して、HTML・CSS・JavaScriptを自動生成できます。

ドロップダウンメニュー作成ツールを使う
新しいタブで開きます

ドロップダウンメニューを開いたときに、背景をぼかしたり暗くしたりする方法を紹介します。メニューの背後に半透明のレイヤー(オーバーレイ)を重ねることで、背景の見え方を変え、開いているメニューを目立たせることができます。

今回は「背景をぼかす」「背景を暗くする」の2種類を比較します。背景をぼかすタイプでは、背後にある文字やカードの輪郭がぼやけ、内容が読み取りにくくなります。一方、背景を暗くするタイプでは、半透明の黒いレイヤーによって背景全体が薄暗くなります。どちらもメニュー本体には効果を適用せず、文字やリンクをはっきり表示します。

デモでは、2種類のドロップダウンメニューを縦に配置しています。それぞれの「メニューを開く」ボタンをクリックすると、メニューの表示と同時に背景の見え方が変化します。もう一度ボタンをクリックするか、メニューの外側をクリックすると閉じ、背景も元の状態に戻ります。Escキーでも閉じることができます。

オーバーレイにはCSSのbackdrop-filterによるぼかし効果と、半透明の背景色による暗転効果を使用しています。ぼかしの強さや背景の暗さはCSSの数値で調整でき、具体的な変更方法は「ファイル構成と設置方法」で説明します。

デモ

①はメニューを開くと背景の文字やカードがぼかされ、②は背景全体が半透明の黒で暗くなります。どちらもメニュー自体は通常の明るさで表示されます。メニューの外側をクリックするか、Escキーを押すと閉じます。背景の変化は、それぞれのデモ領域内で確認できます。

コードをコピーして使おう!

① 背景をぼかすドロップダウンメニュー

<!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>

  <!--
    【ぼかし効果の確認用テキスト】
    以下のp要素は動作確認用です。
    実際のサイトへ設置する際は、このコメントから
    「確認用テキストここまで」までを削除してください。
  -->
  <p style="margin: 180px auto 0; text-align: center; font-size: 48px; font-weight: 700; color: #111827;">
    ぼかし効果の確認用テキスト
  </p>
  <!-- 確認用テキストここまで -->

  <!-- 背景をぼかすオーバーレイ -->
  <div class="dropdown-background-effects-blur_overlay" aria-hidden="true"></div>

  <!-- ドロップダウンメニュー全体 -->
  <div class="dropdown-background-effects-blur_wrap">

    <!-- メニューを開閉するボタン -->
    <button
      class="dropdown-background-effects-blur_button"
      type="button"
      aria-expanded="false"
      aria-controls="dropdown-background-effects-blur-menu"
    >
      メニューを開く
      <span class="dropdown-background-effects-blur_arrow" aria-hidden="true">▼</span>
    </button>

    <!-- ドロップダウンメニュー -->
    <ul
      class="dropdown-background-effects-blur_menu"
      id="dropdown-background-effects-blur-menu"
      hidden
    >
      <!-- hrefには設置先に合わせたリンク先を指定してください -->
      <li><a href="#home">ホーム</a></li>
      <li><a href="#profile">プロフィール</a></li>
      <li><a href="#contact">お問い合わせ</a></li>
    </ul>

  </div>

  <!-- ドロップダウンメニューの開閉処理を読み込む -->
  <script src="script.js"></script>
</body>
</html>

② 背景を暗くするドロップダウンメニュー

<!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="dropdown-background-effects-dark_overlay" aria-hidden="true"></div>

  <!-- ドロップダウンメニュー全体 -->
  <div class="dropdown-background-effects-dark_wrap">

    <!-- メニューを開閉するボタン -->
    <button
      class="dropdown-background-effects-dark_button"
      type="button"
      aria-expanded="false"
      aria-controls="dropdown-background-effects-dark-menu"
    >
      メニューを開く
      <span class="dropdown-background-effects-dark_arrow" aria-hidden="true">▼</span>
    </button>

    <!-- ドロップダウンメニュー -->
    <ul
      class="dropdown-background-effects-dark_menu"
      id="dropdown-background-effects-dark-menu"
      hidden
    >
      <!-- hrefには設置先に合わせたリンク先を指定してください -->
      <li><a href="#home">ホーム</a></li>
      <li><a href="#profile">プロフィール</a></li>
      <li><a href="#contact">お問い合わせ</a></li>
    </ul>

  </div>

  <!-- ドロップダウンメニューの開閉処理を読み込む -->
  <script src="script.js"></script>
</body>
</html>
コードについて 本記事のコードはサンプルコードです。ご利用前に必ず動作確認を行ってください。 免責事項 本コードの利用により発生した損害について、当サイトは一切の責任を負いません。

コードをコピーする場合 使用するコードのタブを選び、「このタブをコピー」をクリックすると、現在表示中のコードをコピーできます。 サンプル一式を取得する場合 HTML・CSSなどすべてのファイルが必要な場合は、「サンプル一式をダウンロード」をクリックしてください。
Q ダウンロードしたけど、これをネット上で動かすにはどうするの?
A

Googleアカウントがあれば、InfinityFreeで無料サーバーを作成して、ダウンロードしたサンプルをネット上で動かせます。

InfinityFreeを初めて利用する場合は①から、すでにサーバーを作成している場合は②へ進んでください。

ファイル構成と設置方法

このサンプルでは、ドロップダウンメニューを開いたときに、ブラウザ画面全体へオーバーレイを表示します。 「背景をぼかす」と「背景を暗くする」の2種類を用意しており、それぞれ独立したHTML・CSS・JavaScriptの3ファイルで動作します。 目的に合うコードカードからサンプル一式をダウンロードしてください。 2種類を同時に設置する必要はありません。

sample/
├── index.html
├── style.css
└── script.js

各ファイルの役割
index.htmlには、背景用のオーバーレイ、メニュー開閉ボタン、リンク一覧を記述しています。 style.cssでは、オーバーレイの表示効果、メニューの配置、ボタンやリンクのデザインを設定します。 script.jsは、ボタン操作に応じたメニューの開閉とオーバーレイの表示・非表示を制御します。 2種類ともファイル名と構成は共通ですが、CSSの背景効果とHTML・JavaScriptのクラス名が異なります。

設置方法・使い方
使用したいコードカードの「サンプル一式をダウンロード」をクリックし、ZIPファイルを展開してください。 生成されるsampleフォルダ内の3ファイルを同じ階層に配置したまま、index.htmlをブラウザで開くと動作を確認できます。 Webサイトへ組み込む場合は、HTML本体を設置先のページへ配置し、CSSとJavaScriptを読み込んでください。 メニューのリンク先は、index.htmlにある各a要素のhref属性を実際のURLやページ内IDへ変更します。 「メニューを開く」をクリックすると背景効果が表示され、もう一度クリックするか、背景をクリックすると閉じます。 Escキーでも閉じることができます。 なお、ぼかし効果の確認用テキストは動作確認のために追加した要素なので、実際のサイトへ設置する際は、HTML内の「ぼかし効果の確認用テキスト」から「確認用テキストここまで」までを削除してください。

背景全体に効果を適用する仕組み
オーバーレイにはposition: fixedとinset: 0を指定しています。 これにより、ページのスクロール位置に関係なく、ブラウザ画面の上下左右を覆う領域が作られます。 メニュー側にはオーバーレイより大きいz-indexを指定しているため、背景だけに効果が適用され、ボタンやメニューの文字は通常の明るさで表示されます。

/* 背景用オーバーレイの配置 */
position: fixed;
inset: 0;
z-index: 1000;

/* ドロップダウンメニューの配置 */
position: fixed;
top: 72px;
left: 50%;
z-index: 1001;
width: 220px;
transform: translateX(-50%);

メニューは画面上端から72px下の中央に配置しています。 topを変更すると上下の位置を調整でき、width: 220pxを変更するとボタンとメニューの横幅が変わります。 left: 50%とtranslateX(-50%)を組み合わせることで、画面幅が変わっても中央に配置されます。

背景をぼかす方法
①のサンプルでは、オーバーレイにbackdrop-filterを使用しています。 このプロパティは、オーバーレイ自体ではなく、その背後に表示されている文字や画像などへぼかし効果を適用します。 白い背景だけでは変化が分かりにくいため、文字や画像があるページで確認すると効果を判断しやすくなります。

background: rgba(255, 255, 255, 0.15);
backdrop-filter: blur(12px);
-webkit-backdrop-filter: blur(12px);

blur(12px)の数値がぼかしの強さです。 例えばblur(20px)にするとさらに強くぼかされ、blur(4px)にすると控えめになります。 -webkit-backdrop-filterはSafari向けの指定なので、ぼかしの数値を変更するときは両方を同じ値にしてください。 rgba(255, 255, 255, 0.15)はオーバーレイに重ねる白色の透明度で、最後の0.15を大きくすると背景が白っぽくなります。

背景を暗くする方法
②のサンプルでは、ぼかし効果を使わず、半透明の黒い背景色をオーバーレイに設定しています。 背景の文字や画像の形を残したまま全体を暗くするため、開いているメニューを強調できます。

background: rgba(0, 0, 0, 0.5);

最後の0.5が黒色の透明度です。 0に近づけると背景が明るくなり、1に近づけると黒くなります。 例えば0.3なら薄めの暗転、0.7なら強めの暗転になります。 この設定は②のstyle.cssにあり、①のぼかし効果とは独立して変更できます。

メニューの開閉と背景効果の切り替え
JavaScriptでは、メニューを開くときにhiddenを解除し、ボタンのaria-expandedをtrueに変更します。 同時にオーバーレイへis-activeクラスを追加することで、背景効果が表示されます。 閉じるときはこれらの状態を元に戻します。

// メニューを開く
function openMenu() {

  // メニューを表示する
  menu.hidden = false;

  // ボタンの開閉状態を更新する
  button.setAttribute("aria-expanded", "true");

  // 背景の効果を表示する
  overlay.classList.add("is-active");

}

// メニューを閉じる
function closeMenu() {

  // メニューを非表示にする
  menu.hidden = true;

  // ボタンの開閉状態を更新する
  button.setAttribute("aria-expanded", "false");

  // 背景の効果を解除する
  overlay.classList.remove("is-active");

}

①と②ではコメントの表現が異なりますが、開閉処理の仕組みは同じです。 オーバーレイのis-activeクラスを追加・削除するだけで背景効果を切り替えられるため、ぼかしと暗転の違いは主にCSS側で管理できます。 また、オーバーレイのクリックイベントとkeydownイベントによって、背景クリックやEscキーで閉じる操作にも対応しています。

オーバーレイの表示速度
オーバーレイは、通常時にopacity: 0とvisibility: hiddenで非表示になっています。 is-activeが追加されると透明度が切り替わり、背景効果が表示されます。

transition: opacity 0.25s ease, visibility 0.25s ease;

0.25sは表示状態が切り替わる時間です。 数値を大きくするとゆっくり変化し、小さくすると素早く変化します。 ①のぼかし効果と②の暗転効果で、それぞれ異なる時間を指定することもできます。

レスポンシブ対応
ボタンとメニューにはmax-width: calc(100vw - 32px)を指定し、狭い画面でも左右に余白を確保しています。 また、画面幅が640px以下になると、メニューの上位置を72pxから48pxへ変更します。 これにより、スマートフォンでは画面上部のスペースを抑えてメニューを表示できます。 変更する場合は、それぞれのstyle.cssにあるメディアクエリ内のtopを調整してください。


こちらもおすすめ


コメント