Zwevende contactkaart met gezicht Nieuw
Kaartje rechtsonder met de foto van een echte medewerker, beschikbaarheid en knoppen WhatsApp en Bellen. Verschijnt een keer per sessie na een korte pauze (zodra het blok in beeld is), is sluitbaar met de kruisknop of Esc en klapt dan in tot een rond fotoknopje. De keuze staat in sessionStorage (met try/catch, werkt ook zonder). Inkomen met @starting-style en transition-behavior: allow-discrete; browsers zonder ondersteuning tonen de kaart zonder animatie.
Utrecht-West · zonder verwijzing
Rug, knie of schouder? Meestal binnen 2 werkdagen op de behandeltafel.
Zes fysiotherapeuten, waarvan twee sportfysio en een manueel therapeut. Vergoed vanuit je aanvullende verzekering.

Twijfel je of fysio iets voor je klacht is? App me, ik reageer meestal binnen een uur.
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.
<!-- Zwevende contactkaart met gezicht · NedDev · eigen werk. -->
<div class="jouw-container">
<div class="fyk">
<div class="fyk__page">
<div class="fyk__bar"><span class="fyk__logo"><svg viewBox="0 0 28 28" aria-hidden="true"><circle cx="14" cy="14" r="13" fill="#1f3b2d"/><path d="M9 20c2-6 4-9 10-11M11 8.5c1.6 0 2.8 1.2 2.8 2.8" fill="none" stroke="#e7efe4" stroke-width="2" stroke-linecap="round"/></svg>Fysio Lombok</span><span class="fyk__links"><a href="#">Klachten</a><a href="#">Behandelingen</a><a href="#">Vergoedingen</a><a href="#">Team</a></span><a class="fyk__cta" href="#">Afspraak maken</a></div>
<div class="fyk__hero">
<div class="fyk__txt">
<p class="fyk__kick">Utrecht-West · zonder verwijzing</p>
<h2 class="fyk__h">Rug, knie of schouder? Meestal binnen 2 werkdagen op de behandeltafel.</h2>
<p class="fyk__lead">Zes fysiotherapeuten, waarvan twee sportfysio en een manueel therapeut. Vergoed vanuit je aanvullende verzekering.</p>
<ul class="fyk__chips"><li><a href="#">Lage rugpijn</a></li><li><a href="#">Knieblessure</a></li><li><a href="#">Nek en schouder</a></li><li><a href="#">Na een operatie</a></li><li><a href="#">Hardloopblessure</a></li></ul>
</div>
<img class="fyk__img" src="https://neddev.com/lab-media/contactkaart-gezicht-2.webp" alt="Fysiotherapeut begeleidt een knieoefening op de behandelbank" loading="lazy">
</div>
</div>
<div class="fyk__card" role="complementary" aria-label="Vraag het een fysiotherapeut" hidden>
<button class="fyk__x" type="button" aria-label="Kaart sluiten"><svg viewBox="0 0 20 20" aria-hidden="true"><path d="M5 5l10 10M15 5L5 15"/></svg></button>
<div class="fyk__who"><img src="https://neddev.com/lab-media/contactkaart-gezicht-1.webp" alt="" width="56" height="56"><div><b>Sanne de Wit</b><span>Fysiotherapeut, 11 jaar in de praktijk</span><em class="fyk__on"><i aria-hidden="true"></i><span class="fyk__on-t">Nu bereikbaar</span></em></div></div>
<p class="fyk__msg">Twijfel je of fysio iets voor je klacht is? App me, ik reageer meestal binnen een uur.</p>
<div class="fyk__btns"><a class="fyk__b fyk__b--wa" href="#">WhatsApp Sanne</a><a class="fyk__b fyk__b--tel" href="tel:+31302012488">030 201 24 88</a></div>
</div>
<button class="fyk__mini" type="button" aria-label="Open de contactkaart van Sanne" aria-expanded="false" hidden><img src="https://neddev.com/lab-media/contactkaart-gezicht-1.webp" alt=""><i aria-hidden="true"></i></button>
<div class="fyk__demo"><span>Demo</span><button type="button" data-fyk="reset">Wis sessie en toon opnieuw</button><span class="fyk__state" aria-live="polite"></span></div>
</div>
</div>/* Zwevende contactkaart met gezicht · NedDev · eigen werk. */
/* fonts (Fontshare): plus-jakarta-sans@400,500,600,700 */
.fyk{--fyk-forest:#1f3b2d;--fyk-sage:#e7efe4;--fyk-sage2:#d3e0cf;--fyk-ink:#18241d;--fyk-mut:#56635b;--fyk-line:#dfe6dc;--fyk-wa:#1b7a44;position:relative;background:#fbfcfa;color:var(--fyk-ink);font-family:'Plus Jakarta Sans',sans-serif;box-sizing:border-box;min-height:560px;overflow:hidden}
.fyk *,.fyk *::before,.fyk *::after{box-sizing:border-box}
.fyk a:focus-visible,.fyk button:focus-visible{outline:2px solid #c46a2c;outline-offset:2px}
.fyk__bar{max-width:1200px;margin:0 auto;padding:16px 32px;display:flex;align-items:center;gap:28px;border-bottom:1px solid var(--fyk-line)}
.fyk__logo{display:flex;align-items:center;gap:9px;font-weight:700;font-size:17px;margin-right:auto;white-space:nowrap}
.fyk__logo svg{width:28px;height:28px}
.fyk__links{display:flex;gap:22px}
.fyk__links a{color:var(--fyk-ink);text-decoration:none;font-size:14.5px;font-weight:500}
.fyk__links a:hover{color:var(--fyk-forest);text-decoration:underline;text-underline-offset:4px}
.fyk__cta{background:var(--fyk-forest);color:#fff;text-decoration:none;font-weight:600;font-size:14px;padding:10px 16px;border-radius:999px;transition:background-color .18s}
.fyk__cta:hover{background:#2c5440}
.fyk__hero{max-width:1200px;margin:0 auto;padding:40px 32px 90px;display:grid;grid-template-columns:1fr 1fr;gap:44px;align-items:center}
.fyk__kick{margin:0 0 12px;font-size:13px;font-weight:600;color:var(--fyk-forest)}
.fyk__h{font-weight:700;font-size:clamp(28px,3.2vw,40px);line-height:1.1;letter-spacing:-.02em;margin:0 0 14px}
.fyk__lead{margin:0 0 20px;font-size:16px;line-height:1.6;color:var(--fyk-mut)}
.fyk__chips{list-style:none;margin:0;padding:0;display:flex;flex-wrap:wrap;gap:8px}
.fyk__chips a{display:block;padding:8px 13px;border-radius:999px;background:var(--fyk-sage);color:var(--fyk-ink);text-decoration:none;font-size:14px;font-weight:500;transition:background-color .18s}
.fyk__chips a:hover{background:var(--fyk-sage2)}
.fyk__img{width:100%;aspect-ratio:4/3;object-fit:cover;border-radius:20px;display:block}
.fyk__card{position:absolute;right:24px;bottom:24px;z-index:5;width:330px;background:#fff;border-radius:16px;padding:16px;box-shadow:0 24px 50px -18px rgba(24,36,29,.4),0 0 0 1px rgba(24,36,29,.06);opacity:1;translate:0 0;transition:opacity .32s ease,translate .32s cubic-bezier(.2,.7,.2,1),display .32s allow-discrete}
.fyk__card[hidden]{display:none;opacity:0;translate:0 14px}
@starting-style{.fyk__card{opacity:0;translate:0 14px}}
.fyk__x{position:absolute;top:8px;right:8px;width:32px;height:32px;display:grid;place-items:center;border:0;background:transparent;border-radius:50%;cursor:pointer;color:var(--fyk-mut);transition:background-color .16s,color .16s}
.fyk__x:hover{background:var(--fyk-sage);color:var(--fyk-ink)}
.fyk__x svg{width:16px;height:16px;fill:none;stroke:currentColor;stroke-width:1.8;stroke-linecap:round}
.fyk__who{display:flex;gap:12px;align-items:center;padding-right:28px}
.fyk__who img{width:56px;height:56px;border-radius:50%;object-fit:cover;flex:none}
.fyk__who b{display:block;font-size:15px}
.fyk__who span{display:block;font-size:12.5px;color:var(--fyk-mut);line-height:1.35}
.fyk__on{display:flex!important;align-items:center;gap:6px;font-style:normal;margin-top:3px}
.fyk__on i{width:8px;height:8px;border-radius:50%;background:#2f9e5c}
.fyk__on.is-off i{background:#a3aaa5}
.fyk__on .fyk__on-t{font-size:12px;font-weight:600;color:#23744a}
.fyk__on.is-off .fyk__on-t{color:var(--fyk-mut)}
.fyk__msg{margin:12px 0;font-size:14px;line-height:1.5}
.fyk__btns{display:grid;grid-template-columns:1fr 1fr;gap:8px}
.fyk__b{display:flex;align-items:center;justify-content:center;height:42px;border-radius:999px;text-decoration:none;font-weight:600;font-size:14px;transition:background-color .16s,border-color .16s}
.fyk__b--wa{background:var(--fyk-wa);color:#fff}
.fyk__b--wa:hover{background:#156638}
.fyk__b--tel{border:1.5px solid var(--fyk-line);color:var(--fyk-ink);font-variant-numeric:tabular-nums}
.fyk__b--tel:hover{border-color:var(--fyk-ink)}
.fyk__b:active{transform:translateY(1px)}
.fyk__mini{position:absolute;right:24px;bottom:24px;z-index:5;width:60px;height:60px;padding:0;border:3px solid #fff;border-radius:50%;background:#fff;box-shadow:0 12px 30px -10px rgba(24,36,29,.5);cursor:pointer;transition:transform .18s}
.fyk__mini:hover{transform:translateY(-2px)}
.fyk__mini img{width:100%;height:100%;object-fit:cover;border-radius:50%;display:block}
.fyk__mini i{position:absolute;right:0;bottom:2px;width:13px;height:13px;border-radius:50%;background:#2f9e5c;border:2px solid #fff}
.fyk__demo{position:absolute;left:32px;bottom:20px;display:flex;flex-wrap:wrap;gap:8px;align-items:center;font-size:12px;color:var(--fyk-mut)}
.fyk__demo>span:first-child{font-weight:700}
.fyk__demo button{font:500 12px 'Plus Jakarta Sans',sans-serif;border:1px solid var(--fyk-line);background:#fff;border-radius:999px;padding:5px 11px;cursor:pointer;color:var(--fyk-ink)}
.fyk__demo button:hover{border-color:var(--fyk-ink)}
@media (max-width:900px){.fyk__links{display:none}.fyk__bar{padding:12px 16px}.fyk__hero{grid-template-columns:1fr;padding:22px 16px 230px;gap:18px}.fyk__img{aspect-ratio:16/9}.fyk__demo{left:auto;right:auto;bottom:auto;top:auto;position:relative;padding:0 80px 0 0;margin:-210px 16px 0}}
@media (max-width:560px){.fyk__card{left:12px;right:12px;bottom:12px;width:auto}.fyk__mini{right:14px;bottom:14px}.fyk__demo{margin-top:-200px}}
@media (prefers-reduced-motion:reduce){.fyk *{animation:none!important;transition:none!important}}// Zwevende contactkaart met gezicht · NedDev · eigen werk.
// root = het element waarin de HTML staat
function init(root){
var w=root.querySelector('.fyk');if(!w)return;
var card=w.querySelector('.fyk__card'),mini=w.querySelector('.fyk__mini'),x=w.querySelector('.fyk__x'),stEl=w.querySelector('.fyk__state'),on=w.querySelector('.fyk__on'),onT=w.querySelector('.fyk__on-t'),KEY='fyk-kaart';
function get(){try{return sessionStorage.getItem(KEY);}catch(e){return null;}}
function put(v){try{if(v)sessionStorage.setItem(KEY,v);else sessionStorage.removeItem(KEY);}catch(e){}}
var d=new Date(),h=d.getHours(),wd=d.getDay(),open=wd>0&&wd<6&&h>=8&&h<20;
if(!open){on.classList.add('is-off');onT.textContent='Reageert morgen vanaf 8:00';}
w.querySelector('.fyk__b--wa').href='https://wa.me/31302012488?text='+encodeURIComponent('Hoi Sanne, ik heb een vraag over mijn klacht:');
function show(focus){card.hidden=false;mini.hidden=true;mini.setAttribute('aria-expanded','true');if(focus)x.focus();}
function hide(focus){card.hidden=true;mini.hidden=false;mini.setAttribute('aria-expanded','false');put('dicht');stEl.textContent='Gesloten, onthouden voor deze sessie';if(focus)mini.focus();}
x.addEventListener('click',function(){hide(true);});
mini.addEventListener('click',function(){show(true);stEl.textContent='';});
card.addEventListener('keydown',function(e){if(e.key==='Escape')hide(true);});
w.querySelector('[data-fyk=reset]').addEventListener('click',function(){put(null);card.hidden=true;mini.hidden=true;stEl.textContent='Sessie gewist, kaart komt over 1 seconde';setTimeout(function(){show(false);stEl.textContent='';},1000);});
if(get()==='dicht'){mini.hidden=false;stEl.textContent='Eerder gesloten in deze sessie';}
else{var started=false;var go=function(){if(started)return;started=true;setTimeout(function(){if(get()!=='dicht')show(false);},1200);};
if('IntersectionObserver' in window){var io=new IntersectionObserver(function(en){if(en[0].isIntersecting){go();io.disconnect();}},{threshold:.4});io.observe(w);}else go();}
}
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 →