モーダルウィンドウは、現在のページコンテンツの上に重ねて表示される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とサーバーサイドの処理を連携させることで、高速で洗練されたモーダルウィンドウを実装できます。
この記事で紹介したテクニックを活用し、さらに発展させることで、ユーザーにとって使いやすく魅力的なモーダルウィンドウを作成しましょう。


