← 一覧へ

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();
        }
    });
})();