Hero met prijsindicatie-calculator Nieuw
Hero voor een schildersbedrijf met een calculator (m², binnen of buiten, aantal lagen) die live een prijsbandbreedte toont.
Schildersbedrijf Verhoef · Utrecht
Wat kost uw schilderwerk? Binnen tien seconden een richtprijs.
Geen formulier, geen wachttijd. Schuif, kies en zie direct de bandbreedte. Daarna komen we kosteloos inmeten voor de vaste prijs.
- Vaste prijs na inmeten, geen meerwerk achteraf
- Inclusief verf, afdekken en opruimen
- 5 jaar garantie op buitenwerk
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.
<!-- Hero met prijsindicatie-calculator · NedDev · eigen werk. -->
<div class="jouw-container">
<div class="xcl">
<div class="xcl__inner">
<div class="xcl__text">
<span class="xcl__eyebrow">Schildersbedrijf Verhoef · Utrecht</span>
<h2 class="xcl__h">Wat kost uw schilderwerk? Binnen tien seconden een richtprijs.</h2>
<p class="xcl__lead">Geen formulier, geen wachttijd. Schuif, kies en zie direct de bandbreedte. Daarna komen we kosteloos inmeten voor de vaste prijs.</p>
<ul class="xcl__list"><li>Vaste prijs na inmeten, geen meerwerk achteraf</li><li>Inclusief verf, afdekken en opruimen</li><li>5 jaar garantie op buitenwerk</li></ul>
</div>
<form class="xcl__card" novalidate>
<div class="xcl__field">
<div class="xcl__lab"><span>Oppervlakte</span><output class="xcl__m2">60 m²</output></div>
<input class="xcl__range" type="range" min="10" max="400" step="5" value="60" aria-label="Oppervlakte in vierkante meter">
<div class="xcl__scale"><span>10</span><span>400 m²</span></div>
</div>
<div class="xcl__field">
<div class="xcl__lab"><span>Waar</span></div>
<div class="xcl__seg" role="radiogroup" data-k="plek">
<button type="button" class="is-on" data-v="binnen" aria-pressed="true">Binnen</button>
<button type="button" data-v="buiten" aria-pressed="false">Buiten</button>
</div>
</div>
<div class="xcl__field">
<div class="xcl__lab"><span>Aantal lagen</span></div>
<div class="xcl__seg xcl__seg--3" data-k="lagen">
<button type="button" data-v="1" aria-pressed="false">1 laag</button>
<button type="button" class="is-on" data-v="2" aria-pressed="true">2 lagen</button>
<button type="button" data-v="3" aria-pressed="false">3 lagen</button>
</div>
</div>
<div class="xcl__res">
<span class="xcl__reslab">Richtprijs incl. btw</span>
<strong class="xcl__price" aria-live="polite">€ 1.640 tot € 2.230</strong>
<span class="xcl__meta">ca. <b class="xcl__days">3</b> werkdagen · incl. verf en voorrijkosten</span>
</div>
<a class="xcl__cta" href="#">Plan gratis inmeten <span aria-hidden="true">→</span></a>
</form>
</div>
</div>
</div>/* Hero met prijsindicatie-calculator · NedDev · eigen werk. */
.xcl{background:#f6f2e9;color:#16322c;font-family:'Switzer',sans-serif;box-sizing:border-box;position:relative;overflow:hidden}
.xcl *{box-sizing:border-box}
.xcl::before{content:'';position:absolute;right:-60px;top:-80px;width:340px;height:340px;background:repeating-linear-gradient(-45deg,rgba(226,114,91,.12) 0 14px,transparent 14px 28px);border-radius:50%}
.xcl__inner{position:relative;max-width:1120px;margin:0 auto;padding:52px 32px;display:grid;grid-template-columns:1fr 420px;gap:48px;align-items:center}
.xcl__eyebrow{display:block;font-family:'JetBrains Mono',monospace;font-size:11px;letter-spacing:.14em;text-transform:uppercase;color:#c4533a;margin-bottom:16px}
.xcl__h{font-size:clamp(28px,3.6vw,44px);line-height:1.05;letter-spacing:-.02em;font-weight:700;margin:0 0 16px;max-width:19ch}
.xcl__lead{font-size:16px;line-height:1.55;color:#3d554f;margin:0 0 20px;max-width:46ch}
.xcl__list{list-style:none;margin:0;padding:0;display:grid;gap:8px;font-size:14px}
.xcl__list li{padding-left:22px;position:relative}
.xcl__list li::before{content:'';position:absolute;left:0;top:5px;width:12px;height:7px;border-left:2px solid #c4533a;border-bottom:2px solid #c4533a;transform:rotate(-45deg)}
.xcl__card{background:#16322c;color:#fff;border-radius:6px;padding:24px;display:grid;gap:18px}
.xcl__lab{display:flex;justify-content:space-between;align-items:baseline;font-family:'JetBrains Mono',monospace;font-size:11px;letter-spacing:.1em;text-transform:uppercase;color:rgba(255,255,255,.6);margin-bottom:8px}
.xcl__m2{font:700 18px 'Switzer',sans-serif;color:#fff;letter-spacing:0;text-transform:none}
.xcl__range{width:100%;-webkit-appearance:none;appearance:none;height:6px;border-radius:3px;background:linear-gradient(90deg,#e2725b var(--p,13%),rgba(255,255,255,.18) var(--p,13%));outline:none;margin:4px 0}
.xcl__range::-webkit-slider-thumb{-webkit-appearance:none;width:22px;height:22px;border-radius:50%;background:#fff;border:4px solid #e2725b;cursor:grab}
.xcl__range::-moz-range-thumb{width:16px;height:16px;border-radius:50%;background:#fff;border:4px solid #e2725b;cursor:grab}
.xcl__scale{display:flex;justify-content:space-between;font-size:11px;color:rgba(255,255,255,.45)}
.xcl__seg{display:grid;grid-template-columns:1fr 1fr;gap:4px;background:rgba(255,255,255,.08);padding:4px;border-radius:4px}
.xcl__seg--3{grid-template-columns:repeat(3,1fr)}
.xcl__seg button{font:600 14px 'Switzer',sans-serif;color:rgba(255,255,255,.75);background:transparent;border:0;border-radius:3px;padding:9px 6px;cursor:pointer;transition:background .2s,color .2s}
.xcl__seg button:hover{color:#fff}
.xcl__seg button.is-on{background:#f6f2e9;color:#16322c}
.xcl__res{border-top:1px solid rgba(255,255,255,.15);padding-top:16px;display:grid;gap:4px}
.xcl__reslab{font-family:'JetBrains Mono',monospace;font-size:11px;letter-spacing:.1em;text-transform:uppercase;color:rgba(255,255,255,.55)}
.xcl__price{font-size:30px;line-height:1.1;font-weight:700;letter-spacing:-.01em;transition:opacity .15s}
.xcl__price.is-tick{opacity:.55}
.xcl__meta{font-size:13px;color:rgba(255,255,255,.65)}
.xcl__cta{display:flex;justify-content:center;gap:8px;background:#e2725b;color:#fff;text-decoration:none;font-weight:700;font-size:15px;padding:14px;border-radius:4px;transition:background .2s}
.xcl__cta:hover{background:#c4533a}
.xcl__cta span{transition:transform .2s}.xcl__cta:hover span{transform:translateX(4px)}
@media(max-width:860px){.xcl__inner{grid-template-columns:minmax(0,1fr);padding:34px 18px;gap:26px}.xcl__card{padding:18px}.xcl__price{font-size:25px}}// Hero met prijsindicatie-calculator · NedDev · eigen werk.
// root = het element waarin de HTML staat
function init(root){
var w=root.querySelector('.xcl');if(!w)return;
var r=w.querySelector('.xcl__range'),m2o=w.querySelector('.xcl__m2'),pr=w.querySelector('.xcl__price'),dy=w.querySelector('.xcl__days');
var st={plek:'binnen',lagen:2};
var rate={binnen:[16,22],buiten:[22,31]};
function eur(n){return '€ '+(Math.round(n/10)*10).toLocaleString('nl-NL');}
function calc(){
var m=+r.value,f=1+0.55*(st.lagen-1),q=rate[st.plek];
var lo=m*q[0]*f+95,hi=m*q[1]*f+95;
m2o.textContent=m+' m²';
r.style.setProperty('--p',((m-10)/390*100)+'%');
pr.classList.add('is-tick');
setTimeout(function(){pr.textContent=eur(lo)+' tot '+eur(hi);pr.classList.remove('is-tick');},90);
dy.textContent=Math.max(1,Math.ceil(m*st.lagen/(st.plek==='binnen'?45:32)));
}
w.querySelectorAll('.xcl__seg').forEach(function(g){
g.addEventListener('click',function(e){var b=e.target.closest('button');if(!b)return;
g.querySelectorAll('button').forEach(function(x){x.classList.toggle('is-on',x===b);x.setAttribute('aria-pressed',x===b);});
var k=g.getAttribute('data-k');st[k]=k==='lagen'?+b.getAttribute('data-v'):b.getAttribute('data-v');calc();});
});
r.addEventListener('input',calc);
w.querySelector('.xcl__card').addEventListener('submit',function(e){e.preventDefault();});
calc();
}
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 →