Dialog / 23 ブルータリズム|Brutalism
デザイン見本
Brutalism Dialog
高コントラストと極太ボーダーのソリッドなデザインです。
極太ボーダー、高コントラストな配色、そして黒一色のハードなドロップシャドウで構成された、ネオ・ブルータリズム風のダイアログデザインです。ボタンを押し込んだ際に影が消失することで、クリック感をフィジカルに表現しています。
実装コード
HTML
<button id="dialog-btn-23">Brutalism<br>Dialog</button>
<div id="dialog-23" class="dialog">
<div class="dialog-content-23">
<div class="brutalism-header">
<span>Brutalism Dialog</span>
</div>
<div class="brutalism-body">
<p>高コントラストと極太ボーダーのソリッドなデザインです。</p>
</div>
<div class="brutalism-footer">
<button class="close-btn-23">NO</button>
<button class="close-btn-23 primary">YES</button>
</div>
</div>
</div>
CSS
#dialog-btn-23 {
background-color: #fff;
color: #000;
border: 3px solid #000;
padding: 12px 24px;
cursor: pointer;
font-size: 18px;
font-weight: 800;
min-width: 200px;
min-height: 60px;
display: block;
margin: 0 auto;
text-align: center;
box-shadow: 6px 6px 0px #000;
transition: transform 0.1s, box-shadow 0.1s;
}
#dialog-btn-23:hover {
transform: translate(2px, 2px);
box-shadow: 4px 4px 0px #000;
}
#dialog-btn-23:active {
transform: translate(6px, 6px);
box-shadow: 0px 0px 0px #000;
}
#dialog-23 {
display: none;
position: fixed;
z-index: 2147483647;
left: 0; top: 0; width: 100%; height: 100%;
background-color: rgba(255, 230, 230, 0.9);
animation: fadeIn-23 0.2s;
}
.dialog-content-23 {
background: #fff;
border: 4px solid #000;
width: 80%;
max-width: 480px;
margin: 10% auto;
position: relative;
box-shadow: 12px 12px 0px #000;
animation: dropIn-23 0.3s cubic-bezier(0.25, 1, 0.5, 1);
}
.brutalism-header {
background: #ff5e5e;
color: #fff;
padding: 15px 20px;
border-bottom: 4px solid #000;
font-weight: 900;
font-size: 20px;
text-transform: uppercase;
letter-spacing: 1px;
}
.brutalism-body {
padding: 30px 20px;
}
.brutalism-body p {
font-size: 16px;
font-weight: 600;
line-height: 1.5;
margin: 0;
color: #000;
}
.brutalism-footer {
display: flex;
justify-content: flex-end;
padding: 20px;
border-top: 4px solid #000;
background: #f0f0f0;
gap: 15px;
}
.close-btn-23 {
background: #fff;
color: #000;
border: 3px solid #000;
padding: 10px 20px;
cursor: pointer;
font-size: 16px;
font-weight: 800;
box-shadow: 4px 4px 0px #000;
transition: all 0.1s;
}
.close-btn-23.primary {
background: #6bff6b;
}
.close-btn-23:active {
transform: translate(4px, 4px);
box-shadow: 0px 0px 0px #000;
}
@keyframes fadeIn-23 {
from { opacity: 0; } to { opacity: 1; }
}
@keyframes dropIn-23 {
0% { transform: translateY(-50px) rotate(-2deg); opacity: 0; }
100% { transform: translateY(0) rotate(0); opacity: 1; }
}
@media (max-width: 768px) {
.dialog-content-23 { width: 90%; }
}
JS
(function () {
var btn = document.getElementById('dialog-btn-23');
var dialog = document.getElementById('dialog-23');
var closeBtns = dialog.querySelectorAll('.close-btn-23');
if (!btn || !dialog) return;
function openDialog() {
dialog.style.display = 'block';
document.body.style.overflow = 'hidden';
}
function closeDialog() {
dialog.style.display = 'none';
document.body.style.overflow = 'auto';
}
btn.addEventListener('click', openDialog);
closeBtns.forEach(function(b) { b.addEventListener('click', closeDialog); });
dialog.addEventListener('click', function (e) {
if (e.target === dialog) {
closeDialog();
}
});
document.addEventListener('keydown', function (e) {
if (e.key === 'Escape' && dialog.style.display === 'block') {
closeDialog();
}
});
})();