【JavaScript】Micromodal.jsで簡単にモーダルを実装する方法

Micromodal.jsは、軽量(gzipで約2KB)でアクセシビリティに配慮したモーダルウィンドウのライブラリです。フォーカストラップや aria-hidden の制御を自動でやってくれるため、手軽にアクセシブルなモーダルを作れます。

この記事の結論:モーダル用のHTML構造を用意し、MicroModal.init() を呼ぶだけで動きます。data-micromodal-trigger で開き、data-micromodal-close で閉じます。ただし、シンプルな用途ならライブラリ不要のネイティブ <dialog> 要素で足りることも多いので、まずそちらを検討しましょう。
スポンサーリンク

まず検討:ネイティブの dialog 要素で足りるか

近年のブラウザは HTMLの <dialog> 要素に対応しており、dialog.showModal() だけでフォーカストラップ・Escapeで閉じる・背景の ::backdropまで標準で備わったモーダルを作れます。ライブラリを読み込む必要がありません。

使い方はdialog要素の基本的な使い方と応用方法で解説しています。まずはこちらで足りないかを確認し、細かい制御や独自のAPIが必要なときに Micromodal.js を選ぶとよいでしょう。

動くデモ:ネイティブ dialog(ライブラリ不要)

↓ ボタンでモーダルが開きます(閉じるボタン・Escapeキー・背景クリックで閉じます)。これはライブラリなしのネイティブ <dialog> です:


ネイティブ dialog のモーダル

Escapeキーや背景クリックでも閉じます。


このように、フォーカストラップ・Escapeで閉じる・背景表示まで標準で揃います。実装の詳細はdialog要素の基本的な使い方を参照してください。これで足りない場合に、次の Micromodal.js を使います。

どれを選ぶ?(dialog / Micromodal / 自前)

方法 実装量 アクセシビリティ 向いている場面
ネイティブ <dialog> 最小(JSほぼ不要) 標準対応(フォーカストラップ・Escape) まず検討。一般的なモーダル
Micromodal.js 小(約2KB) WAI-ARIAを自動処理 独自API・細かい制御が欲しいとき
自前JavaScript 自分で実装が必要 特殊な要件・学習目的

多くの場合はネイティブ <dialog> で十分です。ここから先は、ライブラリならではの手軽さや独自APIが必要な場合の Micromodal.js の使い方を解説します。

Micromodal.jsの導入(CDN / npm)

CDNかnpmで読み込みます。CDNはバージョンを固定しておくと、将来の更新で挙動が変わるのを防げます。

HTML:CDN(バージョン固定)
<script src="https://unpkg.com/micromodal@0.4.10/dist/micromodal.min.js"></script>
ターミナル:npm
npm install micromodal

モーダルのHTML構造を作る

Micromodal.js は決まったHTML構造を前提にします。data-micromodal-trigger を持つボタンでモーダルを開き、data-micromodal-close を持つ要素で閉じます。

HTML:モーダル構造
<!-- 開くボタン -->
<button data-micromodal-trigger="modal-1">モーダルを開く</button>

<!-- モーダル本体 -->
<div class="modal" id="modal-1" aria-hidden="true">
  <div class="modal__overlay" tabindex="-1" data-micromodal-close>
    <div class="modal__container" role="dialog" aria-modal="true" aria-labelledby="modal-1-title">
      <header class="modal__header">
        <h2 class="modal__title" id="modal-1-title">モーダルのタイトル</h2>
        <button class="modal__close" aria-label="閉じる" data-micromodal-close></button>
      </header>
      <main class="modal__content">モーダルのコンテンツをここに書きます。</main>
      <footer class="modal__footer">
        <button class="modal__btn" data-micromodal-close>閉じる</button>
      </footer>
    </div>
  </div>
</div>

初期化とプログラムからの開閉(init / show / close)

MicroModal.init() を一度呼べば、data-micromodal-trigger 付きのボタンが自動で動きます。JavaScriptから直接開閉したいときは MicroModal.show() /MicroModal.close() を使います。

JavaScript:初期化とプログラム制御
// data-micromodal-trigger 付きボタンを自動で有効化
MicroModal.init();

// JSから開く・閉じる
MicroModal.show("modal-1");
MicroModal.close("modal-1");

// 閉じたときの処理(onClose コールバック)
MicroModal.show("modal-1", {
  onClose: (modal) => console.log("閉じました", modal.id),
});

オプションでカスタマイズする

MicroModal.init() にオプションを渡して挙動を調整できます。よく使うのは、開いている間に背景がスクロールしないようにする disableScroll です。

JavaScript:オプション例
MicroModal.init({
  disableScroll: true,        // 開いている間は背景スクロールを無効化
  awaitCloseAnimation: true,  // 閉じるアニメ完了後に非表示にする
  openTrigger: "data-custom-open",   // 開くトリガー属性を変更
  closeTrigger: "data-custom-close", // 閉じるトリガー属性を変更
});
背景スクロールの抑止:disableScroll: true を使うか、自前で bodyoverflow: hidden を付けます。iOSでの注意点を含む詳しい方法はモーダル表示時に背景のスクロールを禁止する方法を参照してください。

CSSでスタイルを整える

Micromodal.js はデザインを含まないため、CSSで見た目を整えます。オーバーレイを画面中央配置にし、コンテナを白背景にする最小例です。

CSS
.modal__overlay {
  position: fixed; inset: 0;
  background: rgba(0, 0, 0, 0.7);
  display: flex; justify-content: center; align-items: center;
}
.modal__container {
  background: #fff; padding: 2rem;
  max-width: 500px; width: 100%; border-radius: 4px;
}
.modal__close {
  background: transparent; border: none;
  font-size: 1.5rem; cursor: pointer;
}

よくある質問(FAQ)

QMicromodal.jsとは何ですか?
Aアクセシビリティに配慮したシンプルなモーダルダイアログ用のJavaScriptライブラリです。軽量(gzipで約2KB)でWAI-ARIAに対応しており、aria-hidden の切り替えやフォーカストラップを自動で処理します。
QMicromodal.jsの基本的な使い方は?
ACDNまたはnpmで読み込み、data-micromodal-trigger 属性でトリガーを指定し、決められたHTML構造を書きます。MicroModal.init() で自動有効化、または MicroModal.show("modal-id") でJSから直接開きます。
Qモーダルが閉じられたときに処理するには?
AMicroModal.show("modal-id", { onClose: handler }) でクローズ時のコールバックを設定します。フォーム送信後にモーダルを自動で閉じる、といった実装に使えます。
Qライブラリを使わずにモーダルを作れますか?
Aはい。ネイティブの <dialog> 要素と showModal() を使えば、フォーカストラップやEscapeでの閉じる動作まで標準で備わったモーダルをライブラリなしで作れます(dialog要素の使い方)。

まとめ

Micromodal.js は、決まったHTML構造を用意して MicroModal.init() を呼ぶだけで、軽量でアクセシブルなモーダルを実装できるライブラリです。show() / close() でJSからの制御、disableScroll などのオプション、CSSでのデザイン調整も簡単です。

ただし、シンプルな用途ならライブラリ不要のネイティブ <dialog> 要素で足りることも多いです。まずはdialog要素で足りないかを確認し、必要に応じて Micromodal.js を選びましょう。