Zoeken...  ⌘K GitHub

CtaCards CTA

CTA met centrale kop en knoppen, gevolgd door een rij dienst-kaarten.

/cta-cards
src/components/cta/CtaCards.astro
---
/**
 * CtaCards
 * CTA met centrale kop + twee knoppen, gevolgd door een rij dienst-kaarten.
 *
 * Props:
 * - headline: string
 * - sub?: string
 * - primary?: { label: string; href: string }
 * - secondary?: { label: string; href: string }
 * - cards?: { icon?: string; title: string; desc: string }[]
 */
interface CardItem { icon?: string; title: string; desc: string; }
interface Props {
  headline: string;
  sub?: string;
  primary?: { label: string; href: string };
  secondary?: { label: string; href: string };
  cards?: CardItem[];
}
const { headline, sub, primary, secondary, cards = [] } = Astro.props;
---

<section class="bl-section ctacc">
  <div class="bl-inner ctacc-inner">
    <div class="ctacc-top">
      <h2 class="ctacc-headline">{headline}</h2>
      {sub && <p class="ctacc-sub">{sub}</p>}
      {(primary || secondary) && (
        <div class="ctacc-btns">
          {primary && <a href={primary.href} class="ctacc-btn-primary">{primary.label}</a>}
          {secondary && <a href={secondary.href} class="ctacc-btn-secondary">{secondary.label}</a>}
        </div>
      )}
    </div>
    {cards.length > 0 && (
      <div class="ctacc-cards">
        {cards.map((c) => (
          <div class="ctacc-card">
            {c.icon && <span class="ctacc-card-icon" aria-hidden="true">{c.icon}</span>}
            <h3 class="ctacc-card-title">{c.title}</h3>
            <p class="ctacc-card-desc">{c.desc}</p>
          </div>
        ))}
      </div>
    )}
  </div>
</section>

<style>
.ctacc{background:#f8fafc;border-top:1px solid #e5e7eb}
.ctacc-top{text-align:center;margin-bottom:3.5rem}
.ctacc-headline{font-size:clamp(1.875rem,4vw,3rem);font-weight:900;color:#0a0a0a;letter-spacing:-.04em;line-height:1.15;margin:0 0 1rem}
.ctacc-sub{font-size:1.125rem;color:#4b5563;line-height:1.65;margin:0 0 2.5rem;max-width:600px;margin-left:auto;margin-right:auto}
.ctacc-btns{display:flex;gap:1rem;justify-content:center;flex-wrap:wrap}
.ctacc-btn-primary{padding:.875rem 2.25rem;background:var(--color-accent,#6366f1);color:#fff;font-weight:700;font-size:1rem;border-radius:.5rem;text-decoration:none;transition:opacity .2s}
.ctacc-btn-primary:hover{opacity:.88}
.ctacc-btn-secondary{padding:.875rem 2.25rem;border:1.5px solid #d1d5db;color:#374151;font-weight:600;font-size:1rem;border-radius:.5rem;text-decoration:none;transition:border-color .2s}
.ctacc-btn-secondary:hover{border-color:#9ca3af}
.ctacc-cards{display:grid;grid-template-columns:repeat(auto-fit,minmax(220px,1fr));gap:1.5rem}
.ctacc-card{background:#fff;border:1px solid #e5e7eb;border-radius:.875rem;padding:2rem}
.ctacc-card-icon{font-size:1.75rem;display:block;margin-bottom:1rem}
.ctacc-card-title{font-size:1.0625rem;font-weight:700;color:#0a0a0a;margin:0 0 .5rem}
.ctacc-card-desc{font-size:.9375rem;color:#4b5563;line-height:1.6;margin:0}
</style>

Props

Prop Type Default Beschrijving
headline * string - H2-kop
sub string - Ondertitel
primary { label: string; href: string } - Primaire knop
secondary { label: string; href: string } - Secundaire knop
cards { icon?: string; title: string; desc: string }[] - Dienst-kaarten

* = verplicht