价格卡片 3 款(月付/年付切换 + 高亮推荐 CSS 源码)

CSSJS 许可:自研原创

价格卡片组件源码:月付/年付一键切换、推荐套餐高亮徽章、功能列表与按钮悬停反馈,纯 CSS + 原生 JS 实现,适合 SaaS 定价页与会员套餐页。

效果演示(真实可交互)

下方为 3 档定价卡片:基础版、专业版(带”最受欢迎”徽章)、旗舰版。点击右上角开关可在月付/年付之间切换,价格数字会随之更新并带有轻微的弹跳反馈;悬停卡片有上浮与描边高亮效果。

按月付费 按年付费 省 20%

基础版

个人学习与小型项目

¥0/月
  • 3 个在线项目
  • 1 GB 静态资源空间
  • 社区支持
  • 粤喵精选组件 38 个
最受欢迎

专业版

独立开发者与创业团队

¥29/月
  • 不限项目数量
  • 50 GB 静态资源空间
  • 自定义域名
  • 全部 138 个组件源码
  • 邮件优先支持

旗舰版

企业与高频团队

¥99/月
  • 团队协作与权限管理
  • 500 GB 静态资源空间
  • 专属客服与部署支持
  • 组件定制与私有源码

完整代码

HTML 结构:每张卡片通过 data-monthly / data-yearly 两个自定义属性存储两套价格,切换时用 JS 读取对应值并写入价格文本:

<div class="pc-grid">
  <div class="pc-card" data-monthly="29" data-yearly="23">
    <span class="pc-badge">最受欢迎</span>
    <h3 class="pc-name">专业版</h3>
    <div class="pc-price">
      <span class="pc-currency">¥</span>
      <b class="pc-amount">29</b>
      <span class="pc-period">/月</span>
    </div>
    <ul class="pc-feats">
      <li>不限项目数量</li>
      <li>50 GB 静态资源空间</li>
    </ul>
    <button class="pc-btn">立即升级</button>
  </div>
</div>

核心 CSS:推荐卡片用渐变边框与顶部徽章突出,价格文字使用渐变文字色,切换时播放 scale 弹跳动画:

.pc-hot {
  border-color: rgba(108, 140, 255, .55);
  background: linear-gradient(170deg, rgba(108, 140, 255, .1), #171b26 40%);
  box-shadow: 0 10px 34px rgba(108, 140, 255, .18);
}
.pc-badge {
  position: absolute; top: -12px; left: 50%; transform: translateX(-50%);
  background: linear-gradient(135deg, #6c8cff, #a96cff); color: #fff;
  font-size: 11.5px; padding: 4px 14px; border-radius: 999px;
}
.pc-amount {
  font-size: 40px; font-weight: 800;
  background: linear-gradient(90deg, #6c8cff, #a96cff);
  -webkit-background-clip: text; background-clip: text; -webkit-text-fill-color: transparent;
}
.pc-price.pop .pc-amount { transform: scale(1.12); }

原生 JS 切换逻辑(无任何第三方库):

let yearly = false;
const sw = document.getElementById('pcSwitch');
sw.addEventListener('click', () => {
  yearly = !yearly;
  sw.setAttribute('aria-checked', String(yearly));
  document.querySelectorAll('.pc-card').forEach(card => {
    const key = yearly ? 'yearly' : 'monthly';
    const el = card.querySelector('.pc-amount');
    el.parentElement.classList.add('pop');   // 触发弹跳动画
    el.textContent = card.dataset[key];
    setTimeout(() => el.parentElement.classList.remove('pop'), 220);
  });
});

参数说明

参数默认值说明
data-monthly / data-yearly—卡片两套价格,JS 据此渲染
推荐徽章 top-12px徽章上移距离,超出卡片顶部形成悬浮感
渐变主色#6c8cff → #a96cff价格文字、按钮与推荐卡统一品牌色
价格弹跳 scale1.12切换瞬间的放大倍数,可调小更含蓄
卡片悬停位移-6px悬停上浮距离,与阴影强度配合

兼容性与性能

常见问题

Q: 如何改成美元或其他货币符号? 直接修改 .pc-currency 文本与价格数值即可,符号与数字分离结构方便多语言切换。

Q: 年付价格要显示”按年总计”怎么办? 在 .pc-price 下方追加一行小字说明,如”¥276/年(节省 ¥72)“,由 JS 同步计算即可。

Q: 移动端三列会挤压吗? 组件内置媒体查询,820px 以下自动切换为单列并居中,宽度受限时阅读体验更好。

Q: 可以商用吗? 可以,粤喵自研原创组件,免费商用无需署名,按需修改颜色与文案即可。

许可与来源

  • 许可证:自研原创 —— 粤喵自研原创,可免费用于个人与商业项目,无需署名。查看来源公示与许可清单
  • 来源:粤喵团队原创自研(从效果思路到代码实现均为独立完成,未直接复制第三方代码)
  • 首次发布:2026-09-01 · 最近更新:2026-09-01
  • 修改日志:2026-09-01 首次发布;2026-09-13 补充许可证与来源标注、复制按钮说明与法务页入口
  • 纠错:联系页面 / min@cactus.asia,2 个工作日内核实处理

常见问题

这个组件可以商用吗?

可以。本组件为粤喵自研原创,可免费用于个人和商业项目,无需署名。

浏览器兼容性如何?

支持所有现代浏览器(Chrome / Firefox / Safari / Edge 最新版本)。旧版 IE 不支持 CSS 动画相关特性。

怎么修改动画参数?

直接调整 CSS 中的 animation-duration(时长)、animation-timing-function(缓动曲线)等属性即可,代码中有注释说明。

✍️ 作者与审核