FooterDark Footer
Donkere footer met merk-kolom + socials links en meerdere link-kolommen rechts.
src/components/footer/FooterDark.astro
---
/**
* FooterDark — donkere footer met merk-kolom + socials links en meerdere
* link-kolommen rechts. Copyright-band onderaan.
*
* Props:
* - logo?: string
* - logoHref?: string
* - tagline?: string
* - socials?: { label: string; href: string; icon?: string }[]
* - columns?: { title: string; links: { label: string; href: string }[] }[]
* - copyright?: string (default: "© {jaar}")
* - accent?: string hover-kleur socials (default merk-accent)
*/
interface FooterColumn {
title: string;
links: { label: string; href: string }[];
}
interface Props {
logo?: string;
logoHref?: string;
tagline?: string;
socials?: { label: string; href: string; icon?: string }[];
columns?: FooterColumn[];
copyright?: string;
accent?: string;
}
const {
logo = 'Merk',
logoHref = '/',
tagline = 'Data-gedreven online marketing voor ambitieuze bedrijven.',
socials = [
{ label: 'LinkedIn', href: '#', icon: 'in' },
{ label: 'Instagram', href: '#', icon: 'ig' },
{ label: 'X', href: '#', icon: 'x' },
],
columns = [
{ title: 'Diensten', links: [
{ label: 'Google Ads', href: '#' },
{ label: 'Meta Ads', href: '#' },
{ label: 'SEO', href: '#' },
{ label: 'Analytics', href: '#' },
] },
{ title: 'Bedrijf', links: [
{ label: 'Over ons', href: '#' },
{ label: 'Cases', href: '#' },
{ label: 'Blog', href: '#' },
{ label: 'Carrière', href: '#' },
] },
{ title: 'Juridisch', links: [
{ label: 'Privacybeleid', href: '#' },
{ label: 'Cookiebeleid', href: '#' },
{ label: 'Algemene voorwaarden', href: '#' },
] },
],
copyright,
accent = 'var(--color-accent, #6366f1)',
} = Astro.props;
const year = new Date().getFullYear();
const copyrightText = copyright ?? `© ${year}`;
---
<footer class="bl-section fd" style={`--ac:${accent}`}>
<div class="bl-inner fd-inner">
<div class="fd-brand">
<a href={logoHref} class="fd-logo">{logo}</a>
{tagline && <p class="fd-tagline">{tagline}</p>}
{socials.length > 0 && (
<div class="fd-socials">
{socials.map(s => <a href={s.href} class="fd-social" aria-label={s.label}>{s.icon}</a>)}
</div>
)}
</div>
<div class="fd-columns">
{columns.map(col => (
<div class="fd-col">
<h4 class="fd-col-title">{col.title}</h4>
<ul class="fd-col-links">
{col.links.map(l => <li><a href={l.href} class="fd-col-link">{l.label}</a></li>)}
</ul>
</div>
))}
</div>
</div>
<div class="fd-bottom">
<div class="bl-inner fd-bottom-inner">
<p class="fd-copy">{copyrightText}</p>
</div>
</div>
</footer>
<style>
.fd{background:#0a0a0a;color:#fff;padding-block:0}
.fd-inner{padding-block:4rem 3rem;display:grid;grid-template-columns:280px 1fr;gap:4rem}
.fd-logo{font-weight:900;font-size:1.25rem;color:#fff;text-decoration:none;letter-spacing:-.03em;display:block;margin-bottom:.75rem}
.fd-tagline{font-size:1rem;color:#aaa;line-height:1.6;margin:0 0 1.5rem;max-width:240px}
.fd-socials{display:flex;gap:.5rem}
.fd-social{width:36px;height:36px;border-radius:50%;background:#ffffff1f;display:flex;align-items:center;justify-content:center;font-size:.75rem;font-weight:600;text-decoration:none;transition:background .2s;color:#e8e8e8}
.fd-social:hover{background:var(--ac);color:#fff}
.fd-columns{display:grid;grid-template-columns:repeat(auto-fit,minmax(140px,1fr));gap:2rem}
.fd-col-title{font-size:.6875rem;font-weight:700;letter-spacing:.1em;text-transform:uppercase;color:#999;margin:0 0 1rem}
.fd-col-links{list-style:none;padding:0;margin:0;display:flex;flex-direction:column;gap:.5rem}
.fd-col-link{font-size:.9375rem;color:#aaa;text-decoration:none;transition:color .15s}
.fd-col-link:hover{color:#fff}
.fd-bottom{border-top:1px solid rgba(255,255,255,.08)}
.fd-bottom-inner{padding-block:1.25rem}
.fd-copy{font-size:.8125rem;color:#999;margin:0}
@media(max-width:640px){.fd-inner{grid-template-columns:1fr;gap:2.5rem}}
</style>
Props
| Prop | Type | Default | Beschrijving |
|---|---|---|---|
logo | string | 'Merk' | Merknaam |
logoHref | string | '/' | Link van het logo |
tagline | string | - | Korte omschrijving |
socials | { label; href; icon? }[] | - | Social-media links |
columns | { title; links: { label; href }[] }[] | - | Link-kolommen |
copyright | string | '© {jaar}' | Copyright-regel |
accent | string | merk-accent | Hover-kleur socials |
* = verplicht