アラート(ダイアログ)のデザイン7選|コピペで実装できるコード付き
レスポンシブ対応の実装例&コード付き!異なるデザインパターンのダイアログボックス(ボタンをクリックすると、画面上部からポップアップウィンドウが出現)を集めました!
ダイアログボックス自体はJavaScriptのalert()
でも実装できますが、デザインなどはカスタマイズできないのが難点。HTML / CSS / JavaScript を記事後半に掲載していますので、気に入ったデザインがあれば自由にご利用ください。
ダイアログタイトル
これはシンプルなダイアログボックスのサンプルです。JavaScriptのalert()の機能・デザインをベースとしています。
モダンなデザインのダイアログボックスです。ヘッダーとボディが分かれており、右上にXボタンがあります。
カード風のデザインで、アイコンとタイトルが上部に配置されています。より視覚的なアプローチです。
ミニマルダイアログ
シンプルでミニマルなデザイン。余計な装飾を排除し、コンテンツに集中できるデザインです。
美しいグラデーションを使用したダイアログです。視覚的に魅力的で、モダンな印象を与えます。
ボーダーを効果的に使用したデザインです。シンプルながらも洗練された印象を与えます。
ネオン効果を使用したダイアログです。光るような印象で、サイバーパンクな雰囲気を演出します。
ダイアログボックスとは?
ダイアログボックスは、ユーザーに確認や入力を求めるために表示される小さなウィンドウです。操作を一時停止させ、選択肢やメッセージに対する対応を促します。
目次
【1】シンプルダイアログボックス
<div class="container">
<div id="dialog-container">
<button id="dialog-btn">シンプルダイアログ</button>
</div>
<!-- ダイアログウィンドウ -->
<div id="dialog" class="dialog">
<div class="dialog-content">
<p>ダイアログタイトル</p>
<p>これはシンプルなダイアログボックスのサンプルです。JavaScriptのalert()の機能・デザインをベースとしています。</p>
<div class="close-btn-container">
<button class="close-btn">閉じる</button>
</div>
</div>
</div>
</div>
.container {
padding: 20px;
}
.container #dialog-container {
text-align: center;
margin-bottom: 20px;
}
.container #dialog-btn {
background-color: #007bff;
color: white;
border: none;
padding: 10px 20px;
border-radius: 4px;
cursor: pointer;
font-size: 16px;
transition: background-color 0.3s;
}
.container #dialog-btn:hover {
background-color: #0056b3;
}
.container .dialog {
display: none;
position: fixed;
z-index: 1000;
left: 0;
top: 0;
width: 100%;
height: 100%;
background-color: rgba(0, 0, 0, 0.5);
animation: fadeIn 0.3s;
}
.container .dialog-content {
background-color: white;
margin: 2% auto;
padding: 20px;
border: 1px solid #888;
border-radius: 8px;
width: 80%;
max-width: 500px;
box-shadow: 0 4px 8px rgba(0, 0, 0, 0.3);
animation: slideInFromTop 0.2s ease-out;
}
.container .dialog-content p:first-child {
font-weight: bold;
font-size: 18px;
margin-bottom: 15px;
color: #333;
}
.container .dialog-content p:nth-child(2) {
margin-bottom: 20px;
line-height: 1.5;
color: #666;
}
.container .close-btn-container {
text-align: center;
}
.container .close-btn {
background-color: #007bff;
color: white;
border: none;
padding: 8px 16px;
border-radius: 4px;
cursor: pointer;
font-size: 14px;
transition: background-color 0.3s;
}
.container .close-btn:hover {
background-color: #0056b3;
}
/* アニメーション */
@keyframes fadeIn {
from { opacity: 0; }
to { opacity: 1; }
}
@keyframes slideInFromTop {
from {
transform: translateY(-50px);
opacity: 0;
}
to {
transform: translateY(0);
opacity: 1;
}
}
/* レスポンシブ対応 */
@media (max-width: 768px) {
.container .dialog-content {
width: 90%;
margin: 5% auto;
padding: 15px;
}
.container .dialog-content p:first-child {
font-size: 16px;
}
.container .dialog-content p:nth-child(2) {
font-size: 14px;
}
}
document.addEventListener('DOMContentLoaded', function() {
// ダイアログボタンのイベントリスナーを設定
const dialogButtons = document.querySelectorAll('#dialog-btn');
dialogButtons.forEach(button => {
button.addEventListener('click', function() {
const dialog = document.getElementById('dialog');
if (dialog) {
dialog.style.display = 'block';
// スクロールを無効化
document.body.style.overflow = 'hidden';
}
});
});
// 閉じるボタンのイベントリスナーを設定
const closeButtons = document.querySelectorAll('.close-btn');
closeButtons.forEach(button => {
button.addEventListener('click', function() {
const dialog = this.closest('.dialog');
if (dialog) {
dialog.style.display = 'none';
// スクロールを有効化
document.body.style.overflow = 'auto';
}
});
});
// ESCキーでダイアログを閉じる機能
document.addEventListener('keydown', function(e) {
if (e.key === 'Escape') {
const openDialogs = document.querySelectorAll('.dialog[style*="display: block"]');
openDialogs.forEach(dialog => {
dialog.style.display = 'none';
// スクロールを有効化
document.body.style.overflow = 'auto';
});
}
});
});
【2】モダンダイアログボックス
<div class="container">
<div id="dialog-container">
<button id="dialog-btn">モダンダイアログ</button>
</div>
<!-- ダイアログウィンドウ -->
<div id="dialog" class="dialog">
<div class="dialog-content">
<div class="dialog-header">
<span class="dialog-title">モダンダイアログ</span>
<button class="close-btn-x">×</button>
</div>
<div class="dialog-body">
<p>モダンなデザインのダイアログボックスです。ヘッダーとボディが分かれており、右上にXボタンがあります。</p>
</div>
<div class="dialog-footer">
<button class="btn-primary">OK</button>
</div>
</div>
</div>
</div>
.container {
padding: 20px;
}
.container #dialog-container {
text-align: center;
margin-bottom: 20px;
}
.container #dialog-btn {
background-color: #007bff;
color: white;
border: none;
padding: 10px 20px;
border-radius: 4px;
cursor: pointer;
font-size: 16px;
transition: background-color 0.3s;
}
.container #dialog-btn:hover {
background-color: #0056b3;
}
.container .dialog {
display: none;
position: fixed;
z-index: 1000;
left: 0;
top: 0;
width: 100%;
height: 100%;
background-color: rgba(0, 0, 0, 0.5);
animation: fadeIn 0.3s;
}
.container .dialog-content {
background-color: white;
margin: 2% auto;
border-radius: 12px;
width: 80%;
max-width: 500px;
box-shadow: 0 10px 30px rgba(0, 0, 0, 0.3);
animation: slideInFromTop 0.2s ease-out;
overflow: hidden;
}
.container .dialog-header {
background: linear-gradient(135deg, #667eea 0%, #764ba2 100%);
color: white;
padding: 20px;
display: flex;
justify-content: space-between;
align-items: center;
}
.container .dialog-title {
font-size: 18px;
font-weight: 600;
}
.container .close-btn-x {
background: none;
border: none;
color: white;
font-size: 24px;
cursor: pointer;
padding: 0;
width: 30px;
height: 30px;
display: flex;
align-items: center;
justify-content: center;
border-radius: 50%;
transition: background-color 0.3s;
}
.container .close-btn-x:hover {
background-color: rgba(255, 255, 255, 0.2);
}
.container .dialog-body {
padding: 20px;
}
.container .dialog-body p {
margin: 0;
line-height: 1.6;
color: #555;
}
.container .dialog-footer {
padding: 20px;
display: flex;
gap: 10px;
justify-content: flex-end;
border-top: 1px solid #eee;
}
.container .btn-primary {
background-color: #007bff;
color: white;
border: none;
padding: 8px 16px;
border-radius: 4px;
cursor: pointer;
font-size: 14px;
transition: background-color 0.3s;
}
.container .btn-primary:hover {
background-color: #0056b3;
}
/* アニメーション */
@keyframes fadeIn {
from { opacity: 0; }
to { opacity: 1; }
}
@keyframes slideInFromTop {
from {
transform: translateY(-50px);
opacity: 0;
}
to {
transform: translateY(0);
opacity: 1;
}
}
/* レスポンシブ対応 */
@media (max-width: 768px) {
.container .dialog-content {
width: 90%;
margin: 5% auto;
padding: 15px;
}
.container .dialog-title {
font-size: 16px;
}
.container .dialog-body p {
font-size: 14px;
}
}
document.addEventListener('DOMContentLoaded', function() {
// ダイアログボタンのイベントリスナーを設定
const dialogButtons = document.querySelectorAll('#dialog-btn');
dialogButtons.forEach(button => {
button.addEventListener('click', function() {
const dialog = document.getElementById('dialog');
if (dialog) {
dialog.style.display = 'block';
// スクロールを無効化
document.body.style.overflow = 'hidden';
}
});
});
// 閉じるボタンのイベントリスナーを設定
const closeButtons = document.querySelectorAll('.close-btn, .close-btn-x, .btn-primary');
closeButtons.forEach(button => {
button.addEventListener('click', function() {
const dialog = this.closest('.dialog');
if (dialog) {
dialog.style.display = 'none';
// スクロールを有効化
document.body.style.overflow = 'auto';
}
});
});
// ESCキーでダイアログを閉じる機能
document.addEventListener('keydown', function(e) {
if (e.key === 'Escape') {
const openDialogs = document.querySelectorAll('.dialog[style*="display: block"]');
openDialogs.forEach(dialog => {
dialog.style.display = 'none';
// スクロールを有効化
document.body.style.overflow = 'auto';
});
}
});
});
【3】カード風ダイアログボックス
<div class="container">
<div id="dialog-container">
<button id="dialog-btn">カード風ダイアログ</button>
</div>
<!-- ダイアログウィンドウ -->
<div id="dialog" class="dialog">
<div class="dialog-content">
<div class="card-header">
<div class="card-icon">📋</div>
<div class="card-title">カード風ダイアログ</div>
</div>
<div class="card-body">
<p>カード風のデザインで、アイコンとタイトルが上部に配置されています。より視覚的なアプローチです。</p>
</div>
<div class="card-footer">
<button class="close-btn">了解</button>
</div>
</div>
</div>
</div>
.container {
padding: 20px;
}
.container #dialog-container {
text-align: center;
margin-bottom: 20px;
}
.container #dialog-btn {
background-color: #007bff;
color: white;
border: none;
padding: 10px 20px;
border-radius: 4px;
cursor: pointer;
font-size: 16px;
transition: background-color 0.3s;
}
.container #dialog-btn:hover {
background-color: #0056b3;
}
.container .dialog {
display: none;
position: fixed;
z-index: 1000;
left: 0;
top: 0;
width: 100%;
height: 100%;
background-color: rgba(0, 0, 0, 0.5);
animation: fadeIn 0.3s;
}
.container .dialog-content {
background-color: white;
margin: 2% auto;
border-radius: 16px;
width: 80%;
max-width: 500px;
box-shadow: 0 8px 32px rgba(0, 0, 0, 0.1);
animation: slideInFromTop 0.2s ease-out;
overflow: hidden;
}
.container .card-header {
background-color: #f8f9fa;
padding: 20px;
display: flex;
align-items: center;
gap: 15px;
border-bottom: 1px solid #e9ecef;
}
.container .card-icon {
font-size: 24px;
width: 40px;
height: 40px;
display: flex;
align-items: center;
justify-content: center;
background-color: #28a745;
color: white;
border-radius: 50%;
}
.container .card-title {
font-size: 18px;
font-weight: 600;
color: #333;
}
.container .card-body {
padding: 20px;
}
.container .card-body p {
margin: 0;
line-height: 1.6;
color: #666;
}
.container .card-footer {
padding: 20px;
text-align: center;
border-top: 1px solid #e9ecef;
}
.container .close-btn {
background-color: #007bff;
color: white;
border: none;
padding: 8px 16px;
border-radius: 4px;
cursor: pointer;
font-size: 14px;
transition: background-color 0.3s;
}
.container .close-btn:hover {
background-color: #0056b3;
}
/* アニメーション */
@keyframes fadeIn {
from { opacity: 0; }
to { opacity: 1; }
}
@keyframes slideInFromTop {
from {
transform: translateY(-50px);
opacity: 0;
}
to {
transform: translateY(0);
opacity: 1;
}
}
/* レスポンシブ対応 */
@media (max-width: 768px) {
.container .dialog-content {
width: 90%;
margin: 5% auto;
padding: 15px;
}
.container .card-title {
font-size: 16px;
}
.container .card-body p {
font-size: 14px;
}
}
document.addEventListener('DOMContentLoaded', function() {
// ダイアログボタンのイベントリスナーを設定
const dialogButtons = document.querySelectorAll('#dialog-btn');
dialogButtons.forEach(button => {
button.addEventListener('click', function() {
const dialog = document.getElementById('dialog');
if (dialog) {
dialog.style.display = 'block';
// スクロールを無効化
document.body.style.overflow = 'hidden';
}
});
});
// 閉じるボタンのイベントリスナーを設定
const closeButtons = document.querySelectorAll('.close-btn');
closeButtons.forEach(button => {
button.addEventListener('click', function() {
const dialog = this.closest('.dialog');
if (dialog) {
dialog.style.display = 'none';
// スクロールを有効化
document.body.style.overflow = 'auto';
}
});
});
// ESCキーでダイアログを閉じる機能
document.addEventListener('keydown', function(e) {
if (e.key === 'Escape') {
const openDialogs = document.querySelectorAll('.dialog[style*="display: block"]');
openDialogs.forEach(dialog => {
dialog.style.display = 'none';
// スクロールを有効化
document.body.style.overflow = 'auto';
});
}
});
});
【4】ミニマルダイアログボックス
<div class="container">
<div id="dialog-container">
<button id="dialog-btn">ミニマルダイアログ</button>
</div>
<!-- ダイアログウィンドウ -->
<div id="dialog" class="dialog">
<div class="dialog-content">
<p class="minimal-title">ミニマルダイアログ</p>
<p class="minimal-text">シンプルでミニマルなデザイン。余計な装飾を排除し、コンテンツに集中できるデザインです。</p>
<button class="minimal-close-btn">閉じる</button>
</div>
</div>
</div>
.container {
padding: 20px;
}
.container #dialog-container {
text-align: center;
margin-bottom: 20px;
}
.container #dialog-btn {
background-color: #007bff;
color: white;
border: none;
padding: 10px 20px;
border-radius: 4px;
cursor: pointer;
font-size: 16px;
transition: background-color 0.3s;
}
.container #dialog-btn:hover {
background-color: #0056b3;
}
.container .dialog {
display: none;
position: fixed;
z-index: 1000;
left: 0;
top: 0;
width: 100%;
height: 100%;
background-color: rgba(0, 0, 0, 0.5);
animation: fadeIn 0.3s;
}
.container .dialog-content {
background-color: white;
margin: 2% auto;
padding: 30px;
border-radius: 4px;
width: 80%;
max-width: 400px;
box-shadow: 0 2px 10px rgba(0, 0, 0, 0.1);
animation: slideInFromTop 0.2s ease-out;
text-align: center;
}
.container .minimal-title {
font-size: 20px;
font-weight: 300;
margin-bottom: 20px;
color: #333;
}
.container .minimal-text {
margin-bottom: 30px;
line-height: 1.6;
color: #666;
}
.container .minimal-close-btn {
background-color: #007bff;
color: white;
border: none;
padding: 8px 16px;
border-radius: 4px;
cursor: pointer;
font-size: 14px;
transition: background-color 0.3s;
}
.container .minimal-close-btn:hover {
background-color: #0056b3;
}
/* アニメーション */
@keyframes fadeIn {
from { opacity: 0; }
to { opacity: 1; }
}
@keyframes slideInFromTop {
from {
transform: translateY(-50px);
opacity: 0;
}
to {
transform: translateY(0);
opacity: 1;
}
}
/* レスポンシブ対応 */
@media (max-width: 768px) {
.container .dialog-content {
width: 90%;
margin: 5% auto;
padding: 15px;
}
.container .minimal-title {
font-size: 16px;
}
.container .minimal-text {
font-size: 14px;
}
}
document.addEventListener('DOMContentLoaded', function() {
// ダイアログボタンのイベントリスナーを設定
const dialogButtons = document.querySelectorAll('#dialog-btn');
dialogButtons.forEach(button => {
button.addEventListener('click', function() {
const dialog = document.getElementById('dialog');
if (dialog) {
dialog.style.display = 'block';
// スクロールを無効化
document.body.style.overflow = 'hidden';
}
});
});
// 閉じるボタンのイベントリスナーを設定
const closeButtons = document.querySelectorAll('.minimal-close-btn');
closeButtons.forEach(button => {
button.addEventListener('click', function() {
const dialog = this.closest('.dialog');
if (dialog) {
dialog.style.display = 'none';
// スクロールを有効化
document.body.style.overflow = 'auto';
}
});
});
// ESCキーでダイアログを閉じる機能
document.addEventListener('keydown', function(e) {
if (e.key === 'Escape') {
const openDialogs = document.querySelectorAll('.dialog[style*="display: block"]');
openDialogs.forEach(dialog => {
dialog.style.display = 'none';
// スクロールを有効化
document.body.style.overflow = 'auto';
});
}
});
});
【5】グラデーションダイアログボックス
<div class="container">
<div id="dialog-container">
<button id="dialog-btn">グラデーションダイアログ</button>
</div>
<!-- ダイアログウィンドウ -->
<div id="dialog" class="dialog">
<div class="dialog-content">
<div class="gradient-header">
<span>グラデーションダイアログ</span>
</div>
<div class="gradient-body">
<p>美しいグラデーションを使用したダイアログです。視覚的に魅力的で、モダンな印象を与えます。</p>
</div>
<div class="gradient-footer">
<button class="gradient-btn">確認</button>
</div>
</div>
</div>
</div>
.container {
padding: 20px;
}
.container #dialog-container {
text-align: center;
margin-bottom: 20px;
}
.container #dialog-btn {
background-color: #007bff;
color: white;
border: none;
padding: 10px 20px;
border-radius: 4px;
cursor: pointer;
font-size: 16px;
transition: background-color 0.3s;
}
.container #dialog-btn:hover {
background-color: #0056b3;
}
.container .dialog {
display: none;
position: fixed;
z-index: 1000;
left: 0;
top: 0;
width: 100%;
height: 100%;
background-color: rgba(0, 0, 0, 0.5);
animation: fadeIn 0.3s;
}
.container .dialog-content {
background: linear-gradient(135deg, #667eea 0%, #764ba2 100%);
margin: 2% auto;
border-radius: 16px;
width: 80%;
max-width: 500px;
box-shadow: 0 10px 30px rgba(0, 0, 0, 0.3);
animation: slideInFromTop 0.2s ease-out;
overflow: hidden;
}
.container .gradient-header {
padding: 20px;
text-align: center;
border-bottom: 1px solid rgba(255, 255, 255, 0.2);
}
.container .gradient-header span {
margin: 0;
color: white;
font-size: 20px;
font-weight: 600;
}
.container .gradient-body {
padding: 20px;
background-color: rgba(255, 255, 255, 0.1);
}
.container .gradient-body p {
margin: 0;
line-height: 1.6;
color: white;
}
.container .gradient-footer {
padding: 20px;
text-align: center;
}
.container .gradient-btn {
background-color: #007bff;
color: white;
border: none;
padding: 8px 16px;
border-radius: 4px;
cursor: pointer;
font-size: 14px;
transition: background-color 0.3s;
}
.container .gradient-btn:hover {
background-color: #0056b3;
}
/* アニメーション */
@keyframes fadeIn {
from { opacity: 0; }
to { opacity: 1; }
}
@keyframes slideInFromTop {
from {
transform: translateY(-50px);
opacity: 0;
}
to {
transform: translateY(0);
opacity: 1;
}
}
/* レスポンシブ対応 */
@media (max-width: 768px) {
.container .dialog-content {
width: 90%;
margin: 5% auto;
padding: 15px;
}
.container .gradient-header span {
font-size: 16px;
}
.container .gradient-body p {
font-size: 14px;
}
}
// ダイアログボックスの機能
document.addEventListener('DOMContentLoaded', function() {
// ダイアログボタンのイベントリスナーを設定
const dialogButtons = document.querySelectorAll('#dialog-btn');
dialogButtons.forEach(button => {
button.addEventListener('click', function() {
const dialog = document.getElementById('dialog');
if (dialog) {
dialog.style.display = 'block';
// スクロールを無効化
document.body.style.overflow = 'hidden';
}
});
});
// 閉じるボタンのイベントリスナーを設定
const closeButtons = document.querySelectorAll('.gradient-btn');
closeButtons.forEach(button => {
button.addEventListener('click', function() {
const dialog = this.closest('.dialog');
if (dialog) {
dialog.style.display = 'none';
// スクロールを有効化
document.body.style.overflow = 'auto';
}
});
});
// ESCキーでダイアログを閉じる機能
document.addEventListener('keydown', function(e) {
if (e.key === 'Escape') {
const openDialogs = document.querySelectorAll('.dialog[style*="display: block"]');
openDialogs.forEach(dialog => {
dialog.style.display = 'none';
// スクロールを有効化
document.body.style.overflow = 'auto';
});
}
});
});
【6】ボーダー風ダイアログボックス
<div class="container">
<div id="dialog-container">
<button id="dialog-btn">ボーダー風ダイアログ</button>
</div>
<!-- ダイアログウィンドウ -->
<div id="dialog" class="dialog">
<div class="dialog-content">
<div class="border-header">
<span>ボーダー風ダイアログ</span>
</div>
<div class="border-body">
<p>ボーダーを効果的に使用したデザインです。シンプルながらも洗練された印象を与えます。</p>
</div>
<div class="border-footer">
<button class="border-btn">完了</button>
</div>
</div>
</div>
</div>
.container {
padding: 20px;
}
.container #dialog-container {
text-align: center;
margin-bottom: 20px;
}
.container #dialog-btn {
background-color: #007bff;
color: white;
border: none;
padding: 10px 20px;
border-radius: 4px;
cursor: pointer;
font-size: 16px;
transition: background-color 0.3s;
}
.container #dialog-btn:hover {
background-color: #0056b3;
}
.container .dialog {
display: none;
position: fixed;
z-index: 1000;
left: 0;
top: 0;
width: 100%;
height: 100%;
background-color: rgba(0, 0, 0, 0.5);
animation: fadeIn 0.3s;
}
.container .dialog-content {
background-color: white;
margin: 2% auto;
border: 2px solid #17a2b8;
border-radius: 8px;
width: 80%;
max-width: 500px;
box-shadow: 0 4px 8px rgba(0, 0, 0, 0.1);
animation: slideInFromTop 0.2s ease-out;
overflow: hidden;
}
.container .border-header {
background-color: #17a2b8;
color: white;
padding: 15px 20px;
font-size: 18px;
font-weight: 600;
border-bottom: 2px solid #17a2b8;
}
.container .border-body {
padding: 20px;
}
.container .border-body p {
margin: 0;
line-height: 1.6;
color: #555;
}
.container .border-footer {
padding: 20px;
text-align: center;
border-top: 1px solid #e9ecef;
}
.container .border-btn {
background-color: #007bff;
color: white;
border: none;
padding: 8px 16px;
border-radius: 4px;
cursor: pointer;
font-size: 14px;
transition: background-color 0.3s;
}
.container .border-btn:hover {
background-color: #0056b3;
}
/* アニメーション */
@keyframes fadeIn {
from { opacity: 0; }
to { opacity: 1; }
}
@keyframes slideInFromTop {
from {
transform: translateY(-50px);
opacity: 0;
}
to {
transform: translateY(0);
opacity: 1;
}
}
/* レスポンシブ対応 */
@media (max-width: 768px) {
.container .dialog-content {
width: 90%;
margin: 5% auto;
padding: 15px;
}
.container .border-header {
font-size: 16px;
}
.container .border-body p {
font-size: 14px;
}
}
document.addEventListener('DOMContentLoaded', function() {
// ダイアログボタンのイベントリスナーを設定
const dialogButtons = document.querySelectorAll('#dialog-btn');
dialogButtons.forEach(button => {
button.addEventListener('click', function() {
const dialog = document.getElementById('dialog');
if (dialog) {
dialog.style.display = 'block';
// スクロールを無効化
document.body.style.overflow = 'hidden';
}
});
});
// 閉じるボタンのイベントリスナーを設定
const closeButtons = document.querySelectorAll('.border-btn');
closeButtons.forEach(button => {
button.addEventListener('click', function() {
const dialog = this.closest('.dialog');
if (dialog) {
dialog.style.display = 'none';
// スクロールを有効化
document.body.style.overflow = 'auto';
}
});
});
// ESCキーでダイアログを閉じる機能
document.addEventListener('keydown', function(e) {
if (e.key === 'Escape') {
const openDialogs = document.querySelectorAll('.dialog[style*="display: block"]');
openDialogs.forEach(dialog => {
dialog.style.display = 'none';
// スクロールを有効化
document.body.style.overflow = 'auto';
});
}
});
});
【7】ネオンダイアログボックス
<div class="container">
<div id="dialog-container">
<button id="dialog-btn">ネオンダイアログ</button>
</div>
<!-- ダイアログウィンドウ -->
<div id="dialog" class="dialog">
<div class="dialog-content">
<div class="neon-header">
<span>ネオンダイアログ</span>
</div>
<div class="neon-body">
<p>ネオン効果を使用したダイアログです。光るような印象で、サイバーパンクな雰囲気を演出します。</p>
</div>
<div class="neon-footer">
<button class="neon-btn">OK</button>
</div>
</div>
</div>
</div>
.container {
padding: 20px;
}
.container #dialog-container {
text-align: center;
margin-bottom: 20px;
}
.container #dialog-btn {
background-color: #007bff;
color: white;
border: none;
padding: 10px 20px;
border-radius: 4px;
cursor: pointer;
font-size: 16px;
transition: background-color 0.3s;
}
.container #dialog-btn:hover {
background-color: #0056b3;
}
.container .dialog {
display: none;
position: fixed;
z-index: 1000;
left: 0;
top: 0;
width: 100%;
height: 100%;
background-color: rgba(0, 0, 0, 0.5);
animation: fadeIn 0.3s;
}
.container .dialog-content {
background-color: #0a0a0a;
margin: 2% auto;
border-radius: 12px;
width: 80%;
max-width: 500px;
border: 2px solid #00ffff;
box-shadow: 0 0 20px rgba(0, 255, 255, 0.5), inset 0 0 20px rgba(0, 255, 255, 0.1);
animation: slideInFromTop 0.2s ease-out;
overflow: hidden;
}
.container .neon-header {
background: linear-gradient(135deg, #00ffff, #0080ff);
color: #0a0a0a;
padding: 20px;
text-align: center;
border-bottom: 2px solid #00ffff;
}
.container .neon-header span {
margin: 0;
font-size: 20px;
font-weight: 600;
text-shadow: 0 0 10px rgba(0, 255, 255, 0.8);
}
.container .neon-body {
padding: 20px;
background-color: #0a0a0a;
}
.container .neon-body p {
margin: 0;
line-height: 1.6;
color: #00ffff;
text-shadow: 0 0 5px rgba(0, 255, 255, 0.5);
}
.container .neon-footer {
padding: 20px;
text-align: center;
background-color: #0a0a0a;
border-top: 2px solid #00ffff;
}
.container .neon-btn {
background-color: #00ffff;
color: #0a0a0a;
border: 2px solid #00ffff;
padding: 8px 16px;
border-radius: 4px;
cursor: pointer;
font-size: 14px;
transition: all 0.3s;
box-shadow: 0 0 10px rgba(0, 255, 255, 0.5);
font-weight: 600;
}
.container .neon-btn:hover {
background-color: #0a0a0a;
color: #00ffff;
box-shadow: 0 0 20px rgba(0, 255, 255, 0.8);
}
/* アニメーション */
@keyframes fadeIn {
from { opacity: 0; }
to { opacity: 1; }
}
@keyframes slideInFromTop {
from {
transform: translateY(-50px);
opacity: 0;
}
to {
transform: translateY(0);
opacity: 1;
}
}
/* レスポンシブ対応 */
@media (max-width: 768px) {
.container .dialog-content {
width: 90%;
margin: 5% auto;
padding: 15px;
}
.container .neon-header span {
font-size: 16px;
}
.container .neon-body p {
font-size: 14px;
}
}
document.addEventListener('DOMContentLoaded', function() {
// ダイアログボタンのイベントリスナーを設定
const dialogButtons = document.querySelectorAll('#dialog-btn');
dialogButtons.forEach(button => {
button.addEventListener('click', function() {
const dialog = document.getElementById('dialog');
if (dialog) {
dialog.style.display = 'block';
// スクロールを無効化
document.body.style.overflow = 'hidden';
}
});
});
// 閉じるボタンのイベントリスナーを設定
const closeButtons = document.querySelectorAll('.neon-btn');
closeButtons.forEach(button => {
button.addEventListener('click', function() {
const dialog = this.closest('.dialog');
if (dialog) {
dialog.style.display = 'none';
// スクロールを有効化
document.body.style.overflow = 'auto';
}
});
});
// ESCキーでダイアログを閉じる機能
document.addEventListener('keydown', function(e) {
if (e.key === 'Escape') {
const openDialogs = document.querySelectorAll('.dialog[style*="display: block"]');
openDialogs.forEach(dialog => {
dialog.style.display = 'none';
// スクロールを有効化
document.body.style.overflow = 'auto';
});
}
});
});