CtaIconRow CTA
CTA met kop, sub, een rij icoon-labels in een omkaderd paneel en twee knoppen.
src/components/cta/CtaIconRow.astro
---
/**
* CtaIconRow
* CTA met kop, sub, een rij icoon-labels in een omkaderd paneel en twee knoppen.
*
* Props:
* - headline: string
* - sub?: string
* - items?: { icon?: string; label: string }[]
* - primary?: { label: string; href: string }
* - secondary?: { label: string; href: string }
*/
interface IconItem { icon?: string; label: string; }
interface Props {
headline: string;
sub?: string;
items?: IconItem[];
primary?: { label: string; href: string };
secondary?: { label: string; href: string };
}
const { headline, sub, items = [], primary, secondary } = Astro.props;
---
<section class="bl-section ctair">
<div class="bl-inner bl-inner--narrow ctair-inner">
<h2 class="ctair-headline">{headline}</h2>
{sub && <p class="ctair-sub">{sub}</p>}
{items.length > 0 && (
<div class="ctair-icons">
{items.map((it) => (
<div class="ctair-icon-item">
{it.icon && <span class="ctair-icon" aria-hidden="true">{it.icon}</span>}
<span class="ctair-icon-label">{it.label}</span>
</div>
))}
</div>
)}
{(primary || secondary) && (
<div class="ctair-btns">
{primary && <a href={primary.href} class="ctair-btn-primary">{primary.label}</a>}
{secondary && <a href={secondary.href} class="ctair-btn-secondary">{secondary.label}</a>}
</div>
)}
</div>
</section>
<style>
.ctair{background:#fff;border-top:1px solid #e5e7eb}
.ctair-inner{text-align:center}
.ctair-headline{font-size:clamp(1.875rem,4vw,3rem);font-weight:900;color:#0a0a0a;letter-spacing:-.04em;line-height:1.15;margin:0 0 1rem}
.ctair-sub{font-size:1.125rem;color:#4b5563;line-height:1.65;margin:0 0 2.5rem}
.ctair-icons{display:flex;justify-content:center;gap:2.5rem;flex-wrap:wrap;margin-bottom:2.5rem;padding:2rem;background:#f8fafc;border-radius:1rem;border:1px solid #e5e7eb}
.ctair-icon-item{display:flex;flex-direction:column;align-items:center;gap:.5rem}
.ctair-icon{font-size:1.75rem}
.ctair-icon-label{font-size:.875rem;color:#4b5563;font-weight:600}
.ctair-btns{display:flex;gap:1rem;justify-content:center;flex-wrap:wrap}
.ctair-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}
.ctair-btn-primary:hover{opacity:.88}
.ctair-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}
.ctair-btn-secondary:hover{border-color:#9ca3af}
</style>
Props
| Prop | Type | Default | Beschrijving |
|---|---|---|---|
headline * | string | - | H2-kop |
sub | string | - | Ondertitel |
items | { icon?: string; label: string }[] | - | Icoon-labels in het paneel |
primary | { label: string; href: string } | - | Primaire knop |
secondary | { label: string; href: string } | - | Secundaire knop |
* = verplicht