8pt

Pricing Toggle

月付年付切换•定价
介绍

滑块式计费周期切换,价格数字纵向切换,不触发布局抖动。

纯 HTML、CSS 与少量原生 JS,没有框架依赖。复制提示词交给 Claude Code、Cursor、Trae 或 Codex,模型会把 Pricing Toggle 加进你的项目并换成你的配色。

适用场景

SaaS 定价页、升级弹窗、方案对比和按月 / 按年切换。

安装

订阅 Builder 后,用 8pt CLI 装进项目,或在已接入 8pt MCP 的编辑器里直接调用。

$ npm i -g @8pt-dev/cli && 8pt add pricing-toggle
mcp › 使用 8pt MCP 调用 get_component("pricing-toggle")

代码

Pricing Toggle 的源码,动效只用 transform 与 opacity,并尊重减少动态效果设置。

<div class="x-pt">
  <div class="x-pt__switch" role="tablist">
    <span class="x-pt__thumb" aria-hidden="true"></span>
    <button type="button" role="tab" aria-selected="true">月付</button>
    <button type="button" role="tab" aria-selected="false">年付</button>
  </div>
  <div class="x-pt__plans">
    <div class="x-pt__plan"><span>Nimbus Lite</span><b class="x-pt__price"><i>$12</i><i>$9</i></b><em>/ 月</em></div>
    <div class="x-pt__plan x-pt__plan--hi"><span>Nimbus Crew</span><b class="x-pt__price"><i>$29</i><i>$24</i></b><em>/ 月</em></div>
  </div>
</div>
.x-pt{display:grid;justify-items:center;gap:18px;color:var(--d-fg,#fff)}
.x-pt__switch{position:relative;display:grid;grid-template-columns:1fr 1fr;padding:4px;border-radius:10px;background:var(--d-card,#101016);border:1px solid var(--d-line,rgba(255,255,255,.1))}
.x-pt__switch button{position:relative;z-index:1;width:76px;height:32px;border:0;background:transparent;color:var(--d-muted,#a0a0ab);font:600 13px/1 var(--d-font,system-ui,sans-serif);cursor:pointer;transition:color .3s}
.x-pt__switch button[aria-selected=true]{color:var(--d-bg,#000)}
.x-pt__thumb{position:absolute;left:4px;top:4px;width:76px;height:32px;border-radius:7px;background:var(--d-fg,#fff);transition:transform .45s cubic-bezier(.3,1.4,.5,1)}
.x-pt.yearly .x-pt__thumb{transform:translateX(76px)}
.x-pt__plans{display:flex;gap:12px}
.x-pt__plan{display:grid;gap:6px;min-width:120px;padding:16px 18px;border-radius:14px;background:var(--d-card,#101016);border:1px solid var(--d-line,rgba(255,255,255,.1))}
.x-pt__plan--hi{border-color:color-mix(in srgb,var(--d-accent,#4D74FF) 70%,transparent)}
.x-pt__plan span{font:500 12px/1 var(--d-font,system-ui,sans-serif);color:var(--d-muted,#a0a0ab)}
.x-pt__plan em{font:12px/1 var(--d-font,system-ui,sans-serif);font-style:normal;color:var(--d-muted,#a0a0ab)}
.x-pt__price{display:grid;height:1.1em;overflow:hidden;font:700 28px/1.1 var(--d-font,system-ui,sans-serif);font-variant-numeric:tabular-nums}
…
const init = (root) => {
  const box = root.querySelector('.x-pt'), tabs = box.querySelectorAll('[role=tab]');
  tabs.forEach((t, i) => t.addEventListener('click', () => {
    box.classList.toggle('yearly', i === 1);
    tabs.forEach((x, j) => x.setAttribute('aria-selected', String(i === j)));
  }));
};
订阅 Builder 查看完整源码。查看价格

更多定价组件

查看全部

Ticket Pricing

更多组件

查看全部

AI Prompt Composer

Film Strip Carousel

Auto Tab Showcase

Media Bento Grid

Agent Chat Window

Model Pill Marquee

Director Art Cards

Mac File Window

继续探索