Recur
Recur
Recur 文件中心
開發者指南
範例基本結帳範例Webhook 處理範例自訂樣式範例
開發者指南Examples

自訂樣式範例

客製化結帳頁面的外觀以符合品牌風格

自訂樣式範例

學習如何客製化 Recur SDK 結帳元件的外觀,使其與你的品牌風格一致。

目前 SDK 支援透過 Web Component 的 button-style 屬性進行基本樣式設定。更進階的主題客製化功能即將推出。

Web Component 樣式

內建按鈕樣式

<recur-checkout> Web Component 提供三種預設按鈕樣式:

<!-- Primary 樣式(預設) -->
<recur-checkout
  publishable-key="pk_test_xxx"
  product-id="prod_xxx"
  success-url="/success"
  cancel-url="/cancel"
  customer-email="user@example.com"
  button-style="primary">
  立即訂閱
</recur-checkout>

<!-- Outline 樣式 -->
<recur-checkout
  publishable-key="pk_test_xxx"
  product-id="prod_xxx"
  success-url="/success"
  cancel-url="/cancel"
  customer-email="user@example.com"
  button-style="outline">
  立即訂閱
</recur-checkout>

<!-- Gradient 樣式 -->
<recur-checkout
  publishable-key="pk_test_xxx"
  product-id="prod_xxx"
  success-url="/success"
  cancel-url="/cancel"
  customer-email="user@example.com"
  button-style="gradient">
  立即訂閱
</recur-checkout>

自訂按鈕外觀

使用 CSS 覆寫 Web Component 的樣式:

/* 自訂按鈕樣式 */
recur-checkout::part(button) {
  background-color: #6366f1;
  color: white;
  padding: 12px 24px;
  border-radius: 8px;
  font-weight: 600;
  transition: background-color 0.2s;
}

recur-checkout::part(button):hover {
  background-color: #4f46e5;
}

recur-checkout::part(button):disabled {
  opacity: 0.5;
  cursor: not-allowed;
}

Modal/Iframe 模式樣式

使用 JavaScript SDK 開啟的 Modal 和 Iframe 模式目前使用 Recur 的預設樣式。

const recur = RecurCheckout.init({
  publishableKey: 'pk_test_xxx',
});

// Modal 模式
await recur.checkout({
  productId: 'prod_xxx',             // 產品 ID(或使用 productSlug)
  customerEmail: 'user@example.com', // 必填
  mode: 'modal',
  onPaymentComplete: (result) => {
    console.log('付款完成:', result);
  },
});

// Iframe 模式 - 可透過容器樣式控制外觀
await recur.checkout({
  productId: 'prod_xxx',             // 產品 ID(或使用 productSlug)
  customerEmail: 'user@example.com', // 必填
  mode: 'iframe',
  container: '#payment-container',
  onPaymentComplete: (result) => {
    console.log('付款完成:', result);
  },
});

容器樣式

對於 Iframe 模式,你可以透過 CSS 控制容器的外觀:

#payment-container {
  /* 容器樣式 */
  max-width: 400px;
  margin: 0 auto;
  padding: 24px;
  background-color: #f9fafb;
  border-radius: 12px;
  box-shadow: 0 1px 3px 0 rgb(0 0 0 / 0.1);
}

品牌一致性建議

顏色選擇

選擇與品牌一致的顏色:

:root {
  /* 定義品牌色彩 */
  --brand-primary: #6366f1;
  --brand-primary-hover: #4f46e5;
  --brand-text: #1f2937;
  --brand-background: #ffffff;
}

/* 套用到 Web Component */
recur-checkout::part(button) {
  background-color: var(--brand-primary);
}

recur-checkout::part(button):hover {
  background-color: var(--brand-primary-hover);
}

字體設定

確保字體與網站一致:

recur-checkout {
  font-family: 'Inter', -apple-system, BlinkMacSystemFont, sans-serif;
}

recur-checkout::part(button) {
  font-family: inherit;
  font-size: 16px;
  font-weight: 600;
}

深色模式支援

/* 預設(淺色模式) */
recur-checkout::part(button) {
  background-color: #6366f1;
  color: white;
}

/* 深色模式 */
@media (prefers-color-scheme: dark) {
  recur-checkout::part(button) {
    background-color: #818cf8;
    color: #1f2937;
  }

  #payment-container {
    background-color: #1f2937;
    color: #f9fafb;
  }
}

響應式設計

確保按鈕在各種螢幕尺寸下都能正常顯示:

recur-checkout::part(button) {
  width: 100%;
  padding: 16px 24px;
  font-size: 16px;
}

@media (min-width: 768px) {
  recur-checkout::part(button) {
    width: auto;
    min-width: 200px;
  }
}

完整範例

<!DOCTYPE html>
<html lang="zh-TW">
<head>
  <meta charset="UTF-8">
  <meta name="viewport" content="width=device-width, initial-scale=1.0">
  <title>訂閱方案</title>
  <style>
    :root {
      --brand-primary: #6366f1;
      --brand-primary-hover: #4f46e5;
    }

    .pricing-card {
      max-width: 400px;
      margin: 0 auto;
      padding: 32px;
      background: white;
      border-radius: 16px;
      box-shadow: 0 4px 6px -1px rgb(0 0 0 / 0.1);
      text-align: center;
    }

    .pricing-card h2 {
      margin: 0 0 8px;
      font-size: 24px;
    }

    .price {
      font-size: 48px;
      font-weight: 700;
      color: var(--brand-primary);
    }

    .price span {
      font-size: 16px;
      color: #6b7280;
    }

    recur-checkout::part(button) {
      width: 100%;
      padding: 16px 24px;
      background: var(--brand-primary);
      color: white;
      border: none;
      border-radius: 8px;
      font-size: 16px;
      font-weight: 600;
      cursor: pointer;
      transition: background-color 0.2s;
    }

    recur-checkout::part(button):hover {
      background: var(--brand-primary-hover);
    }
  </style>
</head>
<body>
  <div class="pricing-card">
    <h2>專業方案</h2>
    <div class="price">NT$ 999<span>/月</span></div>
    <ul style="text-align: left; margin: 24px 0;">
      <li>無限制使用</li>
      <li>優先客服支援</li>
      <li>進階分析報告</li>
    </ul>

    <recur-checkout
      publishable-key="pk_test_xxx"
      product-id="prod_xxx"
      success-url="/success"
      cancel-url="/cancel"
      customer-email="user@example.com"
      button-style="primary">
      立即訂閱
    </recur-checkout>
  </div>

  <script src="https://unpkg.com/recur-tw@latest/dist/recur.umd.js"></script>
</body>
</html>

最佳實踐

一致性:確保結帳元件的樣式與你的主網站一致,提升使用者信任感。

對比度:確保文字和背景有足夠的對比度,符合 WCAG 無障礙標準。

測試:在不同裝置和瀏覽器上測試樣式,確保良好的使用者體驗。

下一步

  • 基本結帳範例 - 查看基本整合範例
  • Webhook 通知 - 設定即時付款通知
  • API 參考 - 查看完整的 API 文件

Webhook 處理範例

處理訂閱狀態變更通知

幫助中心

Recur 平台使用指南,從建立帳戶到開始收款

On this page

自訂樣式範例Web Component 樣式內建按鈕樣式自訂按鈕外觀Modal/Iframe 模式樣式容器樣式品牌一致性建議顏色選擇字體設定深色模式支援響應式設計完整範例最佳實踐下一步