← 一覧へ

Tab Menu / 33 ブループリント|Blueprint

デザイン見本

  • SEC.1
  • SEC.2
  • SEC.3
Drawing No. A-001 — Specifications for Section 1.
Drawing No. A-002 — Specifications for Section 2.
Drawing No. A-003 — Specifications for Section 3.

建築・機械系の設計図(ブループリント)をイメージしたデザインです。紺色グリッド背景にモノスペースフォントを組み合わせ、コンテンツは左からスライドインし図面のセクションが展開されるような演出を実現しています。選択タブは下辺のハイライト(`inset box-shadow`)で識別します。

実装コード

HTML
<div class="tab-container">
    <ul>
        <li class="selected" data-id="tab-1">SEC.1</li>
        <li data-id="tab-2">SEC.2</li>
        <li data-id="tab-3">SEC.3</li>
    </ul>
    <div class="tab-content selected" id="tab-1">
        Drawing No. A-001 -- Specifications for Section 1.
    </div>
    <div class="tab-content" id="tab-2">
        Drawing No. A-002 -- Specifications for Section 2.
    </div>
    <div class="tab-content" id="tab-3">
        Drawing No. A-003 -- Specifications for Section 3.
    </div>
</div>
CSS
.tab-container {
    background:
        linear-gradient(rgba(126, 184, 212, 0.08) 1px, transparent 1px),
        linear-gradient(90deg, rgba(126, 184, 212, 0.08) 1px, transparent 1px),
        #0a1628;
    background-size: 20px 20px, 20px 20px, auto;
    border: 1px solid #1e3a5f;
    border-radius: 4px;
    overflow: hidden;
    font-family: 'Courier New', Courier, monospace;
}

.tab-container ul {
    margin: 0;
    padding: 0;
    list-style: none;
    display: flex;
    border-bottom: 1px solid rgba(126, 184, 212, 0.3);
    background: rgba(0, 0, 0, 0.2);
}

.tab-container ul li {
    flex: 1;
    padding: 14px 10px;
    text-align: center;
    cursor: pointer;
    color: rgba(168, 207, 232, 0.4);
    font-size: 12px;
    letter-spacing: 2px;
    text-transform: uppercase;
    position: relative;
    border-right: 1px solid rgba(126, 184, 212, 0.2);
    transition: all 0.3s ease;
}

.tab-container ul li:last-child {
    border-right: none;
}

.tab-container ul li:not(.selected):hover {
    color: rgba(168, 207, 232, 0.7);
    background: rgba(126, 184, 212, 0.05);
}

.tab-container ul li.selected {
    color: #e0f0ff;
    background: rgba(126, 184, 212, 0.15);
    font-weight: bold;
    box-shadow: inset 0 -3px 0 #7eb8d4;
}

.tab-container .tab-content {
    display: none;
    padding: 24px 20px;
    min-height: 150px;
    color: rgba(168, 207, 232, 0.8);
    line-height: 1.8;
    font-size: 13px;
    letter-spacing: 0.5px;
    position: relative;
}

.tab-container .tab-content::before {
    content: '';
    position: absolute;
    top: 10px;
    left: 14px;
    right: 14px;
    bottom: 10px;
    border: 1px solid rgba(126, 184, 212, 0.15);
    border-radius: 2px;
    pointer-events: none;
}

.tab-container .tab-content.selected {
    display: block;
    animation: blueprintSlide 0.4s ease-out;
}

@keyframes blueprintSlide {
    from { opacity: 0; transform: translateX(-12px); }
    to { opacity: 1; transform: translateX(0); }
}
JS
(function () {
    'use strict';
    document.addEventListener('DOMContentLoaded', function () {
        var container = document.querySelector('.tab-container');
        if (!container) return;
        var items = container.querySelectorAll('ul li');
        var contents = container.querySelectorAll('.tab-content');

        items.forEach(function (item) {
            item.addEventListener('click', function () {
                items.forEach(function (i) { i.classList.remove('selected'); });
                contents.forEach(function (c) { c.classList.remove('selected'); });
                item.classList.add('selected');
                var target = document.getElementById(item.getAttribute('data-id'));
                if (target) target.classList.add('selected');
            });
        });
    });
})();