Home Werk
SaaS bouwenAI developmentAPI developmentMobile app developmentGoogle Ads managementHeadless ShopifyLaravel developmentNext.js developmentReact developmentTypeScript engineeringUI/UX designSEO & AEOWebshop bouwen
AI-oplossingenB2B-platformsE-commerceHorecaLead generationLogistiekOnderwijsProcesautomatiseringSaaS-platformsStartup MVPVastgoedZorg
JuridischZorgVastgoedFinanceHoreca
Den HaagRotterdamAmsterdamUtrechtEindhovenAlmereBredaArnhemNijmegenTilburgEnschedeGroningenLeidenDelftZoetermeerDen Bosch
Studio
OverWerkwijzeLabBlogContact

Knop wordt bevestigingskaart Nieuw

De knop "Afspraak annuleren" groeit uit tot een bevestigingskaart (native dialog) en krimpt terug; met laden, fout (vink "storing" aan) en succes. View Transitions voor de vormverandering, zonder support of bij reduced motion verschijnt de kaart direct. Esc en Terug sluiten, de focus keert terug naar de knop. Voor een losse bevestigingspagina op een multi-page site: @view-transition { navigation: auto; } en dezelfde view-transition-name op knop en kaart.

Garage Bakker · ZwolleGepland

APK en kleine beurt

vr 16 okt · 09:30 tot ca. 11:00

GX-418-K

Afspraak annuleren?

Je APK op vr 16 okt om 09:30 vervalt. Kosteloos tot 24 uur vooraf.

Zo gebruik je het

  1. Plak de HTML op de plek waar het onderdeel moet komen.
  2. Zet de CSS in je stylesheet. Alle klassen hebben een eigen voorvoegsel, dus niets botst met je eigen opmaak.
  3. Voeg de JavaScript toe en roep init() aan met het element waar de HTML in staat.
<!-- Knop wordt bevestigingskaart · NedDev · eigen werk. -->
<div class="jouw-container">
<!-- Knop en dialog krijgen om beurten view-transition-name: vtd-shape; de browser morpht de vorm.
  De dialog opent met show() (niet-modaal, blijft in het blok). Op een echte pagina mag showModal() en is Esc ingebouwd.
  Bevestiging als aparte pagina (multi-page): @view-transition { navigation: auto; } en op beide pagina's view-transition-name: vtd-shape
  op de knop en op de kaart. Reduced motion: @media (prefers-reduced-motion: reduce) { ::view-transition-group(*), ::view-transition-old(*), ::view-transition-new(*) { animation: none !important; } } -->
<div class="vtd">
  <div class="vtd__card">
    <div class="vtd__row"><span class="vtd__kick">Garage Bakker · Zwolle</span><span class="vtd__state">Gepland</span></div>
    <p class="vtd__h">APK en kleine beurt</p>
    <p class="vtd__meta">vr 16 okt · 09:30 tot ca. 11:00</p>
    <div class="vtd__plate" aria-label="Kenteken GX-418-K"><span class="vtd__nl" aria-hidden="true">NL</span><span>GX-418-K</span></div>
    <button class="vtd__open" type="button" aria-haspopup="dialog">Afspraak annuleren</button>
    <button class="vtd__nieuw" type="button" hidden>Nieuwe afspraak plannen</button>
    <dialog class="vtd__dlg" aria-labelledby="vtd-t" aria-describedby="vtd-d">
      <p class="vtd__dt" id="vtd-t">Afspraak annuleren?</p>
      <p class="vtd__dd" id="vtd-d">Je APK op vr 16 okt om 09:30 vervalt. Kosteloos tot 24 uur vooraf.</p>
      <p class="vtd__err" role="alert" hidden></p>
      <div class="vtd__acts"><button class="vtd__terug" type="button">Terug</button><button class="vtd__ja" type="button">Ja, annuleren</button></div>
    </dialog>
  </div>
  <label class="vtd__sim"><input type="checkbox" class="vtd__storing"> storing</label>
  <span class="vtd__sr" aria-live="polite"></span>
</div>
</div>

Meer uit componenten

Iets gezien dat je mooi vindt?

Zet het in je selectie en stuur hem op. Dan bouwen we je site eromheen, in jouw huisstijl.

Neem contact op →