Zoeken...  ⌘K GitHub

ContentSteps content

Genummerde stappen met titel en beschrijving.

/content-steps
src/components/content/ContentSteps.astro
---
interface Step {
  number?: number;
  title: string;
  description: string;
}

interface Props {
  heading?: string;
  steps?: Step[];
}

const {
  heading = "Zo werkt BLURR",
  steps = [
    {
      number: 1,
      title: "Intake & strategie",
      description: "We beginnen met een diepgaande intake om je doelen, doelgroep en concurrentiepositie te begrijpen. Op basis daarvan bouwen we een marketingstrategie op maat.",
    },
    {
      number: 2,
      title: "Creatie & productie",
      description: "Ons team van designers, copywriters en developers zet de strategie om in scherpe campagnes, content en digitale ervaringen.",
    },
    {
      number: 3,
      title: "Activatie & groei",
      description: "We lanceren, meten en optimaliseren continu. Elke euro telt — we sturen bij op basis van data, niet op gevoel.",
    },
    {
      number: 4,
      title: "Rapportage & schaling",
      description: "Maandelijkse rapportages houden je op de hoogte. Wat werkt, schalen we op. Wat niet werkt, passen we aan.",
    },
  ],
} = Astro.props;
---

<section class="cst-wrap">
  {heading && <h2 class="cst-heading">{heading}</h2>}
  <ol class="cst-list">
    {steps.map((step, i) => (
      <li class="cst-item">
        <div class="cst-number">{step.number ?? i + 1}</div>
        <div class="cst-body">
          <h3 class="cst-title">{step.title}</h3>
          <p class="cst-desc">{step.description}</p>
        </div>
      </li>
    ))}
  </ol>
</section>

<style>
  .cst-wrap {
    padding: 3rem 0;
    max-width: 760px;
  }
  .cst-heading {
    font-size: 2rem;
    font-weight: 800;
    color: var(--color-primary, #0a0a0a);
    margin: 0 0 2.5rem;
  }
  .cst-list {
    list-style: none;
    padding: 0;
    margin: 0;
    display: flex;
    flex-direction: column;
    gap: 0;
  }
  .cst-item {
    display: flex;
    gap: 2rem;
    position: relative;
    padding-bottom: 2.5rem;
  }
  .cst-item:not(:last-child)::before {
    content: '';
    position: absolute;
    left: 1.5rem;
    top: 3.5rem;
    bottom: 0;
    width: 2px;
    background: #e5e5e5;
  }
  .cst-number {
    width: 3rem;
    height: 3rem;
    border-radius: 50%;
    background: var(--color-accent, #6366f1);
    color: #fff;
    font-size: 1rem;
    font-weight: 700;
    display: flex;
    align-items: center;
    justify-content: center;
    flex-shrink: 0;
    position: relative;
    z-index: 1;
  }
  .cst-body {
    flex: 1;
    padding-top: 0.5rem;
  }
  .cst-title {
    font-size: 1.125rem;
    font-weight: 700;
    color: var(--color-primary, #0a0a0a);
    margin: 0 0 0.5rem;
  }
  .cst-desc {
    font-size: 1rem;
    line-height: 1.7;
    color: #555;
    margin: 0;
  }
</style>

Props

Prop Type Default Beschrijving
heading string Sectietitel
steps { number?: number; title: string; description: string }[] Lijst van stappen

* = verplicht