UNPKG

mr-component

Version:
453 lines (398 loc) 14.6 kB
<!DOCTYPE html> <html lang="zh-CN"> <head> <meta charset="UTF-8" /> <meta name="viewport" content="width=device-width, initial-scale=1.0" /> <title>MrButton 组件演示</title> <style> * { margin: 0; padding: 0; box-sizing: border-box; } body { font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', 'PingFang SC', 'Hiragino Sans GB', 'Microsoft YaHei', 'Helvetica Neue', Helvetica, Arial, sans-serif; background: #f7f8fa; padding: 20px; line-height: 1.6; } .demo-container { max-width: 800px; margin: 0 auto; background: white; border-radius: 12px; padding: 24px; box-shadow: 0 2px 12px rgba(0, 0, 0, 0.1); } .demo-title { font-size: 24px; font-weight: 600; margin-bottom: 8px; color: #323233; text-align: center; } .demo-subtitle { font-size: 14px; color: #969799; text-align: center; margin-bottom: 32px; } .demo-section { margin-bottom: 32px; } .section-title { font-size: 16px; font-weight: 600; margin-bottom: 16px; color: #323233; padding-bottom: 8px; border-bottom: 1px solid #ebedf0; } .button-group { display: flex; flex-wrap: wrap; gap: 12px; margin-bottom: 16px; } .button-demo { background: #f7f8fa; padding: 16px; border-radius: 8px; margin-bottom: 12px; } .button-demo-title { font-size: 14px; color: #646566; margin-bottom: 8px; } .mock-button { display: inline-flex; align-items: center; justify-content: center; padding: 12px 16px; border: none; border-radius: 12px; font-size: 14px; font-weight: 500; cursor: pointer; transition: all 0.3s ease; margin-right: 8px; margin-bottom: 8px; font-family: inherit; } /* Payment Primary */ .payment-primary { background: #2196f3; color: white; box-shadow: 0 1px 3px rgba(33, 150, 243, 0.3); } .payment-primary:hover { background: #1976d2; box-shadow: 0 4px 6px rgba(33, 150, 243, 0.3); transform: translateY(-1px); } .payment-primary:active { transform: scale(0.98); } /* Payment Secondary */ .payment-secondary { background: white; color: #212121; border: 1px solid #e0e0e0; } .payment-secondary:hover { background: #fafafa; border-color: #2196f3; color: #2196f3; } /* Success Action */ .success-action { background: #4caf50; color: white; box-shadow: 0 1px 3px rgba(76, 175, 80, 0.3); } .success-action:hover { background: #388e3c; box-shadow: 0 4px 6px rgba(76, 175, 80, 0.3); transform: translateY(-1px); } .success-action:active { transform: scale(0.98); } /* Font Sizes */ .font-h4 { font-size: 16px; padding: 16px 20px; min-height: 48px; } .font-h5 { font-size: 14px; padding: 12px 16px; min-height: 40px; } .font-h6 { font-size: 13px; padding: 8px 12px; min-height: 32px; } .font-h7 { font-size: 12px; padding: 4px 8px; min-height: 28px; } /* Amount Style */ .amount { font-weight: 700; } /* Disabled */ .disabled { opacity: 0.6; cursor: not-allowed; } .disabled:hover { transform: none !important; box-shadow: none !important; } .code-block { background: #f5f5f5; border: 1px solid #e1e1e1; border-radius: 6px; padding: 12px; font-family: 'Monaco', 'Menlo', 'Ubuntu Mono', monospace; font-size: 12px; color: #333; margin-top: 8px; overflow-x: auto; } .usage-scenario { background: #f0f9ff; border: 1px solid #0ea5e9; border-radius: 8px; padding: 16px; margin-top: 16px; } .usage-scenario h4 { color: #0369a1; margin-bottom: 8px; font-size: 14px; } .responsive-demo { background: #fff7ed; border: 1px solid #fb923c; border-radius: 8px; padding: 16px; margin-top: 16px; } .responsive-demo h4 { color: #c2410c; margin-bottom: 8px; font-size: 14px; } @media (max-width: 768px) { .mock-button.font-h4 { font-size: 14px; padding: 12px 16px; min-height: 40px; } .mock-button.font-h5 { font-size: 13px; padding: 8px 12px; min-height: 36px; } } </style> </head> <body> <div class="demo-container"> <h1 class="demo-title">🚀 MrButton 组件演示</h1> <p class="demo-subtitle">基于设计规范的业务按钮组件,支持支付场景和多种变体</p> <!-- 按钮变体 --> <div class="demo-section"> <h2 class="section-title">📌 按钮变体 (variant)</h2> <div class="button-demo"> <div class="button-demo-title">支付主要按钮 (payment-primary)</div> <button class="mock-button payment-primary font-h5">立即支付</button> <button class="mock-button payment-primary font-h5 amount">¥299.00</button> <button class="mock-button payment-primary font-h5 disabled">已支付</button> <div class="code-block"> &lt;MrButton variant="payment-primary" text="立即支付" fontSize="h5" /&gt; &lt;MrButton variant="payment-primary" text="¥299.00" fontSize="h5" isAmount /&gt; </div> </div> <div class="button-demo"> <div class="button-demo-title">支付次要按钮 (payment-secondary)</div> <button class="mock-button payment-secondary font-h5">取消</button> <button class="mock-button payment-secondary font-h5">稍后支付</button> <button class="mock-button payment-secondary font-h5 disabled">不可用</button> <div class="code-block"> &lt;MrButton variant="payment-secondary" text="取消" fontSize="h5" /&gt; &lt;MrButton variant="payment-secondary" text="稍后支付" fontSize="h5" /&gt; </div> </div> <div class="button-demo"> <div class="button-demo-title">成功操作按钮 (success-action)</div> <button class="mock-button success-action font-h5">完成</button> <button class="mock-button success-action font-h5">确认收货</button> <button class="mock-button success-action font-h5 disabled">已完成</button> <div class="code-block"> &lt;MrButton variant="success-action" text="完成" fontSize="h5" /&gt; &lt;MrButton variant="success-action" text="确认收货" fontSize="h5" /&gt; </div> </div> </div> <!-- 字体大小 --> <div class="demo-section"> <h2 class="section-title">📝 字体大小 (fontSize)</h2> <div class="button-demo"> <div class="button-demo-title">不同字体大小对比</div> <button class="mock-button payment-primary font-h4">H4 大按钮 (16px)</button> <button class="mock-button payment-primary font-h5">H5 标准按钮 (14px)</button> <button class="mock-button payment-primary font-h6">H6 小按钮 (13px)</button> <button class="mock-button payment-primary font-h7">H7 迷你按钮 (12px)</button> <div class="code-block"> &lt;MrButton variant="payment-primary" text="H4 大按钮" fontSize="h4" /&gt; &lt;MrButton variant="payment-primary" text="H5 标准按钮" fontSize="h5" /&gt; &lt;MrButton variant="payment-primary" text="H6 小按钮" fontSize="h6" /&gt; &lt;MrButton variant="payment-primary" text="H7 迷你按钮" fontSize="h7" /&gt; </div> </div> </div> <!-- 金额相关 --> <div class="demo-section"> <h2 class="section-title">💰 金额相关 (isAmount)</h2> <div class="button-demo"> <div class="button-demo-title">金额显示增强</div> <button class="mock-button payment-primary font-h4 amount">¥1,299.00</button> <button class="mock-button payment-secondary font-h5 amount">查看详情 ¥99.00</button> <button class="mock-button success-action font-h5 amount">确认支付 ¥599.00</button> <div class="code-block"> &lt;MrButton variant="payment-primary" text="¥1,299.00" fontSize="h4" isAmount /&gt; &lt;MrButton variant="payment-secondary" text="查看详情 ¥99.00" fontSize="h5" isAmount /&gt; &lt;MrButton variant="success-action" text="确认支付 ¥599.00" fontSize="h5" isAmount /&gt; </div> </div> </div> <!-- 使用场景 --> <div class="demo-section"> <h2 class="section-title">🎯 使用场景</h2> <div class="usage-scenario"> <h4>💳 支付流程场景</h4> <div class="button-group"> <button class="mock-button payment-secondary font-h5">返回</button> <button class="mock-button payment-primary font-h4 amount">立即支付 ¥199.00</button> </div> <div class="code-block"> // 支付页面按钮组合 &lt;MrButton variant="payment-secondary" text="返回" fontSize="h5" /&gt; &lt;MrButton variant="payment-primary" text="立即支付 ¥199.00" fontSize="h4" isAmount /&gt; </div> </div> <div class="usage-scenario"> <h4>✅ 订单确认场景</h4> <div class="button-group"> <button class="mock-button payment-secondary font-h5">修改订单</button> <button class="mock-button success-action font-h5">确认订单</button> </div> <div class="code-block"> // 订单确认页面 &lt;MrButton variant="payment-secondary" text="修改订单" fontSize="h5" /&gt; &lt;MrButton variant="success-action" text="确认订单" fontSize="h5" /&gt; </div> </div> <div class="usage-scenario"> <h4>🎉 支付成功场景</h4> <div class="button-group"> <button class="mock-button payment-secondary font-h6">查看订单</button> <button class="mock-button success-action font-h5">继续购物</button> </div> <div class="code-block"> // 支付成功页面 &lt;MrButton variant="payment-secondary" text="查看订单" fontSize="h6" /&gt; &lt;MrButton variant="success-action" text="继续购物" fontSize="h5" /&gt; </div> </div> </div> <!-- 响应式演示 --> <div class="responsive-demo"> <h4>📱 响应式设计</h4> <p style="font-size: 12px; color: #92400e; margin-bottom: 12px"> 在移动端(宽度 ≤ 768px)时,按钮会自动调整大小以提供更好的触摸体验 </p> <div class="button-group"> <button class="mock-button payment-primary font-h4">大按钮 → 移动端自适应</button> <button class="mock-button payment-primary font-h5">标准按钮 → 移动端自适应</button> </div> </div> <!-- 设计Token展示 --> <div class="demo-section"> <h2 class="section-title">🎨 设计Token</h2> <div style=" display: grid; grid-template-columns: repeat(auto-fit, minmax(200px, 1fr)); gap: 16px; " > <div style="background: #f8f9fa; padding: 16px; border-radius: 8px"> <h4 style="margin-bottom: 8px; font-size: 14px">Primary 蓝色系</h4> <div style="background: #2196f3; height: 30px; border-radius: 4px; margin-bottom: 4px" ></div> <span style="font-size: 12px; color: #666">#2196F3</span> </div> <div style="background: #f8f9fa; padding: 16px; border-radius: 8px"> <h4 style="margin-bottom: 8px; font-size: 14px">Success 绿色系</h4> <div style="background: #4caf50; height: 30px; border-radius: 4px; margin-bottom: 4px" ></div> <span style="font-size: 12px; color: #666">#4CAF50</span> </div> <div style="background: #f8f9fa; padding: 16px; border-radius: 8px"> <h4 style="margin-bottom: 8px; font-size: 14px">Secondary 灰色系</h4> <div style=" background: #e0e0e0; height: 30px; border-radius: 4px; margin-bottom: 4px; border: 1px solid #ccc; " ></div> <span style="font-size: 12px; color: #666">#E0E0E0</span> </div> </div> </div> </div> <script> // 添加交互效果 document.querySelectorAll('.mock-button:not(.disabled)').forEach((button) => { button.addEventListener('click', function () { const originalText = this.textContent; this.textContent = '✓ 已点击'; this.style.transform = 'scale(0.95)'; setTimeout(() => { this.textContent = originalText; this.style.transform = ''; }, 300); }); }); // 响应式提示 function updateResponsiveInfo() { const width = window.innerWidth; const isMobile = width <= 768; document.querySelectorAll('.responsive-demo').forEach((demo) => { const status = demo.querySelector('h4'); if (isMobile) { status.innerHTML = '📱 响应式设计 - 当前:移动端模式'; } else { status.innerHTML = '📱 响应式设计 - 当前:桌面端模式'; } }); } window.addEventListener('resize', updateResponsiveInfo); updateResponsiveInfo(); </script> </body> </html>