モーダルウィンドウは、現在のページコンテンツの上に重ねて表示されるUI要素です。
通常、モーダルウィンドウを実装するには、JavaScriptを使った複雑な処理が必要でした。
しかし、htmxを使えば、シンプルなHTMLの属性だけでモーダルウィンドウを実現できます。
この記事では、htmxを使ってモーダルウィンドウを実装する方法を詳しく解説します。
本記事の内容
- モーダルウィンドウのHTML構造
- モーダルコンテンツの動的読み込み
- モーダルウィンドウのスタイリング
- アクセシビリティの考慮
- サンプルコード
- まとめ
それでは、上記に沿って解説していきます。
モーダルウィンドウのHTML構造
htmxについてよくわからない場合は、次の記事からご覧ください。
まず、モーダルウィンドウのHTML構造を定義します。
モーダルを表示するボタンと、モーダルコンテンツを格納するコンテナを以下のように配置します。
<button hx-get="modal_content.php" hx-target="#modal-container" hx-swap="outerHTML"> モーダルを表示 </button> <div id="modal-container"></div>
モーダル表示ボタンには、hx-get、hx-target、hx-swapの属性を設定します。
hx-getで指定したPHPファイルからモーダルコンテンツを取得し、hx-targetで指定したコンテナ要素に挿入します。
また、hx-swapを”outerHTML”に設定することで、コンテナ要素自体がモーダルコンテンツに置き換わります。
モーダルコンテンツの動的読み込み
次に、PHPを使ってモーダルコンテンツを動的に生成します。
modal_content.phpというPHPファイルを作成し、以下のようなコードを記述します。
<?php echo <<<HTML <div id="modal-container" style="display: flex; position: fixed; left: 0; top: 0; width: 100%; height: 100%; background: rgba(0, 0, 0, 0.5); align-items: center; justify-content: center;"> <div id="modal-content"> <h2>モーダルコンテンツ</h2> <p>これはモーダルで表示されるコンテンツです。</p> <button onclick="document.getElementById('modal-container').style.display='none';">閉じる</button> </div> </div> HTML; ?>
このPHPファイルでは、モーダルウィンドウのHTML構造を出力しています。
モーダルコンテンツには、閉じるボタンを配置し、クリックされたらモーダルを非表示にするようにしています。
htmxは、モーダル表示ボタンがクリックされたときに、modal_content.phpを呼び出してモーダルコンテンツを取得します。
取得したコンテンツは、#modal-containerに挿入され、モーダルウィンドウが表示されます。
モーダルウィンドウのスタイリング
モーダルウィンドウを適切にスタイリングすることで、ユーザーにとって使いやすく魅力的なUIを作成できます。
以下のようなCSSを使って、モーダルウィンドウのスタイルを定義します。
#modal-container { display: none; position: fixed; left: 0; top: 0; width: 100%; height: 100%; background: rgba(0, 0, 0, 0.5); align-items: center; justify-content: center; } #modal-content { background-color: white; padding: 20px; border-radius: 5px; }
#modal-containerは、初期状態では非表示にしておき、モーダルが表示されるときにflexboxを使って中央に配置します。
背景には、半透明の黒を設定し、モーダルコンテンツが強調されるようにします。
#modal-contentには、白背景とパディング、丸み付きの角を指定して、視認性を高めます。
アクセシビリティの考慮
モーダルウィンドウを実装する際は、アクセシビリティにも配慮する必要があります。
キーボード操作でモーダルを閉じられるようにするため、閉じるボタンにはタブフォーカスを受ける要素を配置します。
また、モーダルが表示されている間は、背景のコンテンツをスクリーンリーダーから隠すことを検討してください。
サンプルコード
以上の内容を組み合わせた完全なサンプルコードは上記の通りです。
index.html
<!DOCTYPE html> <html lang="ja"> <head> <meta charset="UTF-8"> <title>HTMX モーダルデモ</title> <script src="https://unpkg.com/htmx.org"></script> <style> #modal-container { display: none; position: fixed; left: 0; top: 0; width: 100%; height: 100%; background: rgba(0, 0, 0, 0.5); align-items: center; justify-content: center; } #modal-content { background-color: white; padding: 20px; border-radius: 5px; } </style> </head> <body> <button hx-get="modal_content.php" hx-target="#modal-container" hx-swap="outerHTML"> モーダルを表示 </button> <div id="modal-container"></div> </body> </html>
modal_content.php
<?php echo <<<HTML <div id="modal-container" style="display: flex; position: fixed; left: 0; top: 0; width: 100%; height: 100%; background: rgba(0, 0, 0, 0.5); align-items: center; justify-content: center;"> <div id="modal-content"> <h2>モーダルコンテンツ</h2> <p>これはモーダルで表示されるコンテンツです。</p> <button onclick="document.getElementById('modal-container').style.display='none';">閉じる</button> </div> </div> HTML; ?>
まとめ
この記事では、htmxとPHPを組み合わせてモーダルウィンドウを実装する方法を解説しました。
htmxのhx-get、hx-target、hx-swap属性を使うことで、シンプルなHTMLだけで動的なモーダル表示を実現できます。
また、PHPを使ってモーダルコンテンツを動的に生成することで、柔軟で応用の効くUIが作成できます。
htmxとサーバーサイドの処理を連携させることで、高速で洗練されたモーダルウィンドウを実装できます。
この記事で紹介したテクニックを活用し、さらに発展させることで、ユーザーにとって使いやすく魅力的なモーダルウィンドウを作成しましょう。