モーダルは「画面の主役を一時的に切り替える」UIパーツ
モーダルは、ユーザーの視線と操作を一時的に“ひとつの領域”へ集中させるための UI です。 CSSだけで実装する場合は、 チェックボックス(またはラジオ)+擬似要素+position+opacity+pointer-events を組み合わせることで、JavaScriptなしでも開閉できます。
ここでは CSS と Tailwind CSS の両方で、 初心者でも迷わないように、実務で使えるモーダルを丁寧に解説します。
モーダルCSS実装の基本構造
モーダルを開くトリガー(チェックボックス)
モーダルの背景(オーバーレイ)
モーダル本体(中央のボックス)
checked 状態で表示切り替え
この4つを理解すると、CSSだけでモーダルが作れます。
例1:最も基本の「チェックボックスで開閉するモーダル」
CSS 版(完全CSSのみ)
.modal-toggle {
display: none;
}
.modal-overlay {
position: fixed;
inset: 0;
background: rgba(0,0,0,0.45);
opacity: 0;
pointer-events: none;
transition: opacity 0.25s ease;
}
.modal-box {
position: fixed;
top: 50%;
left: 50%;
width: 90%;
max-width: 420px;
background: #fff;
border-radius: 12px;
padding: 1.5rem;
transform: translate(-50%, -50%) scale(0.95);
opacity: 0;
pointer-events: none;
transition: opacity 0.25s ease, transform 0.25s ease;
}
/* チェックされたら表示 */
.modal-toggle:checked ~ .modal-overlay {
opacity: 1;
pointer-events: auto;
}
.modal-toggle:checked ~ .modal-box {
opacity: 1;
transform: translate(-50%, -50%) scale(1);
pointer-events: auto;
}
/* 閉じるボタン */
.close-btn {
display: inline-block;
margin-top: 1rem;
padding: 0.5rem 1rem;
background: #2563eb;
color: #fff;
border-radius: 8px;
cursor: pointer;
}
CSS<label for="modal" class="open-btn">モーダルを開く</label>
<input type="checkbox" id="modal" class="modal-toggle">
<div class="modal-overlay"></div>
<div class="modal-box">
<h2>モーダルタイトル</h2>
<p>ここに説明文が入ります。</p>
<label for="modal" class="close-btn">閉じる</label>
</div>
HTML深掘りポイント
opacity と pointer-events を組み合わせることで、 「見えないときはクリックできない」状態を作れます。 transform の scale を使うと、 “ふわっと開く”自然なアニメーションになります。
例2:Tailwind CSSで作る「CSSのみモーダル」
Tailwind では peer を使うと、チェックボックスの状態を子要素に反映できます。
<label for="modal" class="px-4 py-2 bg-sky-600 text-white rounded cursor-pointer">
モーダルを開く
</label>
<input type="checkbox" id="modal" class="peer hidden">
<div
class="fixed inset-0 bg-black/45 opacity-0 pointer-events-none
peer-checked:opacity-100 peer-checked:pointer-events-auto
transition">
</div>
<div
class="fixed top-1/2 left-1/2 w-[90%] max-w-md bg-white rounded-xl p-6
opacity-0 pointer-events-none -translate-x-1/2 -translate-y-1/2 scale-95
peer-checked:opacity-100 peer-checked:pointer-events-auto
peer-checked:scale-100
transition">
<h2 class="text-xl font-semibold mb-3">モーダルタイトル</h2>
<p class="text-slate-700 mb-4">ここに説明文が入ります。</p>
<label for="modal"
class="px-4 py-2 bg-sky-600 text-white rounded cursor-pointer inline-block">
閉じる
</label>
</div>
HTML深掘りポイント
Tailwind の peer-checked: は、 「チェックボックスの状態を別要素に反映する」魔法のような仕組み。 JavaScriptなしでモーダルが開閉できるようになります。
例3:モーダルの背景を“ぼかす”グラスモーフィズム風
CSS 版
.modal-overlay {
backdrop-filter: blur(6px);
background: rgba(0,0,0,0.35);
}
CSSTailwind 版
<div
class="fixed inset-0 bg-black/35 backdrop-blur-sm
opacity-0 pointer-events-none
peer-checked:opacity-100 peer-checked:pointer-events-auto
transition">
</div>
HTML深掘りポイント
背景をぼかすと、 モーダルが“浮いている”ように見え、 視線が自然にモーダルへ集中します。
例4:モーダルを下からスライドさせる(スマホ風)
CSS 版
.modal-box {
bottom: 0;
left: 50%;
transform: translateX(-50%) translateY(20px);
opacity: 0;
transition: transform 0.25s ease, opacity 0.25s ease;
}
.modal-toggle:checked ~ .modal-box {
transform: translateX(-50%) translateY(0);
opacity: 1;
}
CSSTailwind 版
<div
class="fixed bottom-0 left-1/2 w-[90%] max-w-md bg-white rounded-t-xl p-6
opacity-0 pointer-events-none -translate-x-1/2 translate-y-5
peer-checked:opacity-100 peer-checked:pointer-events-auto
peer-checked:translate-y-0
transition">
…
</div>
HTML深掘りポイント
スマホアプリのような 「下からスッと出るモーダル」は UX がとても良いです。
例5:モーダルの外側クリックで閉じる(CSSのみ)
CSSだけで外側クリックを実現するには、 オーバーレイ自体を閉じるボタンにします。
CSS 版
.modal-overlay {
cursor: pointer;
}
CSS<label for="modal" class="modal-overlay"></label>
HTMLTailwind 版
<label
for="modal"
class="fixed inset-0 bg-black/45 backdrop-blur-sm
opacity-0 pointer-events-none
peer-checked:opacity-100 peer-checked:pointer-events-auto
cursor-pointer transition">
</label>
HTML深掘りポイント
JavaScriptなしでも 「外側クリックで閉じる」動作ができます。 モーダルの使い勝手が大きく向上します。
モーダル設計の重要ポイント
モーダルは「視線を奪う」ので、背景を暗くする
背景を暗くすることで、 ユーザーの視線が自然にモーダルへ集中します。
開閉アニメーションは必須
opacity transform(scale / translate) transition
これらを組み合わせると、 “ふわっと開く”自然なモーダルになります。
閉じる操作を複数用意する
閉じるボタン 外側クリック ESCキー(JSがある場合)
ユーザーが迷わない設計が大事です。
そのまま使える「万能モーダルテンプレート」(Tailwind)
<label for="modal" class="px-4 py-2 bg-sky-600 text-white rounded cursor-pointer">
モーダルを開く
</label>
<input type="checkbox" id="modal" class="peer hidden">
<label
for="modal"
class="fixed inset-0 bg-black/45 backdrop-blur-sm
opacity-0 pointer-events-none
peer-checked:opacity-100 peer-checked:pointer-events-auto
cursor-pointer transition">
</label>
<div
class="fixed top-1/2 left-1/2 w-[90%] max-w-md bg-white rounded-xl p-6
opacity-0 pointer-events-none -translate-x-1/2 -translate-y-1/2 scale-95
peer-checked:opacity-100 peer-checked:pointer-events-auto
peer-checked:scale-100
transition">
<h2 class="text-xl font-semibold mb-3">モーダルタイトル</h2>
<p class="text-slate-700 mb-4">ここに説明文が入ります。</p>
<label for="modal"
class="px-4 py-2 bg-sky-600 text-white rounded cursor-pointer inline-block">
閉じる
</label>
</div>
HTML軽量・高品質・アクセシブルで、 どんな UI にも使える万能モーダルです。
さいごに
モーダルは、 「ユーザーの視線と操作を一時的に集中させる」 UI パーツです。
CSSだけでも、 チェックボックス+peer+opacity+transform を組み合わせれば 美しいモーダルが簡単に作れます。
もしあなたが作っている UI(設定画面、LP、フォームなど)があれば、 その画面に合わせた最適なモーダルを一緒に設計できます。


