CSS 价格表生成器

下一个

价格表是营销页面上最关键的一块版面:它必须清晰、便于快速扫读,并把访客引向企业最希望他们选择的套餐。这个生成器会用 HTML + CSS 生成一张价格卡片,包含套餐名称、价格,以及用于价格文字和行动按钮的强调色。把多张卡片并排摆放即可组成完整的价格表,然后把代码复制到落地页。

如何做一个价格表

  1. 1

    输入套餐名称

    显示在卡片顶部的套餐标题,例如“Pro”。

  2. 2

    设置价格

    以大号字体显示的价格,例如“$29”。“/mo”后缀会自动添加。

  3. 3

    选择强调色

    用于价格文字和行动按钮。请选择与品牌匹配的颜色。

  4. 4

    复制代码

    卡片自带功能列表、行动按钮和 <style> 样式块。可直接在代码中修改这些内容。

  5. 5

    为更多套餐重复

    要制作完整的价格表,请为每个套餐复制一张卡片,并以网格排列。

基础骨架结构

<section class="pricing">
  <article class="plan">
    <h3>Starter</h3>
    <p class="price">$9 <span>/mo</span></p>
    <p class="tagline">For solo projects.</p>
    <ul class="features">
      <li>3 projects</li>
      <li>10 GB storage</li>
      <li>Community support</li>
    </ul>
    <a class="cta" href="#">Start free</a>
  </article>

  <article class="plan featured">
    <span class="badge">Most popular</span>
    <h3>Pro</h3>
    <p class="price">$29 <span>/mo</span></p>
    <!-- ... -->
  </article>

  <article class="plan">
    <h3>Team</h3>
    <!-- ... -->
  </article>
</section>

响应式三列网格

.pricing {
  display: grid;
  grid-template-columns: repeat(auto-fit, minmax(240px, 1fr));
  gap: 1.5rem;
  align-items: stretch;
}

.plan {
  padding: 2rem 1.5rem;
  background: #fff;
  border: 1px solid #e5e7eb;
  border-radius: 12px;
  display: flex;
  flex-direction: column;
}

.plan.featured {
  border: 2px solid #2563eb;
  position: relative;
  transform: translateY(-4px);
  box-shadow: 0 10px 30px rgba(37, 99, 235, 0.15);
}

auto-fit 搭配 minmax(240px, 1fr),桌面端自动排成三列,移动端自动堆叠成一列,不需要再做任何配置。

推荐套餐

能吸引注意力的视觉线索:

  • 彩色边框,与品牌主色保持一致。
  • 略微上移,用负的 margin-top 或 translateY(-4px) 实现。
  • 更大的 CTA 按钮,通常用品牌色填充,其他套餐则用描边按钮。
  • 角标(“最受欢迎”“最超值”)用绝对定位放在卡片顶部。
  • 卡片更高,可以吸引视线,但会削弱套餐之间的可比性。

不要把上面这些全用上,挑两三个就够了。线索太多,视觉层级反而被拉平。

月付 / 年付切换

<div class="billing-toggle">
  <button data-active="true">Monthly</button>
  <button>Annual · Save 20%</button>
</div>

切换开关通常靠一小段 JavaScript 来替换价格数值,也可以借助单选按钮(radio)的 :checked 状态实现。记得把折扣百分比或能省下的金额直接写进按钮文案里,在很多价格表中,这是最具说服力的一个元素。

功能行的样式

.features {
  list-style: none;
  padding: 0;
  margin: 1.5rem 0;
  display: flex;
  flex-direction: column;
  gap: 0.5rem;
}
.features li {
  display: flex;
  align-items: center;
  gap: 0.5rem;
}
.features li.yes::before {
  content: "";
  width: 16px; height: 16px;
  background: url(...check.svg);
}
.features li.no {
  color: #9ca3af;
  text-decoration: line-through;
}

“包含”的功能用对勾,“不包含”的功能用灰色文字或浅色叉号。不要在不降低对比度的情况下直接给文字加删除线,否则它读起来更像是强调而不是排除。

让 CTA 保持醒目

每个套餐一个 CTA,各套餐之间视觉上保持一致。不同套餐用不同文案(“免费开始”“升级到 Pro”“联系销售”)完全没问题,反而更能把用户引导到正确的流程里。

让它便于扫读

用户很少从左到右逐字读价格表:他们先扫价格,再看 CTA,最后才比功能差异。按这个顺序去优化:

  1. 套餐名称价格放大,置于卡片顶部。
  2. CTA 不用滚动卡片就能看到。
  3. 功能列表放在下方。重点突出套餐之间的差异,而不是在每一列重复相同的功能。

无障碍检查清单

  • 每个套餐都是一个独立的 <article>,并带有自己的 <h3>
  • “最受欢迎”角标要是可见的文字标签,而不是只靠颜色区分(照顾色盲用户)。
  • CTA 按钮使用描述性文案(“开始 Pro 试用”),而不是“点击这里”。
  • 计费周期切换要带 aria-pressed,或者使用单选按钮(radio)的语义。
  • 如果用 JavaScript 实现切换,价格变化要通过 aria-live="polite" 播报。

常见问题

3 个是营销上的默认答案:更容易扫读,也能清楚地把中间那个选项推出来。当你确实有四类客户(个人 / 团队 / 企业 / 大型企业)时,4 个套餐才成立。5 个以上通常只会让访客犯难,这时应该拆成两个表格,或者另外加一张功能对比表。

取决于你的业务。默认年付会突出折扣力度,并把较低的价格锚定在用户心里;默认月付则没那么“进攻性”。如果这直接影响收入,就做 A/B 测试。一个折中做法是:默认年付,但把月付选项放在一次点击就能到达的位置。

repeat(auto-fit, minmax(240px, 1fr)) 这个网格会自动处理。当视口宽度低于约 800px 时,卡片会自动变成单列,完全不需要写媒体查询。

如果按价格从低到高排列,就放在最右侧。它的 CTA 文案应该是“联系销售”而不是一个价格,卡片样式也要和其他套餐保持一致,才不会破坏整张表的扫读体验。也有公司把企业版单独放到表格下方的一个区块里,以免干扰上面几个套餐的价格对比。

相关工具