Micromodal.jsは、軽量(gzipで約2KB)でアクセシビリティに配慮したモーダルウィンドウのライブラリです。フォーカストラップや aria-hidden の制御を自動でやってくれるため、手軽にアクセシブルなモーダルを作れます。
MicroModal.init() を呼ぶだけで動きます。data-micromodal-trigger で開き、data-micromodal-close で閉じます。ただし、シンプルな用途ならライブラリ不要のネイティブ <dialog> 要素で足りることも多いので、まずそちらを検討しましょう。まず検討:ネイティブの dialog 要素で足りるか
近年のブラウザは HTMLの <dialog> 要素に対応しており、dialog.showModal() だけでフォーカストラップ・Escapeで閉じる・背景の ::backdropまで標準で備わったモーダルを作れます。ライブラリを読み込む必要がありません。
使い方はdialog要素の基本的な使い方と応用方法で解説しています。まずはこちらで足りないかを確認し、細かい制御や独自のAPIが必要なときに Micromodal.js を選ぶとよいでしょう。
動くデモ:ネイティブ dialog(ライブラリ不要)
↓ ボタンでモーダルが開きます(閉じるボタン・Escapeキー・背景クリックで閉じます)。これはライブラリなしのネイティブ <dialog> です:
このように、フォーカストラップ・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はバージョンを固定しておくと、将来の更新で挙動が変わるのを防げます。
<script src="https://unpkg.com/micromodal@0.4.10/dist/micromodal.min.js"></script>
npm install micromodal
モーダルのHTML構造を作る
Micromodal.js は決まったHTML構造を前提にします。data-micromodal-trigger を持つボタンでモーダルを開き、data-micromodal-close を持つ要素で閉じます。
<!-- 開くボタン -->
<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() を使います。
// 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 です。
MicroModal.init({
disableScroll: true, // 開いている間は背景スクロールを無効化
awaitCloseAnimation: true, // 閉じるアニメ完了後に非表示にする
openTrigger: "data-custom-open", // 開くトリガー属性を変更
closeTrigger: "data-custom-close", // 閉じるトリガー属性を変更
});
disableScroll: true を使うか、自前で body に overflow: hidden を付けます。iOSでの注意点を含む詳しい方法はモーダル表示時に背景のスクロールを禁止する方法を参照してください。CSSでスタイルを整える
Micromodal.js はデザインを含まないため、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)
aria-hidden の切り替えやフォーカストラップを自動で処理します。data-micromodal-trigger 属性でトリガーを指定し、決められたHTML構造を書きます。MicroModal.init() で自動有効化、または MicroModal.show("modal-id") でJSから直接開きます。MicroModal.show("modal-id", { onClose: handler }) でクローズ時のコールバックを設定します。フォーム送信後にモーダルを自動で閉じる、といった実装に使えます。<dialog> 要素と showModal() を使えば、フォーカストラップやEscapeでの閉じる動作まで標準で備わったモーダルをライブラリなしで作れます(dialog要素の使い方)。まとめ
Micromodal.js は、決まったHTML構造を用意して MicroModal.init() を呼ぶだけで、軽量でアクセシブルなモーダルを実装できるライブラリです。show() / close() でJSからの制御、disableScroll などのオプション、CSSでのデザイン調整も簡単です。
ただし、シンプルな用途ならライブラリ不要のネイティブ <dialog> 要素で足りることも多いです。まずはdialog要素で足りないかを確認し、必要に応じて Micromodal.js を選びましょう。
