从 MiuiX Colors.kt 精确提取,亮色/暗色自动切换。
<div class="demo-color-swatch" style="background:var(--miuix-primary);color:#fff">primary</div>
<div class="demo-color-swatch" style="background:var(--miuix-primary-container);color:#fff">primaryContainer</div>
<div class="demo-color-swatch" style="background:var(--miuix-error);color:#fff">error</div>
<div class="demo-color-swatch" style="background:var(--miuix-secondary);color:var(--miuix-on-secondary)">secondary</div>
<div class="demo-color-swatch" style="background:var(--miuix-secondary-variant);color:var(--miuix-on-secondary-variant)">secondaryVariant</div>
<div class="demo-color-swatch" style="background:var(--miuix-surface);color:var(--miuix-on-surface)">surface</div>
<div class="demo-color-swatch" style="background:var(--miuix-surface-variant);color:var(--miuix-on-surface)">surfaceVariant</div>
<div class="demo-color-swatch" style="background:var(--miuix-background);color:var(--miuix-on-background)">background</div>
<div class="demo-color-swatch" style="background:var(--miuix-surface-container);color:var(--miuix-on-surface-container)">surfaceContainer</div>
<div class="demo-color-swatch" style="background:var(--miuix-surface-container-highest);color:var(--miuix-on-surface-container-highest)">containerHighest</div>
<div class="demo-color-swatch" style="background:var(--miuix-outline);color:#fff">outline</div>
<div class="demo-color-swatch" style="background:var(--miuix-divider-line);color:#fff">divider</div><div class="demo-row">
<button class="miuix-btn primary" onclick="MiuixTheme.set('dark')">🌙 暗色</button>
<button class="miuix-btn primary" onclick="MiuixTheme.set('light')">☀️ 亮色</button>
<button class="miuix-btn" onclick="MiuixTheme.set('auto')">🔄 跟随系统</button>
<button class="miuix-btn" onclick="MiuixTheme.toggle()">切换</button>
</div>源码: Switch.kt — 49×28dp 胶囊, 弹簧回弹 (dampingRatio=0.6, stiffness=987)
<div class="demo-row">
<span class="demo-label">默认关闭</span>
<label class="miuix-switch">
<input type="checkbox">
<span class="track"></span>
</label>
</div>
<div class="demo-row">
<span class="demo-label">默认开启</span>
<label class="miuix-switch">
<input type="checkbox" checked>
<span class="track"></span>
</label>
</div>
<div class="demo-row">
<span class="demo-label">禁用关</span>
<label class="miuix-switch">
<input type="checkbox" disabled>
<span class="track"></span>
</label>
</div>
<div class="demo-row">
<span class="demo-label">禁用开</span>
<label class="miuix-switch">
<input type="checkbox" checked disabled>
<span class="track"></span>
</label>
</div>MIUI 风格圆角方框 + 弹跳勾选动画
<div class="demo-row">
<label class="miuix-checkbox">
<input type="checkbox">
<span class="checkmark"></span>
</label>
<span>未选中</span>
</div>
<div class="demo-row">
<label class="miuix-checkbox">
<input type="checkbox" checked>
<span class="checkmark"></span>
</label>
<span>已选中</span>
</div>
<div class="demo-row">
<label class="miuix-checkbox">
<input type="checkbox" disabled>
<span class="checkmark"></span>
</label>
<span>禁用</span>
</div>源码: Button.kt — 16dp 圆角, 58×40dp 最小尺寸, Sink 按压反馈
<div class="demo-row">
<button class="miuix-btn primary">主要按钮</button>
<button class="miuix-btn">次要按钮</button>
<button class="miuix-btn text">文本按钮</button>
</div>
<div class="demo-row">
<button class="miuix-btn primary" disabled>禁用主要</button>
<button class="miuix-btn" disabled>禁用次要</button>
</div>源码: Card.kt — 16dp 圆角, surfaceContainer 背景, Sink / Tilt 按压反馈
<div class="miuix-card pressable demo-showcase-card">
<h4>Sink 按压反馈</h4>
<p>点击/长按会产生 scale(0.97) 下沉效果,松开弹回。</p>
</div>
<div class="miuix-card tiltable demo-showcase-card">
<h4>Tilt 倾斜反馈</h4>
<p>3D perspective 倾斜效果,模拟实体卡片手感。</p>
</div>
<div class="miuix-card demo-showcase-card">
<h4>普通卡片</h4>
<p>无按压反馈,用于纯展示信息。</p>
</div>HyperOS 设置页 SuperArrow — 标题 + 摘要 + 右侧箭头
<div class="miuix-card" style="overflow:hidden">
<div class="miuix-small-title">通用</div>
<div class="miuix-list-item">
<div class="miuix-list-item-content">
<div class="miuix-list-item-title">WLAN</div>
<div class="miuix-list-item-summary">已连接到 HyperOS-5G</div>
</div>
<div class="miuix-list-item-arrow"></div>
</div>
<hr class="miuix-divider">
<div class="miuix-list-item">
<div class="miuix-list-item-content">
<div class="miuix-list-item-title">蓝牙</div>
<div class="miuix-list-item-summary">已关闭</div>
</div>
<label class="miuix-switch" style="flex-shrink:0">
<input type="checkbox"><span class="track"></span>
</label>
</div>
<hr class="miuix-divider">
<div class="miuix-list-item">
<div class="miuix-list-item-content">
<div class="miuix-list-item-title">移动网络</div>
<div class="miuix-list-item-summary">中国移动 · 5G</div>
</div>
<div class="miuix-list-item-arrow"></div>
</div>
<div class="miuix-small-title">系统</div>
<div class="miuix-list-item">
<div class="miuix-list-item-content">
<div class="miuix-list-item-title">显示与亮度</div>
</div>
<div class="miuix-list-item-arrow"></div>
</div>
<hr class="miuix-divider">
<div class="miuix-list-item">
<div class="miuix-list-item-content">
<div class="miuix-list-item-title">声音与振动</div>
</div>
<div class="miuix-list-item-arrow"></div>
</div>
</div><div class="miuix-searchbar" style="max-width:400px">
<svg class="miuix-searchbar-icon" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2"><circle cx="11" cy="11" r="8"/><path d="M21 21l-4.35-4.35"/></svg>
<input type="text" placeholder="搜索设置项…">
</div><div class="miuix-tabs" id="demo-tabs">
<button class="miuix-tab active" onclick="switchTab(this)">全部</button>
<button class="miuix-tab" onclick="switchTab(this)">推荐</button>
<button class="miuix-tab" onclick="switchTab(this)">应用</button>
<button class="miuix-tab" onclick="switchTab(this)">游戏</button>
</div><div style="max-width:300px">
<input type="range" class="miuix-slider" value="60" min="0" max="100">
</div><div class="demo-row">
<span class="demo-label">圆形</span>
<div class="miuix-spinner"></div>
</div>
<div class="demo-row">
<span class="demo-label">线性 60%</span>
<div class="miuix-progress" style="width:200px">
<div class="miuix-progress-bar" style="width:60%"></div>
</div>
</div>
<div class="demo-row">
<span class="demo-label">不定量</span>
<div class="miuix-progress indeterminate" style="width:200px">
<div class="miuix-progress-bar"></div>
</div>
</div><div class="demo-row">
<button class="miuix-btn primary" onclick="MiuixSnackbar.show('这是一条消息', {duration:3000})">普通消息</button>
<button class="miuix-btn" onclick="MiuixSnackbar.show('操作已完成', {action:'撤销', onAction:function(){alert('已撤销')}})">带操作</button>
</div><button class="miuix-btn primary" onclick="MiuixBottomSheet.open('demo-sheet')">打开半屏弹窗</button><div class="miuix-bottomsheet-handle"></div>
<div class="miuix-bottomsheet-content">
<h3 style="font-size:20px;margin-bottom:12px">分享到</h3>
<div class="miuix-list-item" onclick="MiuixBottomSheet.close('demo-sheet')">
<div class="miuix-list-item-content">
<div class="miuix-list-item-title">微信</div>
</div>
<div class="miuix-list-item-arrow"></div>
</div>
<hr class="miuix-divider">
<div class="miuix-list-item" onclick="MiuixBottomSheet.close('demo-sheet')">
<div class="miuix-list-item-content">
<div class="miuix-list-item-title">QQ</div>
</div>
<div class="miuix-list-item-arrow"></div>
</div>
<hr class="miuix-divider">
<div class="miuix-list-item" onclick="MiuixBottomSheet.close('demo-sheet')">
<div class="miuix-list-item-content">
<div class="miuix-list-item-title">复制链接</div>
</div>
<div class="miuix-list-item-arrow"></div>
</div>
<div style="height:16px"></div>
<button class="miuix-btn" style="width:100%" onclick="MiuixBottomSheet.close('demo-sheet')">取消</button>
</div><button class="miuix-btn primary" onclick="MiuixDialog.open('demo-dialog')">打开对话框</button><div class="demo-row">
<button class="miuix-fab" style="position:relative">
<svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2"><line x1="12" y1="5" x2="12" y2="19"/><line x1="5" y1="12" x2="19" y2="12"/></svg>
</button>
</div>MiuiX Design System CSS 复刻 · 源自 compose-miuix-ui/miuix v0.8.5