Zoeken...  ⌘K GitHub

ListPros list

Voor/nadelen-vergelijking in twee kolommen met kleurgecodeerde items. Light of dark.

/list-pros
src/components/list/ListPros.astro
---
/**
 * ListPros
 * Voor/nadelen-vergelijking in twee kolommen. Optioneel met kopjes boven elke kolom.
 *
 * Props:
 * - pros: string[]                         voordelen
 * - cons: string[]                         nadelen
 * - prosLabel?: string                     kop boven pros-kolom (default 'Voordelen')
 * - consLabel?: string                     kop boven cons-kolom (default 'Nadelen')
 * - theme?: 'light' | 'dark'              default 'light'
 */
interface Props {
  pros: string[];
  cons: string[];
  prosLabel?: string;
  consLabel?: string;
  theme?: 'light' | 'dark';
}

const {
  pros,
  cons,
  prosLabel = 'Voordelen',
  consLabel = 'Nadelen',
  theme = 'light',
} = Astro.props;
---

<section class:list={['bl-section', 'lst-pros-section', `lst-pros-section--${theme}`]}>
  <div class="bl-inner">
    <div class="lst-pros">
      <div class="lst-pros__col lst-pros__col--pro">
        <p class="lst-pros__label">{prosLabel}</p>
        <ul class="lst-pros__list">
          {pros.map(item => (
            <li class="lst-pros__item lst-pros__item--pro">
              <span aria-hidden="true" class="lst-pros__icon">&#10003;</span>
              <span>{item}</span>
            </li>
          ))}
        </ul>
      </div>
      <div class="lst-pros__col lst-pros__col--con">
        <p class="lst-pros__label">{consLabel}</p>
        <ul class="lst-pros__list">
          {cons.map(item => (
            <li class="lst-pros__item lst-pros__item--con">
              <span aria-hidden="true" class="lst-pros__icon">&#10005;</span>
              <span>{item}</span>
            </li>
          ))}
        </ul>
      </div>
    </div>
  </div>
</section>

<style>
.lst-pros-section--dark { background: #0a0a0a; }

.lst-pros {
  display: grid;
  grid-template-columns: 1fr 1fr;
  gap: 1.25rem;
}

@media (max-width: 600px) {
  .lst-pros { grid-template-columns: 1fr; }
}

.lst-pros__col {
  border-radius: .75rem;
  padding: 1.5rem;
}

.lst-pros__col--pro {
  background: #f0fdf4;
  border: 1px solid #bbf7d0;
}

.lst-pros__col--con {
  background: #fef2f2;
  border: 1px solid #fecaca;
}

.lst-pros-section--dark .lst-pros__col--pro {
  background: #052e16;
  border-color: #166534;
}

.lst-pros-section--dark .lst-pros__col--con {
  background: #2d0a0a;
  border-color: #991b1b;
}

.lst-pros__label {
  margin: 0 0 .875rem;
  font-size: .75rem;
  font-weight: 700;
  text-transform: uppercase;
  letter-spacing: .08em;
}

.lst-pros__col--pro .lst-pros__label { color: #16a34a; }
.lst-pros__col--con .lst-pros__label { color: #dc2626; }

.lst-pros__list {
  list-style: none;
  margin: 0;
  padding: 0;
  display: flex;
  flex-direction: column;
  gap: .625rem;
}

.lst-pros__item {
  display: flex;
  align-items: flex-start;
  gap: .5rem;
  font-size: 1rem;
  line-height: 1.5;
}

.lst-pros__item--pro { color: #166534; }
.lst-pros__item--con { color: #991b1b; }

.lst-pros-section--dark .lst-pros__item--pro { color: #86efac; }
.lst-pros-section--dark .lst-pros__item--con { color: #fca5a5; }

.lst-pros__icon {
  font-weight: 700;
  flex-shrink: 0;
  line-height: 1.5;
}
</style>

Props

Prop Type Default Beschrijving
pros * string[] - Voordelen
cons * string[] - Nadelen
prosLabel string 'Voordelen' Koptekst boven de pros-kolom
consLabel string 'Nadelen' Koptekst boven de cons-kolom
theme 'light' | 'dark' 'light' Achtergrond-mode

* = verplicht