modal
<span class="open-modal info-link" data-target="infoModal1">モーダルを開く</span>
<!-- オーバーレイ -->
<div id="modalOverlay" class="overlay"></div>
<!-- ポップアップ -->
<div id="infoModal1" class="modal-content" style="display: none;">
<h3>タイトル</h3>
<div>
ここに本文を入力
</div>
</div>
<!-- 汎用モーダル -->
<div id="genericModal" class="popup">
<h3 id="modalTitle"></h3>
<div id="modalBody"></div>
<button id="closeGenericModal">閉じる</button>
</div>
#modalTitle {
border-bottom: solid 1px #dee2e6;
padding: 25px 20px;
text-align: center;
margin: 0 !important;
}
#modalBody {
padding: 20px;
}
.popup {
display: none;
position: fixed;
top: 50%;
left: 50%;
transform: translate(-50%, -50%);
background-color: #ffffff;
border-radius: 8px;
box-shadow: 0 4px 10px rgba(0, 0, 0, 0.1);
z-index: 1000;
max-width: 600px;
width: 80%;
}
.popup h3 {
font-size: 18px;
color: #333;
}
.popup ul {
padding-left: 20px;
margin-bottom: 20px;
}
.popup ul li {
margin-bottom: 10px;
font-size: 14px;
color: #555;
}
.popup button {
display: block;
max-width: 450px;
padding: 10px;
background-color: #0073aa;
color: #ffffff;
border: none;
border-radius: 4px;
font-size: 16px;
cursor: pointer;
transition: background-color 0.3s;
margin-top: 40px;
margin: 20px auto;
}
.popup button:hover {
background-color: #005177;
}
/* オーバーレイスタイル */
.overlay {
position: fixed;
top: 0;
left: 0;
width: 100%;
height: 100%;
background-color: rgba(0, 0, 0, 0.5); /* 半透明の黒背景 */
z-index: 999; /* モーダルの後ろに配置するための z-index */
display: none; /* 初期状態は非表示 */
}
.info-link {
color: #0073aa;
text-decoration: underline;
cursor: pointer;
margin-top: 10px;
display: inline-block;
font-size: 12px;
}
document.addEventListener("DOMContentLoaded", () => {
// 汎用モーダルとオーバーレイを取得(存在確認付き)
const overlay = document.getElementById("modalOverlay");
const modal = document.getElementById("genericModal");
const modalTitle = document.getElementById("modalTitle");
const modalBody = document.getElementById("modalBody");
const closeBtn = document.getElementById("closeGenericModal");
// モーダルを開く処理
function openModal(targetId) {
const content = document.getElementById(targetId);
if (modal && overlay && modalTitle && modalBody && content) {
const titleEl = content.querySelector("h3");
const bodyEl = content.querySelector("div, p, ul");
modalTitle.innerHTML = titleEl ? titleEl.innerHTML : "";
modalBody.innerHTML = bodyEl ? bodyEl.innerHTML : "";
modal.style.display = "block";
overlay.style.display = "block";
} else {
console.warn("モーダル要素またはターゲットが見つかりません:", targetId);
}
}
// モーダルを閉じる処理
function closeModal() {
if (modal && overlay) {
modal.style.display = "none";
overlay.style.display = "none";
}
}
// モーダルを開くボタンのイベントリスナー(要素存在チェック)
const modalButtons = document.querySelectorAll(".open-modal");
if (modalButtons.length > 0) {
modalButtons.forEach((button) => {
button.addEventListener("click", () => {
const targetId = button.getAttribute("data-target");
openModal(targetId);
});
});
}
// 閉じるボタンとオーバーレイをクリックした際の処理
if (closeBtn) {
closeBtn.addEventListener("click", closeModal);
}
if (overlay) {
overlay.addEventListener("click", closeModal);
}
});