Zoeken...  ⌘K GitHub

CtaNewsletter CTA

Nieuwsbrief-CTA: eyebrow, kop, sub, inline aanmeldformulier en disclaimer.

/cta-newsletter
src/components/cta/CtaNewsletter.astro
---
/**
 * CtaNewsletter
 * Nieuwsbrief-CTA: eyebrow, kop, sub, inline aanmeldformulier en disclaimer.
 * Achtergrond via variant (light/white/dark).
 *
 * Props:
 * - eyebrow?: string
 * - headline: string
 * - sub?: string
 * - placeholder?: string
 * - button?: string
 * - disclaimer?: string
 * - action?: string
 * - variant?: 'light' | 'white' | 'dark'   default 'light'
 */
interface Props {
  eyebrow?: string;
  headline: string;
  sub?: string;
  placeholder?: string;
  button?: string;
  disclaimer?: string;
  action?: string;
  variant?: 'light' | 'white' | 'dark';
}
const {
  eyebrow,
  headline,
  sub,
  placeholder = 'Je e-mailadres',
  button = 'Aanmelden',
  disclaimer,
  action = '#',
  variant = 'light',
} = Astro.props;
---

<section class:list={['bl-section', 'ctanl', `ctanl--${variant}`]}>
  <div class="bl-inner bl-inner--narrow ctanl-inner">
    {eyebrow && <span class="ctanl-eyebrow">{eyebrow}</span>}
    <h2 class="ctanl-headline">{headline}</h2>
    {sub && <p class="ctanl-sub">{sub}</p>}
    <form class="ctanl-form" action={action} method="post">
      <label class="ctanl-sr" for="ctanl-email">E-mailadres</label>
      <input id="ctanl-email" type="email" name="email" class="ctanl-input" placeholder={placeholder} autocomplete="email" required />
      <button type="submit" class="ctanl-btn">{button}</button>
    </form>
    {disclaimer && <p class="ctanl-disclaimer">{disclaimer}</p>}
  </div>
</section>

<style>
.ctanl--white{background:#fff;border-top:1px solid #e5e7eb}
.ctanl--light{background:#f8fafc;border-top:1px solid #e5e7eb}
.ctanl--dark{background:#0a0a0a}
.ctanl-inner{text-align:center}
.ctanl-eyebrow{display:block;font-size:.75rem;font-weight:700;letter-spacing:.1em;text-transform:uppercase;color:var(--color-accent,#6366f1);margin-bottom:.75rem}
.ctanl-headline{font-size:clamp(1.75rem,3.5vw,2.5rem);font-weight:900;letter-spacing:-.04em;line-height:1.15;margin:0 0 .875rem}
.ctanl--white .ctanl-headline,.ctanl--light .ctanl-headline{color:#0a0a0a}
.ctanl--dark .ctanl-headline{color:#fff}
.ctanl-sub{font-size:1.0625rem;line-height:1.65;margin:0 0 2rem}
.ctanl--white .ctanl-sub,.ctanl--light .ctanl-sub{color:#4b5563}
.ctanl--dark .ctanl-sub{color:#aaa}
.ctanl-sr{position:absolute;width:1px;height:1px;padding:0;margin:-1px;overflow:hidden;clip:rect(0,0,0,0);white-space:nowrap;border:0}
.ctanl-form{display:flex;gap:.625rem;width:min(460px,100%);margin-inline:auto}
.ctanl-input{flex:1;padding:.8125rem 1rem;border-radius:.5rem;font-size:1rem;outline:none;transition:border-color .2s;min-width:0}
.ctanl--white .ctanl-input,.ctanl--light .ctanl-input{border:1.5px solid #d1d5db;background:#fff;color:#0a0a0a}
.ctanl--dark .ctanl-input{border:1.5px solid rgba(255,255,255,.18);background:#ffffff0d;color:#fff}
.ctanl--dark .ctanl-input::placeholder{color:#999}
.ctanl-input:focus{border-color:var(--color-accent,#6366f1)}
.ctanl-btn{padding:.8125rem 1.5rem;background:var(--color-accent,#6366f1);color:#fff;font-weight:700;font-size:1rem;border:none;border-radius:.5rem;cursor:pointer;transition:opacity .2s;white-space:nowrap}
.ctanl-btn:hover{opacity:.88}
.ctanl-disclaimer{font-size:.8125rem;margin:1rem 0 0}
.ctanl--white .ctanl-disclaimer,.ctanl--light .ctanl-disclaimer{color:#6b7280}
.ctanl--dark .ctanl-disclaimer{color:#999}
@media (max-width:520px){
  .ctanl-form{flex-direction:column}
  .ctanl-btn{width:100%}
}
</style>

Props

Prop Type Default Beschrijving
eyebrow string - Klein label boven de kop
headline * string - H2-kop
sub string - Ondertitel
placeholder string naam@voorbeeld.nl Placeholder van het invoerveld
button string Aanmelden Knoptekst
disclaimer string - Kleine tekst onder het formulier
action string # Formulier-action
variant 'light' | 'white' | 'dark' 'light' Achtergrond-variant

* = verplicht