Zoeken...  ⌘K GitHub

ImageSplit image

ImageSplit component.

/image-split
src/components/image/ImageSplit.astro
---
/**
 * ImageSplit — tekst links (op de rail), beeld rechts.
 *
 * Props:
 * - title?: string                 (HTML toegestaan)
 * - body?: string                  (HTML toegestaan)
 * - cta?: { label: string; href: string }
 * - image?: string
 * - imageAlt?: string
 */
interface Props {
  title?: string;
  body?: string;
  cta?: { label: string; href: string };
  image?: string;
  imageAlt?: string;
}
const {
  title = 'Wij bouwen merken die groeien',
  body = 'Strategie, design en performance marketing in één samenhangende aanpak.',
  cta = { label: 'Bekijk onze werkwijze', href: '#' },
  image = '/img/ext/photo-1551434678-e076c223a692-w1200-8bdd3a.jpg',
  imageAlt = '',
} = Astro.props;
---

<section class="bl-section isp">
  <div class="bl-inner isp__inner">
    <div class="isp__content">
      {title && <h2 class="isp__title" set:html={title}></h2>}
      {body && <p class="isp__body" set:html={body}></p>}
      {cta && <a class="isp__cta" href={cta.href}>{cta.label}</a>}
    </div>
    <div class="isp__media">
      <img data-allow-img class="isp__img" src={image} alt={imageAlt} loading="lazy" decoding="async" />
    </div>
  </div>
</section>

<style>
.isp__inner{display:grid;grid-template-columns:1fr 1fr;gap:4rem;align-items:center}
.isp__content{display:flex;flex-direction:column;justify-content:center}
.isp__media{position:relative;overflow:hidden;border-radius:calc(var(--radius, .5rem) * 2)}
.isp__img{width:100%;height:100%;min-height:360px;object-fit:cover;display:block}
.isp__title{font-size:clamp(1.5rem,3vw,2.5rem);font-weight:700;color:var(--color-primary, #0a0a0a);margin:0 0 1.25rem;line-height:1.2}
.isp__body{font-size:1.05rem;color:#555;line-height:1.7;margin:0 0 2rem}
.isp__cta{display:inline-block;padding:.75rem 1.75rem;background:var(--color-accent, #6366f1);color:#fff;text-decoration:none;border-radius:6px;font-weight:600;font-size:.95rem;align-self:flex-start;transition:opacity .2s}
.isp__cta:hover{opacity:.85}
@media (max-width:768px){
  .isp__inner{grid-template-columns:1fr;gap:2rem}
  .isp__media{order:-1}
}
</style>