Files
zkxw/docs/panel-tab-demos/_shared.css
T
2026-06-16 17:10:01 +08:00

577 lines
11 KiB
CSS
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
/* 质检物料库 · 面板 Tab 样式 Demo 共享样式(Fresh Mint Token) */
:root {
--primary: #10b981;
--primary-dark: #059669;
--primary-bg: #ecfdf5;
--text: #1e293b;
--text-muted: #64748b;
--border: #e2e8f0;
--bg-page: #f8fafc;
--surface: #fff;
--radius: 10px;
--radius-sm: 8px;
}
* {
box-sizing: border-box;
}
body {
margin: 0;
min-height: 100vh;
font-family: Inter, -apple-system, BlinkMacSystemFont, sans-serif;
font-size: 14px;
line-height: 1.5;
color: var(--text);
background: var(--bg-page);
}
/* ── 顶栏说明 ── */
.demo-banner {
position: sticky;
top: 0;
z-index: 200;
padding: 12px 24px;
background: var(--surface);
border-bottom: 1px solid var(--border);
display: flex;
align-items: center;
justify-content: space-between;
gap: 16px;
flex-wrap: wrap;
box-shadow: 0 1px 3px rgba(15, 23, 42, 0.04);
}
.demo-banner h1 {
margin: 0;
font-size: 15px;
font-weight: 600;
}
.demo-banner p {
margin: 4px 0 0;
font-size: 12px;
color: var(--text-muted);
}
.demo-banner__actions {
display: flex;
gap: 8px;
flex-wrap: wrap;
align-items: center;
}
.demo-banner a {
padding: 6px 12px;
border-radius: 6px;
font-size: 12px;
font-weight: 500;
text-decoration: none;
color: var(--text-muted);
border: 1px solid var(--border);
background: var(--surface);
}
.demo-banner a:hover {
border-color: var(--primary);
color: var(--primary-dark);
}
.demo-banner a.is-current {
background: var(--primary-bg);
border-color: var(--primary);
color: var(--primary-dark);
}
.demo-badge {
display: inline-block;
padding: 2px 8px;
border-radius: 6px;
font-size: 11px;
font-weight: 600;
background: var(--primary-bg);
color: var(--primary-dark);
}
/* ── 页面骨架(模拟 web-admin page-container) ── */
.page-wrap {
padding: 24px;
max-width: 1280px;
margin: 0 auto;
}
.panel {
background: var(--surface);
border: 1px solid var(--border);
border-radius: var(--radius);
overflow: hidden;
}
.panel-top {
padding: 16px 24px 0;
}
.panel-top h2 {
margin: 0;
font-size: 16px;
font-weight: 600;
display: flex;
align-items: center;
gap: 10px;
}
.panel-top h2::before {
content: '';
width: 4px;
height: 16px;
border-radius: 2px;
background: var(--primary);
flex-shrink: 0;
}
/* Tab 区域容器 */
.panel-tab-zone {
padding: 0 24px;
}
/* 模拟内容区 */
.mock-content {
border-top: 1px solid var(--border);
}
.filter-block {
padding: 16px 24px;
}
.filter-grid {
display: grid;
grid-template-columns: repeat(3, minmax(0, 1fr));
gap: 12px 16px;
}
.filter-item label {
display: block;
font-size: 11px;
font-weight: 500;
color: var(--text-muted);
margin-bottom: 6px;
}
.filter-item .fake-input {
height: 36px;
border: 1px solid var(--border);
border-radius: var(--radius-sm);
padding: 0 12px;
background: var(--surface);
color: var(--text-muted);
font-size: 13px;
display: flex;
align-items: center;
}
.list-toolbar {
padding: 12px 24px;
border-top: 1px solid var(--border);
display: flex;
gap: 8px;
align-items: center;
flex-wrap: wrap;
}
.btn {
height: 36px;
padding: 0 14px;
border-radius: var(--radius-sm);
font-size: 13px;
font-weight: 500;
border: 1px solid var(--border);
background: var(--surface);
color: var(--text);
cursor: default;
}
.btn-primary {
background: var(--primary);
border-color: var(--primary);
color: #fff;
}
.sel-hint {
font-size: 13px;
color: var(--text-muted);
}
.sel-hint strong {
color: var(--primary-dark);
}
.list-body {
padding: 0 24px 24px;
}
.fake-table {
border: 1px solid var(--border);
border-radius: var(--radius-sm);
overflow: hidden;
}
.fake-table-head,
.fake-table-row {
display: grid;
grid-template-columns: 48px 1.2fr 1fr 1fr 1fr;
gap: 8px;
padding: 10px 16px;
font-size: 13px;
align-items: center;
}
.fake-table-head {
background: #f1f5f9;
font-weight: 600;
color: var(--text-muted);
font-size: 12px;
}
.fake-table-row {
border-top: 1px solid var(--border);
color: var(--text);
}
.fake-table-row:nth-child(even) {
background: #fafafa;
}
/* ── Tab 基础:隐藏非激活面板 ── */
.tab-panel {
display: none;
}
.tab-panel.is-active {
display: block;
}
/* ── 样式 01:默认下划线(Element Plus 风格) ── */
.tabs-01 {
display: flex;
gap: 0;
border-bottom: 1px solid var(--border);
margin-top: 12px;
}
.tabs-01 .tab-btn {
padding: 12px 20px;
margin-bottom: -1px;
border: none;
background: transparent;
font-size: 14px;
font-weight: 500;
color: var(--text-muted);
cursor: pointer;
border-bottom: 2px solid transparent;
transition: color 0.15s, border-color 0.15s;
}
.tabs-01 .tab-btn:hover {
color: var(--primary-dark);
}
.tabs-01 .tab-btn.is-active {
color: var(--primary-dark);
border-bottom-color: var(--primary);
}
/* ── 样式 02:胶囊分段(Segmented Pill) ── */
.tabs-02 {
display: inline-flex;
gap: 4px;
margin-top: 16px;
padding: 4px;
background: linear-gradient(180deg, var(--primary-bg, #ecfdf5) 0%, #fff 100%);
border-radius: var(--radius-sm);
border: 1px solid #d1fae5;
}
.tabs-02 .tab-btn {
padding: 8px 20px;
border: none;
border-radius: 6px;
background: transparent;
font-size: 13px;
font-weight: 500;
color: var(--text-muted);
cursor: pointer;
transition: background 0.15s, color 0.15s, box-shadow 0.15s;
}
.tabs-02 .tab-btn:hover:not(.is-active) {
color: #065f46;
}
.tabs-02 .tab-btn.is-active {
background: var(--primary, #10b981);
color: #fff;
box-shadow: 0 1px 3px rgba(16, 185, 129, 0.28);
font-weight: 500;
}
/* ── 样式 03:卡片 Tab(独立卡片 + 底边融合) ── */
.tabs-03 {
display: flex;
gap: 8px;
margin-top: 16px;
align-items: flex-end;
}
.tabs-03 .tab-btn {
padding: 10px 20px;
border: 1px solid var(--border);
border-bottom: none;
border-radius: var(--radius-sm) var(--radius-sm) 0 0;
background: #f8fafc;
font-size: 13px;
font-weight: 500;
color: var(--text-muted);
cursor: pointer;
position: relative;
top: 1px;
transition: background 0.15s, color 0.15s;
}
.tabs-03 .tab-btn:hover:not(.is-active) {
background: var(--primary-bg);
color: var(--primary-dark);
}
.tabs-03 .tab-btn.is-active {
background: var(--surface);
color: var(--primary-dark);
font-weight: 600;
border-color: var(--border);
z-index: 1;
}
.tabs-03-wrap {
border-bottom: 1px solid var(--border);
margin-bottom: -1px;
}
/* ── 样式 04:图标 + 文字(横向信息块) ── */
.tabs-04 {
display: flex;
gap: 12px;
margin-top: 16px;
flex-wrap: wrap;
}
.tabs-04 .tab-btn {
display: flex;
align-items: center;
gap: 10px;
padding: 10px 16px;
border: 1px solid var(--border);
border-radius: var(--radius-sm);
background: var(--surface);
font-size: 13px;
font-weight: 500;
color: var(--text-muted);
cursor: pointer;
transition: border-color 0.15s, background 0.15s, color 0.15s;
min-width: 140px;
}
.tabs-04 .tab-icon {
width: 32px;
height: 32px;
border-radius: 8px;
background: #f1f5f9;
display: flex;
align-items: center;
justify-content: center;
flex-shrink: 0;
color: var(--text-muted);
}
.tabs-04 .tab-btn:hover:not(.is-active) {
border-color: #a7f3d0;
background: var(--primary-bg);
}
.tabs-04 .tab-btn.is-active {
border-color: var(--primary);
background: var(--primary-bg);
color: var(--primary-dark);
font-weight: 600;
}
.tabs-04 .tab-btn.is-active .tab-icon {
background: var(--primary);
color: #fff;
}
/* ── 样式 05:左侧竖条强调(文字 Tab + 激活竖条) ── */
.tabs-05 {
display: flex;
gap: 0;
margin-top: 12px;
border-bottom: 1px solid var(--border);
}
.tabs-05 .tab-btn {
padding: 12px 24px;
border: none;
background: transparent;
font-size: 14px;
font-weight: 500;
color: var(--text-muted);
cursor: pointer;
position: relative;
transition: color 0.15s, background 0.15s;
}
.tabs-05 .tab-btn::before {
content: '';
position: absolute;
left: 12px;
top: 50%;
transform: translateY(-50%);
width: 3px;
height: 0;
border-radius: 2px;
background: var(--primary);
transition: height 0.15s;
}
.tabs-05 .tab-btn.is-active::before {
height: 16px;
}
.tabs-05 .tab-btn:hover:not(.is-active) {
color: var(--text);
background: #f8fafc;
}
.tabs-05 .tab-btn.is-active {
color: var(--primary-dark);
font-weight: 600;
background: linear-gradient(180deg, var(--primary-bg) 0%, transparent 100%);
}
/* ── 样式 06:全宽底轨滑动高亮(Modern Track) ── */
.tabs-06 {
margin-top: 16px;
}
.tabs-06-inner {
position: relative;
}
.tabs-06-track {
display: grid;
grid-template-columns: repeat(3, 1fr);
background: #f1f5f9;
border-radius: var(--radius-sm);
padding: 4px;
border: 1px solid var(--border);
}
.tabs-06 .tab-btn {
padding: 10px 12px;
border: none;
border-radius: 6px;
background: transparent;
font-size: 13px;
font-weight: 500;
color: var(--text-muted);
cursor: pointer;
text-align: center;
transition: color 0.2s;
z-index: 1;
}
.tabs-06 .tab-btn.is-active {
color: var(--primary-dark);
font-weight: 600;
}
.tabs-06-slider {
position: absolute;
top: 4px;
left: 4px;
width: calc((100% - 8px) / 3);
height: calc(100% - 8px);
background: var(--surface);
border-radius: 6px;
box-shadow: 0 1px 4px rgba(15, 23, 42, 0.1);
transition: transform 0.25s cubic-bezier(0.4, 0, 0.2, 1);
pointer-events: none;
}
.tabs-06[data-active='1'] .tabs-06-slider {
transform: translateX(100%);
}
.tabs-06[data-active='2'] .tabs-06-slider {
transform: translateX(200%);
}
/* ── 样式 07:极简文字 + 点状指示 ── */
.tabs-07 {
display: flex;
gap: 32px;
margin-top: 16px;
padding-bottom: 12px;
border-bottom: 1px solid var(--border);
}
.tabs-07 .tab-btn {
padding: 4px 0;
border: none;
background: transparent;
font-size: 14px;
font-weight: 500;
color: var(--text-muted);
cursor: pointer;
display: flex;
flex-direction: column;
align-items: center;
gap: 8px;
transition: color 0.15s;
}
.tabs-07 .tab-dot {
width: 6px;
height: 6px;
border-radius: 50%;
background: transparent;
transition: background 0.15s, transform 0.15s;
}
.tabs-07 .tab-btn:hover:not(.is-active) {
color: var(--text);
}
.tabs-07 .tab-btn.is-active {
color: var(--primary-dark);
font-weight: 600;
}
.tabs-07 .tab-btn.is-active .tab-dot {
background: var(--primary);
transform: scale(1.2);
}
/* 样式说明卡片 */
.style-note {
margin: 24px 0 0;
padding: 14px 18px;
background: #fffbeb;
border: 1px solid #fde68a;
border-radius: var(--radius-sm);
font-size: 13px;
color: #92400e;
}
.style-note strong {
color: #78350f;
}