コピペで完結!ドロワーメニュー #13【モーダル風 高級ドロワー】

html/css/js

フェード+ズーム+背景ぼかしの高級版

モーダル風にふわっと登場するリッチアニメーション付きドロワー。フェードイン+ズーム+背景ぼかしを組み合わせ、高級感あるUIトランジションをHTML・CSS・JSのみで実現します。

コードについて 本記事のコードはAI(ChatGPT)による生成をベースに作成・調整しています。ご利用の環境でテストの上ご使用ください。
免責 本コードの利用に伴う不具合・損害について、当サイトは責任を負いません。自己責任にてご利用ください。

デモ

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

/* =========================================================
   ▼CSS:フェード+ズーム+背景ぼかしの高級ドロワー
   目的:
     - 背景はフェード+blur(ぼかし)
     - 本体は中央にズームインしながらフェードイン
   スコープ:
     - #drawer-fadezoom-demo 配下に限定し、外部と衝突しない
   ========================================================= */

/* 1) メインラッパー:将来の拡張や相対配置の基点にする */
#drawer-fadezoom-demo {
  position: relative; /* 子要素の絶対配置・スタッキングの基点を提供する */
}

/* 2) 開くボタン:シリーズ共通トーンのプライマリボタン */
#drawer-fadezoom-demo .menu-btn {
  background: #0b6bff;  /* 強調色(視認性の高いブルー) */
  color: #fff;          /* コントラストを確保するため白 */
  border: none;         /* 既定のボーダーを除去してフラットに */
  border-radius: 8px;   /* 角丸でタップしやすく温和な印象に */
  padding: 10px 16px;   /* クリック領域を十分に確保 */
  cursor: pointer;      /* ホバー時にポインタを表示(可クリックを示す) */
  /* フォーカスリングは親セクションの共通スタイルに委譲(必要に応じて追加) */
}

/* 3) 背景オーバーレイ:暗幕+背景ぼかし(ガラス風) */
#drawer-fadezoom-demo .overlay {
  position: fixed;                /* ビューポート基準で全体を覆う */
  inset: 0;                       /* top/right/bottom/left を 0 に一括指定 */
  background: rgba(0,0,0,0.4);    /* 半透明の黒で背面を減光(黒40%) */
  backdrop-filter: blur(0px);     /* 初期はぼかし 0(非アクティブ時) */
  opacity: 0;                     /* 初期は視覚的に不可視 */
  pointer-events: none;           /* 初期はクリックを透過(無効化) */
  transition:
    opacity .3s ease,            /* フェード(0.3秒) */
    backdrop-filter .4s ease;    /* ぼかし(0.4秒:やや遅らせて高級感) */
  z-index: 90;                    /* ドロワー本体(100)より背面に配置 */
  /* 注意:backdrop-filter 非対応環境では単なる暗幕として機能する(許容) */
}

/* 3-1) オーバーレイの有効状態:フェードイン+背景ぼかしON */
#drawer-fadezoom-demo .overlay.active {
  opacity: 1;                     /* 視覚的に表示する */
  pointer-events: auto;           /* クリック可能(クリックでクローズ処理へ) */
  backdrop-filter: blur(6px);     /* 6px 程度のぼかしで“ガラス”感を付与 */
}

/* 4) ドロワー本体:モーダル風に中央配置+ズーム・フェード */
#drawer-fadezoom-demo .panel {
  position: fixed;                /* ビューポート中央に固定配置するため fixed */
  top: 50%;                       /* 垂直方向の中心(transform と組み合わせ) */
  right: 50%;                     /* 水平方向の中心(左ではなく right を使い translate 50%) */
  transform:
    translate(50%, -50%)          /* right:50% と組み合わせて中央に位置決め */
    scale(.9);                    /* 初期は 90% 縮小で“これから出る”感を演出 */
  width: min(90vw, 400px);        /* 画面幅に応じて最大 400px、余白も確保 */
  background: #fff;               /* 内容が読みやすい白背景 */
  border-radius: 14px;            /* 高級感のある大きめ角丸 */
  box-shadow: 0 16px 36px rgba(0,0,0,.3); /* 立体感のある強めの影 */
  opacity: 0;                     /* 初期は不可視(フェード前) */
  transition:
    opacity .4s ease,            /* フェードイン(0.4秒) */
    transform .4s ease;          /* スケールアップ(ズーム)も同期 */
  z-index: 100;                   /* オーバーレイより前面に重ねる */
  /* 備考:右スライド型ではなく“中央ズーム”でモーダル風のリッチ感を出す */
}

/* 4-1) ドロワー本体の表示状態:フル不透明+等倍スケール */
#drawer-fadezoom-demo .panel.active {
  opacity: 1;                     /* 完全に可視化 */
  transform:
    translate(50%, -50%)          /* 中央位置はそのまま */
    scale(1);                     /* 等倍に拡大して“出現完了”を表現 */
}

/* 5) パネル内部:見出し・本文・閉じるボタンの体裁 */
#drawer-fadezoom-demo header {
  background: #f8fafc;            /* 薄いグレー青み:区切り用のバー */
  border-bottom: 1px solid #e5e7eb; /* ヘッダー下に細いボーダー */
  padding: 14px;                  /* ゆとりある余白で視認性向上 */
  font-weight: 600;               /* 見出しとしての強調 */
}

#drawer-fadezoom-demo .inner {
  padding: 16px;                  /* 本文の左右上下余白を確保 */
}

#drawer-fadezoom-demo .close-btn {
  display: block;                 /* 幅・余白を扱いやすいブロック要素に */
  background: #e11d48;            /* 注意喚起の赤系(閉じる操作の明確化) */
  color: #fff;                    /* 白文字でコントラストを確保 */
  border: none;                   /* 既定のボーダーを除去 */
  border-radius: 8px;             /* 角丸でタップしやすい形状に */
  padding: 8px 12px;              /* クリック領域を十分に確保 */
  margin-top: 16px;               /* 本文との間隔を確保 */
  cursor: pointer;                /* 可クリックのサイン */
  /* 必要に応じて :focus-visible のアウトラインを追加し A11y を強化可能 */
}

/* 6) アクセシビリティ配慮(任意):
   動きを苦手とするユーザーのためにアニメを弱める */
@media (prefers-reduced-motion: reduce) {
  #drawer-fadezoom-demo .overlay {
    transition: opacity .01ms linear, backdrop-filter .01ms linear; /* ほぼ無効化 */
  }
  #drawer-fadezoom-demo .panel {
    transition: opacity .01ms linear, transform .01ms linear;       /* ほぼ無効化 */
  }
}

コメント