Zoeken...  ⌘K GitHub

FooterContact Footer

Donkere footer met prominente contactgegevens en adres.

/footer-contact
src/components/footer/FooterContact.astro
---
/**
 * FooterContact
 * Footer met prominente contactgegevens en kaart.
 */
interface Props {
  logo?: string;
  tagline?: string;
  address?: string;
  phone?: string;
  email?: string;
  hours?: string;
  links?: { label: string; href: string }[];
  copyright?: string;
  mapEmbed?: string;
}
const { logo = 'BLURR', tagline, address, phone, email, hours, links = [], copyright = `© ${new Date().getFullYear()}`, mapEmbed } = Astro.props;
---
<footer class="fc">
  <div class="fc-inner">
    <div class="fc-brand">
      <div class="fc-logo">{logo}</div>
      {tagline && <p class="fc-tagline">{tagline}</p>}
      {links.length > 0 && (
        <nav class="fc-links">
          {links.map(l => <a href={l.href} class="fc-link">{l.label}</a>)}
        </nav>
      )}
    </div>
    <div class="fc-contact">
      <h3 class="fc-contact-title">Contact</h3>
      {address && <p class="fc-contact-item"><span>📍</span>{address}</p>}
      {phone && <p class="fc-contact-item"><a href={`tel:${phone.replace(/\s/g,'')}`} class="fc-contact-link"><span>📞</span>{phone}</a></p>}
      {email && <p class="fc-contact-item"><a href={`mailto:${email}`} class="fc-contact-link"><span>✉️</span>{email}</a></p>}
      {hours && <p class="fc-contact-item"><span>🕐</span>{hours}</p>}
    </div>
    {mapEmbed && (
      <div class="fc-map">
        <iframe src={mapEmbed} class="fc-map-frame" loading="lazy" title="Locatie" frameborder="0"></iframe>
      </div>
    )}
  </div>
  <div class="fc-bottom">
    <span class="fc-copy">{copyright}</span>
  </div>
</footer>
<style>
  .fc { background: #0a0a0a; }
  .fc-inner { max-width: 1100px; margin: 0 auto; padding: 4rem 2rem; display: grid; grid-template-columns: 2fr 1fr 1fr; gap: 4rem; }
  .fc-logo { font-size: 1.5rem; font-weight: 900; color: #fff; letter-spacing: -0.04em; margin-bottom: 0.875rem; }
  .fc-tagline { font-size: 0.9375rem; color: rgba(255,255,255,0.45); line-height: 1.6; margin: 0 0 1.5rem; max-width: 280px; }
  .fc-links { display: flex; flex-direction: column; gap: 0.5rem; }
  .fc-link { font-size: 0.875rem; color: rgba(255,255,255,0.45); text-decoration: none; transition: color 0.15s; }
  .fc-link:hover { color: #fff; }
  .fc-contact-title { font-size: 0.75rem; font-weight: 700; letter-spacing: 0.08em; text-transform: uppercase; color: rgba(255,255,255,0.25); margin: 0 0 1.25rem; }
  .fc-contact-item { display: flex; align-items: flex-start; gap: 0.625rem; font-size: 0.9375rem; color: rgba(255,255,255,0.55); margin: 0 0 0.75rem; }
  .fc-contact-link { color: rgba(255,255,255,0.55); text-decoration: none; transition: color 0.15s; }
  .fc-contact-link:hover { color: #fff; }
  .fc-map-frame { width: 100%; height: 180px; border-radius: 0.5rem; opacity: 0.7; }
  .fc-bottom { border-top: 1px solid rgba(255,255,255,0.06); padding: 1.25rem 2rem; text-align: center; }
  .fc-copy { font-size: 0.8125rem; color: rgba(255,255,255,0.2); }
  @media (max-width: 768px) { .fc-inner { grid-template-columns: 1fr; gap: 2.5rem; } }
</style>

Props

Prop Type Default Beschrijving
logo string Merknaam
tagline string Tagline
address string Adres
phone string Telefoonnummer
email string E-mailadres
hours string Openingstijden
links { label: string; href: string }[] Navigatielinks

* = verplicht