Reviews NL-stijl: score boven de kop, badges en cijferkaarten Nieuw
Complete reviewset zoals Nederlandse klanten die kennen: score als eyebrow boven de H1, badges per platform naast elkaar (Google, Werkspot, Trustoo met cijfer en aantal) en kaarten met rapportcijfer 1-10, datum, dienst en plaats. Filteren per platform, kritische reviews met reactie van de eigenaar, sorteren en meer laden. Staten: laden, alles getoond en leeg (met herstelknop). Lange teksten klappen uit met een knop met aria-expanded. In productie vul je de data uit de Google Places API en de platformfeeds.
9,2gemiddeld uit 214 beoordelingen op drie platforms
Tuinaanleg en tuinonderhoud in Apeldoorn en op de Veluwe
Hoveniersbedrijf Van Dam legt sinds 2004 tuinen aan in Apeldoorn, Ugchelen, Beekbergen en Twello. Dit zeggen klanten, ook als het minder ging.
Zo gebruik je het
- Plak de HTML op de plek waar het onderdeel moet komen.
- Zet de CSS in je stylesheet. Alle klassen hebben een eigen voorvoegsel, dus niets botst met je eigen opmaak.
- Voeg de JavaScript toe en roep init() aan met het element waar de HTML in staat.
<!-- Reviews NL-stijl: score boven de kop, badges en cijferkaarten · NedDev · eigen werk. -->
<div class="jouw-container">
<div class="hvd">
<div class="hvd__in">
<div class="hvd__top">
<div>
<p class="hvd__eyebrow"><span class="hvd__cijfer">9,2</span>gemiddeld uit 214 beoordelingen op drie platforms</p>
<h2 class="hvd__h">Tuinaanleg en tuinonderhoud in Apeldoorn en op de Veluwe</h2>
<p class="hvd__lead">Hoveniersbedrijf Van Dam legt sinds 2004 tuinen aan in Apeldoorn, Ugchelen, Beekbergen en Twello. Dit zeggen klanten, ook als het minder ging.</p>
</div>
<ul class="hvd__badges">
<li><a class="hvd__badge" href="#"><span class="hvd__pm" aria-hidden="true">G</span><span><b>4,8</b> van 5</span><small>165 reviews op Google</small></a></li>
<li><a class="hvd__badge" href="#"><span class="hvd__pm hvd__pm--w" aria-hidden="true">W</span><span><b>9,3</b> van 10</span><small>38 reviews op Werkspot</small></a></li>
<li><a class="hvd__badge" href="#"><span class="hvd__pm hvd__pm--t" aria-hidden="true">T</span><span><b>9,1</b> van 10</span><small>11 reviews op Trustoo</small></a></li>
</ul>
</div>
<div class="hvd__tools">
<div class="hvd__filt" role="radiogroup" aria-label="Filter op platform">
<label><input type="radio" name="hvd-p" value="alle" checked><span>Alle</span></label>
<label><input type="radio" name="hvd-p" value="Google"><span>Google</span></label>
<label><input type="radio" name="hvd-p" value="Werkspot"><span>Werkspot</span></label>
<label><input type="radio" name="hvd-p" value="Trustoo"><span>Trustoo</span></label>
</div>
<label class="hvd__crit"><input type="checkbox"><span>Alleen cijfers lager dan 8</span></label>
<label class="hvd__sort"><span>Sorteer</span><select><option value="new">Nieuwste eerst</option><option value="hi">Hoogste cijfer</option><option value="lo">Laagste cijfer</option></select></label>
</div>
<p class="hvd__count" aria-live="polite"></p>
<ul class="hvd__grid"></ul>
<div class="hvd__more-w"><button class="hvd__more" type="button">Meer reviews laden</button></div>
</div>
</div>
</div>/* Reviews NL-stijl: score boven de kop, badges en cijferkaarten · NedDev · eigen werk. */
/* fonts (Fontshare): erode@400,500,600 + satoshi@400,500,700 */
.hvd{--hvd-moss:#2f4a2a;--hvd-moss2:#3e6137;--hvd-clay:#b8673d;--hvd-linen:#f5f1e8;--hvd-ink:#1e2419;--hvd-mut:#5c6457;--hvd-line:#e2dccd;--hvd-amber:#a86a12;background:var(--hvd-linen);color:var(--hvd-ink);font-family:'Satoshi',sans-serif;box-sizing:border-box}
.hvd *,.hvd *::before,.hvd *::after{box-sizing:border-box}
.hvd a:focus-visible,.hvd button:focus-visible,.hvd select:focus-visible{outline:2px solid var(--hvd-clay);outline-offset:2px}
.hvd__in{max-width:1200px;margin:0 auto;padding:44px 32px 36px}
.hvd__top{display:grid;grid-template-columns:1.25fr .75fr;gap:48px;align-items:end;margin-bottom:28px}
.hvd__eyebrow{display:flex;align-items:center;gap:10px;margin:0 0 14px;font-size:14px;font-weight:500;color:var(--hvd-mut)}
.hvd__cijfer{display:grid;place-items:center;width:40px;height:40px;border-radius:50%;background:var(--hvd-moss);color:#fff;font-weight:700;font-size:15px;font-variant-numeric:tabular-nums}
.hvd__h{font-family:'Erode',serif;font-weight:500;font-size:clamp(30px,3.6vw,46px);line-height:1.05;letter-spacing:-.015em;margin:0 0 14px;max-width:18ch}
.hvd__lead{margin:0;font-size:16px;line-height:1.6;color:var(--hvd-mut);max-width:54ch}
.hvd__badges{list-style:none;margin:0;padding:0;display:grid;gap:8px}
.hvd__badge{display:grid;grid-template-columns:36px auto 1fr;align-items:center;gap:10px;padding:10px 14px;background:#fff;border:1px solid var(--hvd-line);border-radius:6px;text-decoration:none;color:inherit;transition:border-color .18s}
.hvd__badge:hover{border-color:var(--hvd-moss)}
.hvd__badge b{font-size:18px;font-variant-numeric:tabular-nums}
.hvd__badge span:nth-child(2){font-size:13px;color:var(--hvd-mut);white-space:nowrap}
.hvd__badge small{font-size:13px;color:var(--hvd-mut);text-align:right}
.hvd__pm{display:grid;place-items:center;width:36px;height:36px;border-radius:50%;border:1.5px solid var(--hvd-line);font-weight:700;font-size:15px;color:var(--hvd-ink)}
.hvd__pm--w{border-radius:6px}
.hvd__pm--t{border-radius:6px 50% 50% 6px}
.hvd__tools{display:flex;flex-wrap:wrap;gap:12px 20px;align-items:center;padding:14px 0;border-top:1px solid var(--hvd-line);border-bottom:1px solid var(--hvd-line)}
.hvd__filt{display:flex;gap:4px;flex-wrap:wrap}
.hvd__filt label{position:relative}
.hvd__filt input{position:absolute;opacity:0}
.hvd__filt span{display:block;padding:7px 14px;border-radius:999px;font-size:14px;font-weight:500;cursor:pointer;border:1px solid transparent;transition:background-color .16s,border-color .16s}
.hvd__filt span:hover{border-color:var(--hvd-line);background:#fff}
.hvd__filt input:checked+span{background:var(--hvd-moss);color:#fff}
.hvd__filt input:focus-visible+span{outline:2px solid var(--hvd-clay);outline-offset:2px}
.hvd__crit{display:flex;align-items:center;gap:8px;font-size:14px;cursor:pointer}
.hvd__crit input{width:17px;height:17px;accent-color:var(--hvd-moss);margin:0}
.hvd__sort{display:flex;align-items:center;gap:8px;font-size:14px;margin-left:auto;color:var(--hvd-mut)}
.hvd__sort select{font:500 14px 'Satoshi',sans-serif;color:var(--hvd-ink);background:#fff;border:1px solid var(--hvd-line);border-radius:4px;padding:7px 10px;cursor:pointer}
.hvd__count{margin:14px 0 12px;font-size:13px;color:var(--hvd-mut)}
.hvd__grid{list-style:none;margin:0;padding:0;display:grid;grid-template-columns:repeat(3,1fr);gap:14px}
.hvd__card{display:flex;flex-direction:column;background:#fff;border:1px solid var(--hvd-line);border-radius:6px;padding:18px}
.hvd__card.is-new{animation:hvd-in .4s ease both}
@keyframes hvd-in{from{opacity:0;transform:translateY(8px)}}
.hvd__ch{display:flex;gap:12px;align-items:flex-start;margin-bottom:10px}
.hvd__num{flex:none;display:grid;place-items:center;width:42px;height:42px;border-radius:50%;background:var(--hvd-moss);color:#fff;font-weight:700;font-size:16px;font-variant-numeric:tabular-nums}
.hvd__num.is-8{background:var(--hvd-moss2)}
.hvd__num.is-low{background:#fff;color:var(--hvd-amber);border:2px solid var(--hvd-amber)}
.hvd__ct{font-family:'Erode',serif;font-weight:600;font-size:18px;line-height:1.2;margin:2px 0 3px}
.hvd__meta{font-size:12.5px;color:var(--hvd-mut)}
.hvd__txt{margin:0;font-size:14.5px;line-height:1.55;display:-webkit-box;-webkit-line-clamp:4;-webkit-box-orient:vertical;overflow:hidden}
.hvd__card.is-open .hvd__txt{display:block;-webkit-line-clamp:unset}
.hvd__rm{align-self:flex-start;margin-top:6px;padding:2px 0;border:0;background:none;font:600 13px 'Satoshi',sans-serif;color:var(--hvd-moss);cursor:pointer;text-decoration:underline;text-underline-offset:3px}
.hvd__rm:hover{color:var(--hvd-clay)}
.hvd__reply{margin:12px 0 0;padding:10px 12px;background:var(--hvd-linen);border-radius:4px;font-size:13.5px;line-height:1.5}
.hvd__reply b{display:block;font-size:12.5px;margin-bottom:2px}
.hvd__cf{margin-top:auto;padding-top:12px;display:flex;justify-content:space-between;gap:10px;font-size:12.5px;color:var(--hvd-mut)}
.hvd__cf b{color:var(--hvd-ink);font-weight:600}
.hvd__empty{grid-column:1/-1;padding:28px;text-align:center;background:#fff;border:1px dashed var(--hvd-line);border-radius:6px;font-size:15px}
.hvd__empty button{margin-top:10px;font:600 14px 'Satoshi',sans-serif;background:var(--hvd-moss);color:#fff;border:0;border-radius:999px;padding:8px 16px;cursor:pointer}
.hvd__more-w{text-align:center;margin-top:20px}
.hvd__more{display:inline-flex;align-items:center;gap:10px;font:600 15px 'Satoshi',sans-serif;color:var(--hvd-ink);background:#fff;border:1.5px solid var(--hvd-ink);border-radius:999px;padding:11px 22px;cursor:pointer;transition:background-color .16s,color .16s}
.hvd__more:hover{background:var(--hvd-ink);color:#fff}
.hvd__more:disabled{border-color:var(--hvd-line);color:var(--hvd-mut);background:transparent;cursor:default}
.hvd__more[aria-busy=true]::before{content:"";width:14px;height:14px;border:2px solid var(--hvd-line);border-top-color:var(--hvd-ink);border-radius:50%;animation:hvd-spin .7s linear infinite}
@keyframes hvd-spin{to{transform:rotate(360deg)}}
@media (max-width:960px){.hvd__grid{grid-template-columns:1fr 1fr}.hvd__top{grid-template-columns:1fr;gap:20px}}
@media (max-width:620px){.hvd__in{padding:28px 16px}.hvd__grid{grid-template-columns:1fr}.hvd__sort{margin-left:0}.hvd__badge{grid-template-columns:36px 1fr}.hvd__badge small{grid-column:2;text-align:left}}
@media (prefers-reduced-motion:reduce){.hvd *{animation:none!important;transition:none!important}}// Reviews NL-stijl: score boven de kop, badges en cijferkaarten · NedDev · eigen werk.
// root = het element waarin de HTML staat
function init(root){
var w=root.querySelector('.hvd');if(!w)return;
var R=[
['2026-09-29',10,'Werkspot','Ineke Hofstede','Apeldoorn-Zuid','Tuinaanleg','Binnen drie weken een complete nieuwe tuin','Oude tegels eruit, gras en borders erin, een overkapping van douglas en nieuwe verlichting. Bart heeft vooraf een tekening gemaakt en de planning precies gehaald. Elke middag was alles netjes geveegd, de buren vroegen al om het telefoonnummer.'],
['2026-09-22',8,'Google','Mark Wolters','Ugchelen','Onderhoud','Netjes gesnoeid, factuur was iets hoger dan verwacht','Heg en fruitbomen keurig gesnoeid en al het groenafval meegenomen. Wel een half uur meer gefactureerd dan de schatting, dat werd wel vooraf even gebeld.'],
['2026-09-15',9,'Trustoo','Fam. Bulten','Beekbergen','Bestrating','Oprit opnieuw gelegd, nu geen plassen meer','Onze oprit liep bij regen onder water. Ze hebben de fundering opnieuw gedaan en een afwatering met grind gemaakt. Na de eerste stortbui droog.'],
['2026-09-08',10,'Google','Sanne Kuipers','Apeldoorn-Noord','Tuinontwerp','Van kale achtertuin naar iets waar we elke avond zitten','Wij wisten alleen dat we minder gras wilden. Het ontwerp met de verhoogde borders en het terras op de zon is precies goed.'],
['2026-08-30',7,'Werkspot','Peter van Ommen','Twello','Beplanting','Mooi resultaat, start liep twee weken uit','Het resultaat is goed en de planten slaan prima aan. Alleen de start schoof twee keer op omdat een eerder project uitliep. Dat had ik graag eerder gehoord.','We hadden je eerder moeten bellen toen de planning schoof, dat nemen we mee. Fijn dat de beplanting goed aanslaat. Bart van Dam'],
['2026-08-21',9,'Werkspot','Lotte Smeenk','Apeldoorn-West','Onderhoud','Vaste ploeg, altijd dezelfde gezichten','We hebben een onderhoudscontract voor zes beurten per jaar. Fijn dat het steeds dezelfde twee mannen zijn die de tuin kennen.'],
['2026-08-12',10,'Google','Hans Brinkman','Vaassen','Tuinaanleg','Vijver en terras, strak afgewerkt','Natuurstenen terras met een kleine vijver ernaast. De randen zijn heel strak en de pomp is uit het zicht weggewerkt.'],
['2026-07-28',8,'Trustoo','Ellen de Graaf','Apeldoorn-Zuid','Schutting','Schutting stevig, wel wat schade aan de border','De nieuwe schutting staat stevig. Bij het plaatsen zijn een paar vaste planten vertrapt, die zijn later wel vervangen zonder kosten.'],
['2026-07-15',9,'Google','Rik Jansen','Ugchelen','Bestrating','Vriendelijk, snel en een eerlijke prijs','Drie offertes gevraagd, Van Dam zat in het midden maar was de enige die langskwam om te meten.'],
['2026-06-30',10,'Werkspot','Marloes Visser','Beekbergen','Tuinontwerp','Ze denken mee over onderhoud, niet alleen over hoe het eruit ziet','We wilden een tuin die weinig werk is. Er is gekozen voor bodembedekkers en een paar meerstammige bomen, nu een uur per maand.'],
['2026-06-18',6,'Google','Joost Dekker','Twello','Onderhoud','Afspraak een keer vergeten','Een geplande onderhoudsbeurt is vergeten. Na een telefoontje kwamen ze wel dezelfde week, en de beurt erna was gratis.','Dit had niet mogen gebeuren. We werken sinds juli met een planning die je een dag vooraf een sms stuurt. Bart van Dam'],
['2026-06-02',9,'Trustoo','Anouk Meijer','Apeldoorn-Noord','Beplanting','Mooie borders met veel bloei','Advies over planten die het hier op de zandgrond goed doen. Van maart tot oktober bloeit er iets.']];
var DAG=['zo','ma','di','wo','do','vr','za'],MND=['jan','feb','mrt','apr','mei','jun','jul','aug','sep','okt','nov','dec'],shown=6;
var grid=w.querySelector('.hvd__grid'),more=w.querySelector('.hvd__more'),cnt=w.querySelector('.hvd__count'),crit=w.querySelector('.hvd__crit input'),sort=w.querySelector('.hvd__sort select');
function nl(s){var d=new Date(s+'T12:00:00');return DAG[d.getDay()]+' '+d.getDate()+' '+MND[d.getMonth()]+' '+d.getFullYear();}
function list(){var p=w.querySelector('input[name=hvd-p]:checked').value,o=sort.value;
var l=R.filter(function(r){return (p==='alle'||r[2]===p)&&(!crit.checked||r[1]<8);});
l.sort(function(a,b){return o==='hi'?b[1]-a[1]||(a[0]<b[0]?1:-1):o==='lo'?a[1]-b[1]:(a[0]<b[0]?1:-1);});return l;}
function card(r,i,isNew){var cls=r[1]>=9?'':r[1]===8?' is-8':' is-low';
return '<li class="hvd__card'+(isNew?' is-new':'')+'"><div class="hvd__ch"><span class="hvd__num'+cls+'" aria-label="Cijfer '+r[1]+' van 10">'+r[1]+'</span><div><h3 class="hvd__ct">'+r[6]+'</h3><span class="hvd__meta">'+r[5]+' · '+r[4]+'</span></div></div><p class="hvd__txt" id="hvd-t'+i+'">'+r[7]+'</p>'+(r[7].length>190?'<button class="hvd__rm" type="button" aria-expanded="false" aria-controls="hvd-t'+i+'">Lees verder</button>':'')+(r[8]?'<p class="hvd__reply"><b>Reactie van Van Dam</b>'+r[8]+'</p>':'')+'<div class="hvd__cf"><span><b>'+r[3]+'</b>, '+nl(r[0])+'</span><span>'+r[2]+(r[2]==='Google'?' ('+(r[1]/2)+' sterren)':'')+'</span></div></li>';}
function paint(from){var l=list(),n=Math.min(shown,l.length);
if(!l.length){grid.innerHTML='<li class="hvd__empty">Geen beoordelingen in deze selectie.<br><button type="button" data-hvd-reset>Toon alle reviews</button></li>';cnt.textContent='0 reviews';more.hidden=true;return;}
grid.innerHTML=l.slice(0,n).map(function(r,i){return card(r,i,from!=null&&i>=from);}).join('');
cnt.textContent=n+' van '+l.length+' reviews'+(crit.checked?' met een cijfer lager dan 8':'');
more.hidden=false;more.disabled=n>=l.length;more.textContent=n>=l.length?'Alle '+l.length+' reviews getoond':'Meer reviews laden';}
w.querySelector('.hvd__tools').addEventListener('change',function(){shown=6;paint();});
grid.addEventListener('click',function(e){var b=e.target.closest('.hvd__rm');if(b){var c=b.closest('.hvd__card'),o=c.classList.toggle('is-open');b.setAttribute('aria-expanded',o?'true':'false');b.textContent=o?'Minder tonen':'Lees verder';return;}
if(e.target.closest('[data-hvd-reset]')){w.querySelector('input[value=alle]').checked=true;crit.checked=false;shown=6;paint();}});
more.addEventListener('click',function(){if(more.disabled)return;var f=shown;more.setAttribute('aria-busy','true');more.disabled=true;more.textContent='Laden';
setTimeout(function(){more.removeAttribute('aria-busy');shown+=3;paint(f);},700);});
paint();
}
init(document.querySelector('.jouw-container'));
Meer uit paginasecties
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 →