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

Raster filteren en sorteren Nieuw

Projectraster van 12 kaarten dat je filtert op categorie en sorteert op datum of prijs; kaarten glijden naar hun nieuwe plek, weggefilterde vervagen. View Transitions met view-transition-class, fallback een klein FLIP-script (Web Animations), bij reduced motion direct. Lege categorie toont een lege staat met herstelknop. Voor een filter dat via de URL werkt op een multi-page site: @view-transition { navigation: auto; } en per kaart dezelfde view-transition-name op beide pagina's.

    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.
    <!-- Raster filteren en sorteren · NedDev · eigen werk. -->
    <div class="jouw-container">
    <!-- Same-document: elke kaart krijgt tijdens de overgang view-transition-name vtg-c1..vtg-c12 en view-transition-class vtg-card.
      Multi-page (filter als /projecten?cat=keuken): @view-transition { navigation: auto; } en op beide pagina's per project dezelfde
      view-transition-name (bv. via style="view-transition-name: project-12"). Zonder support: FLIP-script hieronder, of gewoon direct.
      Reduced motion: @media (prefers-reduced-motion: reduce) { ::view-transition-group(*), ::view-transition-old(*), ::view-transition-new(*) { animation: none !important; } } -->
    <div class="vtg">
      <div class="vtg__bar">
        <div class="vtg__chips" role="group" aria-label="Filter op categorie">
          <button class="vtg__chip" type="button" data-f="alles" aria-pressed="true">Alles <span>12</span></button>
          <button class="vtg__chip" type="button" data-f="bad" aria-pressed="false">Badkamer <span>4</span></button>
          <button class="vtg__chip" type="button" data-f="keuken" aria-pressed="false">Keuken <span>4</span></button>
          <button class="vtg__chip" type="button" data-f="tuin" aria-pressed="false">Tuin <span>4</span></button>
          <button class="vtg__chip" type="button" data-f="dak" aria-pressed="false">Dakkapel <span>0</span></button>
        </div>
        <label class="vtg__sort"><span class="vtg__sr">Sorteer</span><select class="vtg__sel"><option value="datum">Nieuwste eerst</option><option value="laag">Prijs oplopend</option><option value="hoog">Prijs aflopend</option></select></label>
      </div>
      <ul class="vtg__grid" aria-label="Projecten"></ul>
      <div class="vtg__leeg" hidden><p>Nog geen dakkapellen in dit overzicht.</p><button class="vtg__reset" type="button">Toon alle projecten</button></div>
      <span class="vtg__sr vtg__live" 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 →