Topbalk met reviewscore en header met infoblokken New
Header for a practice or shop: slim top bar with review score and count, service area and emergency number, then a header with three info blocks (call, address, opening hours). Hours compute live whether you are open and expand to a weekly table (aria-expanded button, Esc closes). Plain HTML/CSS plus a small JS clock; without JS the fixed hours remain.
Voor Maarssen, Breukelen, Oud-Zuilen en Utrecht-Noord
Spoed 24/7 0346 55 12 80- Bel ons0346 55 12 00
- Adres · plan je routeBisonspoor 1120, Maarssen
-
Openingstijden balie en spreekuur Buiten deze tijden: bel 0346 55 12 80, er is altijd een dierenarts bereikbaar.
Oktober is gebitsmaand · gratis gebitscheck bij elke vaccinatie
Dierenarts in Maarssen, ook buiten kantoortijd bereikbaar
Vier dierenartsen en zes paraveterinairen voor honden, katten, konijnen en kleine huisdieren. Eigen operatiekamer, röntgen en echo in huis.
How to use it
- Paste the HTML where the page sections should appear.
- Add the CSS to your stylesheet. All classes are prefixed, so nothing clashes with your own styles.
- Add the JavaScript and call init() with the element that contains the HTML.
<!-- Topbalk met reviewscore en header met infoblokken · NedDev · eigen werk. -->
<div class="jouw-container">
<div class="dkv">
<div class="dkv__top">
<div class="dkv__top-in">
<a class="dkv__score" href="#" aria-label="Beoordeeld met 4,9 van 5 uit 386 Google-reviews">
<span class="dkv__stars" aria-hidden="true"><svg viewBox="0 0 100 20"><defs><clipPath id="dkv-clip"><rect width="98" height="20"/></clipPath></defs><g class="dkv__st-bg"><path id="dkv-s" d="M10 1.5l2.6 5.4 5.9.8-4.3 4.1 1 5.8L10 14.8l-5.2 2.8 1-5.8L1.5 7.7l5.9-.8z"/><use href="#dkv-s" x="20"/><use href="#dkv-s" x="40"/><use href="#dkv-s" x="60"/><use href="#dkv-s" x="80"/></g><g class="dkv__st-fg" clip-path="url(#dkv-clip)"><use href="#dkv-s"/><use href="#dkv-s" x="20"/><use href="#dkv-s" x="40"/><use href="#dkv-s" x="60"/><use href="#dkv-s" x="80"/></g></svg></span>
<b>4,9</b><span class="dkv__score-n">uit 386 Google-reviews</span>
</a>
<p class="dkv__area"><svg class="dkv__i" viewBox="0 0 20 20" aria-hidden="true"><path d="M10 18s-5.5-5.2-5.5-9.3a5.5 5.5 0 0 1 11 0C15.5 12.8 10 18 10 18z"/><circle cx="10" cy="8.6" r="2"/></svg>Voor Maarssen, Breukelen, Oud-Zuilen en Utrecht-Noord</p>
<a class="dkv__spoed" href="tel:+31346551280"><span class="dkv__pulse" aria-hidden="true"></span>Spoed 24/7 <b>0346 55 12 80</b></a>
</div>
</div>
<div class="dkv__head">
<div class="dkv__head-in">
<a class="dkv__logo" href="#" aria-label="Dierenkliniek De Vecht, naar de homepage">
<svg viewBox="0 0 40 40" aria-hidden="true"><rect width="40" height="40" rx="9" fill="#0f4c47"/><path d="M9 13c4 0 6 3 7.5 7s3.5 9 3.5 9 2-5 3.5-9 3.5-7 7.5-7" fill="none" stroke="#f3ece1" stroke-width="2.6" stroke-linecap="round"/><path d="M8 29c6-2.2 18-2.2 24 0" fill="none" stroke="#d9643a" stroke-width="2.6" stroke-linecap="round"/></svg>
<span><small>Dierenkliniek</small>De Vecht</span>
</a>
<ul class="dkv__info">
<li><a class="dkv__blk" href="tel:+31346551200"><svg class="dkv__i" viewBox="0 0 20 20" aria-hidden="true"><path d="M5.2 2.8h2.6l1.3 3.6-1.8 1.2a9 9 0 0 0 5.1 5.1l1.2-1.8 3.6 1.3v2.6a1.6 1.6 0 0 1-1.7 1.6C9 15.9 4.1 11 3.6 4.5a1.6 1.6 0 0 1 1.6-1.7z"/></svg><span><small>Bel ons</small><b>0346 55 12 00</b></span></a></li>
<li><a class="dkv__blk" href="#"><svg class="dkv__i" viewBox="0 0 20 20" aria-hidden="true"><path d="M10 18s-5.5-5.2-5.5-9.3a5.5 5.5 0 0 1 11 0C15.5 12.8 10 18 10 18z"/><circle cx="10" cy="8.6" r="2"/></svg><span><small>Adres · plan je route</small><b>Bisonspoor 1120, Maarssen</b></span></a></li>
<li class="dkv__hrs">
<button class="dkv__blk dkv__blk--btn" type="button" aria-expanded="false" aria-controls="dkv-week"><svg class="dkv__i" viewBox="0 0 20 20" aria-hidden="true"><circle cx="10" cy="10" r="7.5"/><path d="M10 5.6V10l2.8 1.8"/></svg><span><small class="dkv__now"><i class="dkv__dot"></i><em>Openingstijden</em></small><b class="dkv__when">ma tot vr 08:00 tot 18:00</b></span><svg class="dkv__chev" viewBox="0 0 20 20" aria-hidden="true"><path d="M6 8l4 4 4-4"/></svg></button>
<div id="dkv-week" class="dkv__week" hidden>
<table><caption>Openingstijden balie en spreekuur</caption><tbody></tbody></table>
<p>Buiten deze tijden: bel <a href="tel:+31346551280">0346 55 12 80</a>, er is altijd een dierenarts bereikbaar.</p>
</div>
</li>
</ul>
<a class="dkv__cta" href="#">Afspraak maken</a>
</div>
</div>
<div class="dkv__nav"><ul class="dkv__nav-in"><li><a href="#" aria-current="page">Honden en katten</a></li><li><a href="#">Konijnen en knagers</a></li><li><a href="#">Vogels en reptielen</a></li><li><a href="#">Gebitszorg</a></li><li><a href="#">Tarieven</a></li><li><a href="#">Over de kliniek</a></li><li><a href="#">Contact</a></li></ul></div>
<div class="dkv__hero">
<div class="dkv__hero-in">
<div>
<p class="dkv__kick">Oktober is gebitsmaand · gratis gebitscheck bij elke vaccinatie</p>
<h2 class="dkv__h">Dierenarts in Maarssen, ook buiten kantoortijd bereikbaar</h2>
<p class="dkv__lead">Vier dierenartsen en zes paraveterinairen voor honden, katten, konijnen en kleine huisdieren. Eigen operatiekamer, röntgen en echo in huis.</p>
</div>
<img class="dkv__img" src="https://neddev.com/lab-media/topbalk-vertrouwen-1.webp" alt="Dierenarts onderzoekt een beagle op de behandeltafel" loading="lazy">
</div>
</div>
<div class="dkv__demo"><span>Demo, zet de klok op</span><button type="button" data-dkv-t="nu" aria-pressed="true">nu</button><button type="button" data-dkv-t="2,17,35" aria-pressed="false">di 17:35</button><button type="button" data-dkv-t="6,13,0" aria-pressed="false">za 13:00</button><button type="button" data-dkv-t="0,10,0" aria-pressed="false">zo 10:00</button></div>
</div>
</div>/* Topbalk met reviewscore en header met infoblokken · NedDev · eigen werk. */
/* fonts (Fontshare): zodiak@400,700 + general-sans@400,500,600 */
.dkv{--dkv-teal:#0f4c47;--dkv-teal2:#176159;--dkv-sand:#f3ece1;--dkv-coral:#d9643a;--dkv-ink:#13201e;--dkv-mut:#556461;--dkv-line:#e2d9ca;--dkv-ok:#24835a;--dkv-warn:#b7790c;background:#fff;color:var(--dkv-ink);font-family:'General Sans',sans-serif;box-sizing:border-box}
.dkv *,.dkv *::before,.dkv *::after{box-sizing:border-box}
.dkv a{color:inherit}
.dkv a:focus-visible,.dkv button:focus-visible{outline:2px solid var(--dkv-coral);outline-offset:2px;border-radius:4px}
.dkv__i{width:18px;height:18px;flex:none;fill:none;stroke:currentColor;stroke-width:1.6;stroke-linecap:round;stroke-linejoin:round}
.dkv__top{background:var(--dkv-teal);color:#fff;font-size:13px}
.dkv__top-in{max-width:1200px;margin:0 auto;padding:0 32px;height:40px;display:flex;align-items:center;justify-content:space-between;gap:20px}
.dkv__score{display:inline-flex;align-items:center;gap:8px;text-decoration:none;white-space:nowrap}
.dkv__score:hover .dkv__score-n{text-decoration:underline;text-underline-offset:3px}
.dkv__stars svg{width:78px;height:15px;display:block}
.dkv__st-bg{fill:rgba(255,255,255,.28)}.dkv__st-fg{fill:#f6c453}
.dkv__score b{font-weight:600;font-variant-numeric:tabular-nums}
.dkv__score-n{color:rgba(255,255,255,.82)}
.dkv__area{margin:0;display:flex;align-items:center;gap:6px;color:rgba(255,255,255,.82);white-space:nowrap;overflow:hidden;text-overflow:ellipsis;min-width:0}
.dkv__area .dkv__i{width:15px;height:15px}
.dkv__spoed{display:inline-flex;align-items:center;gap:8px;text-decoration:none;white-space:nowrap;padding:5px 10px;margin-right:-10px;border-radius:4px;transition:background-color .18s}
.dkv__spoed:hover{background:rgba(255,255,255,.1)}
.dkv__spoed b{font-weight:600;font-variant-numeric:tabular-nums}
.dkv__pulse{width:8px;height:8px;border-radius:50%;background:#ff8a5c;box-shadow:0 0 0 0 rgba(255,138,92,.6);animation:dkv-pulse 2.4s infinite}
@keyframes dkv-pulse{70%{box-shadow:0 0 0 7px rgba(255,138,92,0)}100%{box-shadow:0 0 0 0 rgba(255,138,92,0)}}
.dkv__head{border-bottom:1px solid var(--dkv-line)}
.dkv__head-in{max-width:1200px;margin:0 auto;padding:16px 32px;display:flex;align-items:center;gap:28px}
.dkv__logo{display:flex;align-items:center;gap:10px;text-decoration:none;margin-right:auto}
.dkv__logo svg{width:42px;height:42px}
.dkv__logo span{font-family:'Zodiak',serif;font-weight:700;font-size:22px;line-height:1;letter-spacing:-.01em}
.dkv__logo small{display:block;font-family:'General Sans',sans-serif;font-weight:500;font-size:11px;letter-spacing:.12em;text-transform:uppercase;color:var(--dkv-mut);margin-bottom:3px}
.dkv__info{list-style:none;margin:0;padding:0;display:flex;gap:6px}
.dkv__hrs{position:relative}
.dkv__blk{display:flex;align-items:center;gap:10px;padding:8px 12px;border-radius:8px;text-decoration:none;text-align:left;background:none;border:0;font:inherit;color:inherit;cursor:pointer;transition:background-color .18s}
.dkv__blk:hover{background:var(--dkv-sand)}
.dkv__blk>.dkv__i{width:34px;height:34px;padding:8px;border-radius:50%;background:var(--dkv-sand);color:var(--dkv-teal);transition:background-color .18s}
.dkv__blk:hover>.dkv__i{background:#fff}
.dkv__blk small{display:flex;align-items:center;gap:6px;font-size:12px;color:var(--dkv-mut);line-height:1.2}
.dkv__blk small em{font-style:normal}
.dkv__blk b{display:block;font-weight:600;font-size:14.5px;line-height:1.3;font-variant-numeric:tabular-nums;white-space:nowrap}
.dkv__dot{width:8px;height:8px;border-radius:50%;background:#9aa6a3;flex:none}
.dkv__hrs[data-st=open] .dkv__dot{background:var(--dkv-ok)}
.dkv__hrs[data-st=bijna] .dkv__dot{background:var(--dkv-warn)}
.dkv__hrs[data-st=open] .dkv__now em{color:var(--dkv-ok);font-weight:600}
.dkv__hrs[data-st=bijna] .dkv__now em{color:var(--dkv-warn);font-weight:600}
.dkv__chev{width:16px;height:16px;fill:none;stroke:currentColor;stroke-width:1.8;stroke-linecap:round;stroke-linejoin:round;transition:transform .2s}
.dkv__blk[aria-expanded=true] .dkv__chev{transform:rotate(180deg)}
.dkv__week{position:absolute;top:calc(100% + 8px);right:0;z-index:5;width:300px;background:#fff;border:1px solid var(--dkv-line);border-radius:10px;padding:14px 16px;box-shadow:0 18px 40px -20px rgba(15,76,71,.35);font-size:14px}
.dkv__week table{width:100%;border-collapse:collapse}
.dkv__week caption{text-align:left;font-weight:600;font-size:13px;color:var(--dkv-mut);padding-bottom:6px}
.dkv__week td{padding:5px 0;border-bottom:1px solid #f0ebe2;font-variant-numeric:tabular-nums}
.dkv__week td+td{text-align:right}
.dkv__week tr.is-today td{font-weight:600;color:var(--dkv-teal)}
.dkv__week p{margin:10px 0 0;font-size:12.5px;color:var(--dkv-mut);line-height:1.45}
.dkv__week p a{color:var(--dkv-teal);font-weight:600}
.dkv__cta{display:inline-flex;align-items:center;height:46px;padding:0 20px;border-radius:8px;background:var(--dkv-coral);color:#fff!important;text-decoration:none;font-weight:600;font-size:15px;white-space:nowrap;transition:background-color .18s}
.dkv__cta:hover{background:#c2532b}
.dkv__cta:active{transform:translateY(1px)}
.dkv__nav{border-bottom:1px solid var(--dkv-line)}
.dkv__nav-in{list-style:none;max-width:1200px;margin:0 auto;padding:0 20px;display:flex;gap:4px;overflow-x:auto;scrollbar-width:none}
.dkv__nav-in::-webkit-scrollbar{display:none}
.dkv__nav-in a{display:block;padding:13px 12px;font-size:14.5px;font-weight:500;text-decoration:none;white-space:nowrap;border-bottom:2px solid transparent;transition:color .18s,border-color .18s}
.dkv__nav-in a:hover{color:var(--dkv-teal);border-bottom-color:var(--dkv-line)}
.dkv__nav-in a[aria-current]{color:var(--dkv-teal);border-bottom-color:var(--dkv-teal)}
.dkv__hero{background:var(--dkv-sand)}
.dkv__hero-in{max-width:1200px;margin:0 auto;padding:36px 32px;display:grid;grid-template-columns:1.2fr .8fr;gap:40px;align-items:center}
.dkv__kick{display:inline-block;margin:0 0 14px;font-size:13px;font-weight:600;color:#8f3a1a;background:#fbe1d4;padding:5px 10px;border-radius:4px}
.dkv__h{font-family:'Zodiak',serif;font-weight:700;font-size:clamp(28px,3.4vw,42px);line-height:1.08;letter-spacing:-.01em;margin:0 0 12px;max-width:20ch}
.dkv__lead{margin:0;font-size:16px;line-height:1.6;color:var(--dkv-mut);max-width:52ch}
.dkv__img{width:100%;aspect-ratio:16/10;object-fit:cover;border-radius:10px;display:block}
.dkv__demo{max-width:1200px;margin:0 auto;padding:12px 32px 16px;display:flex;flex-wrap:wrap;gap:6px;align-items:center;font-size:12px;color:var(--dkv-mut)}
.dkv__demo span{font-weight:600;margin-right:4px}
.dkv__demo button{font:500 12px 'General Sans',sans-serif;border:1px solid var(--dkv-line);background:#fff;border-radius:999px;padding:5px 11px;cursor:pointer;color:var(--dkv-ink);transition:background-color .18s}
.dkv__demo button:hover{background:var(--dkv-sand)}
.dkv__demo button[aria-pressed=true]{background:var(--dkv-teal);border-color:var(--dkv-teal);color:#fff}
@media (max-width:1080px){.dkv__info li:nth-child(2){display:none}}
@media (max-width:860px){.dkv__area{display:none}.dkv__head-in{flex-wrap:wrap;gap:10px 14px;padding:14px 16px}.dkv__top-in{padding:0 16px}.dkv__info{order:3;width:100%;display:grid;grid-template-columns:repeat(3,1fr);gap:6px}.dkv__info li:nth-child(2){display:block}.dkv__blk{flex-direction:column;align-items:flex-start;gap:6px;padding:8px;border:1px solid var(--dkv-line);height:100%;width:100%}.dkv__blk b{font-size:12.5px;white-space:normal;overflow-wrap:anywhere}.dkv__chev{display:none}.dkv__week{left:auto;right:0;width:min(300px,calc(100vw - 40px))}.dkv__hero-in{grid-template-columns:1fr;padding:24px 16px;gap:20px}.dkv__demo{padding:12px 16px 16px}.dkv__nav-in{padding:0 8px}}
@media (max-width:520px){.dkv__score-n{display:none}.dkv__spoed{font-size:12.5px}.dkv__cta{height:40px;padding:0 14px;font-size:14px}.dkv__logo span{font-size:19px}.dkv__blk small{font-size:11px}}
@media (prefers-reduced-motion:reduce){.dkv *{animation:none!important;transition:none!important}}// Topbalk met reviewscore en header met infoblokken · NedDev · eigen werk.
// root = het element waarin de HTML staat
function init(root){
var w=root.querySelector('.dkv');if(!w)return;
var H={0:null,1:[8,0,18,0],2:[8,0,18,0],3:[8,0,20,0],4:[8,0,18,0],5:[8,0,18,0],6:[9,0,12,0]};
var DAG=['zondag','maandag','dinsdag','woensdag','donderdag','vrijdag','zaterdag'],KORT=['zo','ma','di','wo','do','vr','za'];
var hrs=w.querySelector('.dkv__hrs'),btn=hrs.querySelector('button'),pane=w.querySelector('#dkv-week'),now=w.querySelector('.dkv__now em'),when=w.querySelector('.dkv__when'),tb=pane.querySelector('tbody');
var fake=null;
function t2(h,m){return (h<10?'0':'')+h+':'+(m<10?'0':'')+m;}
function next(d){for(var i=1;i<8;i++){var k=(d+i)%7;if(H[k])return {d:k,i:i};}}
function paint(){
var n=new Date(),d=n.getDay(),mins=n.getHours()*60+n.getMinutes();
if(fake){d=fake[0];mins=fake[1]*60+fake[2];}
var o=H[d],st='dicht';
if(o){var a=o[0]*60+o[1],b=o[2]*60+o[3];if(mins>=a&&mins<b)st=(b-mins<=45)?'bijna':'open';
if(st==='open'){now.textContent='Nu open';when.textContent='vandaag tot '+t2(o[2],o[3]);}
else if(st==='bijna'){now.textContent='Sluit over '+(b-mins)+' min';when.textContent='vandaag tot '+t2(o[2],o[3]);}
else if(mins<a){now.textContent='Nu gesloten';when.textContent='vandaag open om '+t2(o[0],o[1]);}}
if(st==='dicht'&&(!o||mins>=o[2]*60+o[3])){var x=next(d);now.textContent='Nu gesloten';when.textContent=(x.i===1?'morgen':KORT[x.d])+' open om '+t2(H[x.d][0],H[x.d][1]);}
hrs.setAttribute('data-st',st);
tb.innerHTML=[1,2,3,4,5,6,0].map(function(k){var v=H[k];return '<tr'+(k===d?' class="is-today"':'')+'><td>'+DAG[k]+(k===d?' (vandaag)':'')+'</td><td>'+(v?t2(v[0],v[1])+' tot '+t2(v[2],v[3]):'alleen spoed')+'</td></tr>';}).join('');
}
function open(v){btn.setAttribute('aria-expanded',v?'true':'false');pane.hidden=!v;}
btn.addEventListener('click',function(){open(pane.hidden);});
w.addEventListener('keydown',function(e){if(e.key==='Escape'&&!pane.hidden){open(false);btn.focus();}});
document.addEventListener('click',function(e){if(!pane.hidden&&!hrs.contains(e.target))open(false);});
w.querySelector('.dkv__demo').addEventListener('click',function(e){var b=e.target.closest('[data-dkv-t]');if(!b)return;
[].forEach.call(w.querySelectorAll('[data-dkv-t]'),function(x){x.setAttribute('aria-pressed',x===b?'true':'false');});
var v=b.getAttribute('data-dkv-t');fake=v==='nu'?null:v.split(',').map(Number);paint();});
paint();setInterval(function(){if(!fake)paint();},60000);
}
init(document.querySelector('.jouw-container'));
More page sections
Seen something you like?
Add it to your selection and send it over. We build your site around it, in your brand.
Get in touch →