Back to CSS Radio Buttons Pricing Tier Pure CSS
Share
HTML
<fieldset class="crb-tier">
  <legend class="crb-sr">Plan tier</legend>
  <label>
    <input type="radio" name="crb-tier" />
    <span class="crb-tier-card">
      <strong>Basic</strong>
      <em>$5/mo</em>
      <span class="crb-tier-ribbon">Best value</span>
    </span>
  </label>
  <label>
    <input type="radio" name="crb-tier" checked />
    <span class="crb-tier-card">
      <strong>Plus</strong>
      <em>$15/mo</em>
      <span class="crb-tier-ribbon">Best value</span>
    </span>
  </label>
</fieldset>
CSS
.crb-tier { display: flex; gap: 10px; border: 0; padding: 14px 0 0; }
.crb-tier input { appearance: none; -webkit-appearance: none; position: absolute; opacity: 0; }
.crb-tier label { flex: 1; cursor: pointer; }
.crb-tier-card {
  display: flex; flex-direction: column; gap: 4px; align-items: flex-start;
  position: relative;
  padding: 12px;
  background: #1a1a28; border: 1.5px solid rgba(255,255,255,0.06); border-radius: 10px;
  transition: border-color 0.3s, background 0.3s;
}
.crb-tier-card strong { font: 700 14px/1 system-ui, sans-serif; color: #fff; }
.crb-tier-card em { font: 600 12px/1 monospace; color: #a78bfa; font-style: normal; }
.crb-tier-ribbon {
  position: absolute;
  top: 0; left: 50%;
  padding: 4px 12px;
  border-radius: 999px;
  font: 700 9px/1 system-ui, sans-serif;
  text-transform: uppercase;
  text-align: center;
  white-space: nowrap;
  background: linear-gradient(90deg, #7c6cff, #ff6c8a); color: #fff;
  box-shadow: 0 2px 8px rgba(124,108,255,0.4);
  opacity: 0;
  transform: translate(-50%, -50%) scale(0.6);
  transition: opacity 0.25s, transform 0.35s cubic-bezier(0.34,1.56,0.64,1);
  pointer-events: none;
}
.crb-tier input:checked + .crb-tier-card {
  border-color: #7c6cff;
  background: linear-gradient(135deg, rgba(124,108,255,0.15), rgba(255,108,138,0.05));
}
.crb-tier input:checked + .crb-tier-card .crb-tier-ribbon {
  opacity: 1;
  transform: translate(-50%, -50%) scale(1);
}

.crb-sr {
  position: absolute !important;
  width: 1px;
  height: 1px;
  padding: 0;
  margin: -1px;
  overflow: hidden;
  clip: rect(0, 0, 0, 0);
  white-space: nowrap;
  border: 0;
}