THINKING ABOUT STRAIGHTENING YOUR TEETH USING BRACES OR INVISALIGN?

At Dublin Orthodontists, you’ll be cared for by Dublin’s leading braces and Invisalign specialists, known for trusted expertise and outstanding results.

We currently offer a FREE consultation, where we can discuss your interest in straightening your teeth. We provide a full range of orthodontic options, including fixed braces and Invisalign® clear aligners.

Book your FREE consultation today and take the first step towards a confident, straighter smile.

.dwt{ --dwt-navy:#161D3A; --dwt-navy-2:#1F2852; --dwt-muted:#5A6382; --dwt-blue:#1B75BB; --dwt-sky:#3FC2F1; --dwt-pink:#CD4B6D; --dwt-pink-light:#F7A8BC; --dwt-yellow:#FDC30E; --dwt-green:#90C23E; --dwt-purple:#90278E; --dwt-magenta:#EC297B; --dwt-stripe-pink:#CD4B6D; --dwt-stripe-blue:#3C9BD3; --dwt-stripe-green:#9FCD53; --dwt-stripe-yellow:#F7EE3B; --dwt-font:'Fira Sans', system-ui, -apple-system, 'Segoe UI', Roboto, Arial, sans-serif; position:relative; overflow:hidden; isolation:isolate; clear:both; /* full-bleed: spans the whole screen width even inside a boxed container */ width:var(--dwt-vw,100%); max-width:none; margin:0 0 0 calc(50% - var(--dwt-vw,100%) / 2); background: radial-gradient(45% 60% at 100% 0%, rgba(63,194,241,.45), transparent 62%), radial-gradient(40% 55% at 0% 100%, rgba(236,41,123,.16), transparent 60%), linear-gradient(135deg, #1B75BB 0%, #1667AA 50%, #11548E 100%); color:#fff; font-family:var(--dwt-font); font-size:16px; line-height:1.5; padding:calc(clamp(80px,9vw,128px) + 8px) 0 clamp(80px,9vw,128px); -webkit-font-smoothing:antialiased; } .dwt *, .dwt *::before, .dwt *::after{ box-sizing:border-box; } .dwt h2, .dwt h3, .dwt p, .dwt ul, .dwt li{ margin:0; padding:0; font-family:var(--dwt-font); text-transform:none; letter-spacing:normal; list-style:none; } .dwt svg{ display:block; } /* Brand stripe + decorative logo ring */ .dwt .dwt-stripe{ position:absolute; left:0; right:0; top:0; height:8px; display:flex; z-index:2; } .dwt .dwt-stripe i{ flex:1; display:block; } .dwt .dwt-stripe i:nth-child(1){ background:var(--dwt-stripe-pink); } .dwt .dwt-stripe i:nth-child(2){ background:var(--dwt-stripe-blue); } .dwt .dwt-stripe i:nth-child(3){ background:var(--dwt-stripe-green); } .dwt .dwt-stripe i:nth-child(4){ background:var(--dwt-stripe-yellow); } .dwt .dwt-ring{ position:absolute; z-index:0; right:-140px; bottom:-160px; width:clamp(380px,42vw,620px); height:auto; opacity:.08; pointer-events:none; } .dwt .dwt-inner{ position:relative; z-index:1; max-width:1400px; margin:0 auto; padding:0 clamp(20px,4vw,56px); } .dwt .dwt-grid{ display:grid; grid-template-columns:minmax(0,1fr) minmax(0,1.1fr); gap:clamp(40px,5vw,80px); align-items:center; } /* Copy column */ .dwt .dwt-eyebrow{ display:inline-flex; align-items:center; gap:12px; padding:8px 16px 8px 12px; border-radius:999px; background:rgba(255,255,255,.12); border:1px solid rgba(255,255,255,.22); font-size:13px; font-weight:600; letter-spacing:.18em; text-transform:uppercase; color:#fff; } .dwt .dwt-dots{ display:inline-flex; gap:4px; } .dwt .dwt-dots i{ width:7px; height:7px; border-radius:50%; display:block; } .dwt .dwt-dots i:nth-child(1){ background:var(--dwt-sky); } .dwt .dwt-dots i:nth-child(2){ background:var(--dwt-magenta); } .dwt .dwt-dots i:nth-child(3){ background:#fff; } .dwt .dwt-dots i:nth-child(4){ background:var(--dwt-purple); } .dwt .dwt-dots i:nth-child(5){ background:var(--dwt-yellow); } .dwt .dwt-dots i:nth-child(6){ background:var(--dwt-green); } .dwt .dwt-h2{ margin-top:22px; font-size:clamp(32px,3.5vw,52px); line-height:1.1; font-weight:300; color:#fff; text-wrap:balance; } .dwt .dwt-h2 b{ font-weight:700; padding-bottom:.04em; background:linear-gradient(90deg, var(--dwt-yellow), var(--dwt-green)) no-repeat 0 100% / 100% .12em; -webkit-box-decoration-break:clone; box-decoration-break:clone; } .dwt .dwt-copy p.dwt-text{ margin-top:20px; max-width:600px; font-size:clamp(16px,1.25vw,18px); line-height:1.7; color:rgba(255,255,255,.88); } .dwt .dwt-quote{ position:relative; margin-top:28px; max-width:600px; padding:20px 24px 20px 70px; border-radius:18px; background:rgba(255,255,255,.10); border:1px solid rgba(255,255,255,.20); -webkit-backdrop-filter:blur(6px); backdrop-filter:blur(6px); font-size:clamp(17px,1.35vw,19px); line-height:1.5; font-weight:500; font-style:italic; color:#fff; } .dwt .dwt-quote svg{ position:absolute; left:22px; top:20px; width:32px; height:32px; } .dwt .dwt-chips{ display:flex; flex-wrap:wrap; gap:10px; margin-top:26px; } .dwt .dwt-chip{ display:inline-flex; align-items:center; gap:8px; padding:9px 15px 9px 12px; border-radius:999px; background:rgba(14,40,80,.28); border:1px solid rgba(255,255,255,.18); font-size:14px; font-weight:500; color:#fff; } .dwt .dwt-chip svg{ width:18px; height:18px; color:var(--dwt-yellow); } /* Bento grid */ .dwt .dwt-bento{ display:grid; grid-template-columns:1fr 1fr; gap:18px; } .dwt .dwt-card{ position:relative; display:flex; flex-direction:column; gap:18px; min-height:200px; padding:28px; border-radius:24px; background:#fff; color:var(--dwt-navy); box-shadow:0 26px 50px -28px rgba(5,25,55,.6), 0 0 0 1px rgba(255,255,255,.6); transition:transform .3s ease, box-shadow .3s ease; } .dwt .dwt-card:hover{ transform:translateY(-5px); box-shadow:0 34px 60px -28px rgba(5,25,55,.7), 0 0 0 1px rgba(255,255,255,.6); } .dwt .dwt-icon{ width:58px; height:58px; flex:0 0 58px; border-radius:18px; display:flex; align-items:center; justify-content:center; } .dwt .dwt-icon svg{ width:28px; height:28px; } .dwt .dwt-icon--pink{ background:#FDE7F0; color:#D81F6E; } .dwt .dwt-icon--green{ background:#EDF7E1; color:#5B941D; } .dwt .dwt-icon--sky{ background:#E2F5FD; color:var(--dwt-blue); } .dwt .dwt-icon--purple{ background:#F4E7F4; color:var(--dwt-purple); } .dwt .dwt-card-text{ margin-top:auto; font-size:17px; line-height:1.4; color:var(--dwt-muted); } .dwt .dwt-card-text strong{ display:block; margin-bottom:2px; font-size:clamp(19px,1.6vw,22px); line-height:1.2; font-weight:700; color:var(--dwt-navy); } /* Hero stat card */ .dwt .dwt-card--hero{ grid-row:span 2; justify-content:space-between; overflow:hidden; padding:32px 32px 38px; color:#fff; background:radial-gradient(80% 60% at 100% 0%, rgba(63,194,241,.28), transparent 60%), linear-gradient(165deg, #222B57 0%, #161D3A 70%); box-shadow:0 30px 60px -28px rgba(5,15,40,.8), 0 0 0 1px rgba(255,255,255,.08); } .dwt .dwt-card--hero .dwt-icon{ background:rgba(253,195,14,.15); color:var(--dwt-yellow); } .dwt .dwt-stat{ display:flex; align-items:flex-start; gap:6px; margin-top:12px; } .dwt .dwt-num{ font-size:clamp(104px,11vw,168px); line-height:.85; font-weight:700; letter-spacing:-.04em; background:linear-gradient(180deg, #FFFFFF 30%, #9FDDF6 100%); -webkit-background-clip:text; background-clip:text; color:transparent; font-variant-numeric:tabular-nums; } .dwt .dwt-hero-label{ font-size:clamp(22px,2vw,28px); line-height:1.2; font-weight:700; color:#fff; } .dwt .dwt-hero-label span{ display:block; font-weight:400; color:rgba(255,255,255,.75); } .dwt .dwt-hero-note{ margin-top:12px; font-size:15px; line-height:1.5; color:rgba(255,255,255,.7); max-width:300px; } .dwt .dwt-card--hero::after{ content:""; position:absolute; left:0; right:0; bottom:0; height:6px; background:linear-gradient(90deg, var(--dwt-stripe-pink) 0 25%, var(--dwt-stripe-blue) 25% 50%, var(--dwt-stripe-green) 50% 75%, var(--dwt-stripe-yellow) 75% 100%); } .dwt .dwt-card--hero:hover{ box-shadow:0 38px 70px -28px rgba(5,15,40,.85), 0 0 0 1px rgba(255,255,255,.1); } /* Scroll reveal (only when the script runs) */ .dwt.dwt-js .dwt-reveal{ opacity:0; transform:translateY(22px); transition:opacity .7s ease, transform .7s cubic-bezier(.2,.7,.2,1); } .dwt.dwt-js .dwt-reveal.is-in{ opacity:1; transform:none; } .dwt.dwt-js .dwt-card.dwt-reveal.is-in:hover{ transform:translateY(-5px); } @media (max-width:1100px){ .dwt .dwt-grid{ grid-template-columns:minmax(0,1fr); } .dwt .dwt-copy p.dwt-text, .dwt .dwt-quote{ max-width:760px; } } @media (max-width:640px){ .dwt .dwt-bento{ grid-template-columns:minmax(0,1fr); gap:14px; } .dwt .dwt-card{ min-height:0; flex-direction:row; align-items:center; gap:16px; padding:20px; border-radius:20px; } .dwt .dwt-card-text{ margin-top:0; font-size:15px; } .dwt .dwt-card-text strong{ font-size:18px; } .dwt .dwt-icon{ width:52px; height:52px; flex-basis:52px; border-radius:16px; } .dwt .dwt-icon svg{ width:25px; height:25px; } .dwt .dwt-card--hero{ grid-row:auto; flex-direction:column; align-items:flex-start; padding:24px 24px 30px; } .dwt .dwt-num{ font-size:112px; } .dwt .dwt-quote{ padding:18px 18px 18px 58px; } .dwt .dwt-quote svg{ left:18px; top:18px; width:26px; height:26px; } .dwt .dwt-ring{ width:340px; right:-120px; bottom:-120px; } } @media (prefers-reduced-motion:reduce){ .dwt *{ transition:none !important; } .dwt.dwt-js .dwt-reveal{ opacity:1; transform:none; } }

Why choose us

Why families trust our Dublin Orthodontic Clinic?

We are your local, family-friendly orthodontic clinic in Dublin, just minutes from the city centre, offering high-quality, professional care and life-changing results.

At Dublin Orthodontists, we have spent over 20 years delivering bespoke orthodontic care to patients across Ireland. Our Dublin 9 clinic, located conveniently near DCU, is designed to make high-quality dentistry accessible for the whole family.

Considered by our patients as one of the best orthodontists in Ireland!

  • Dublin 9, near DCU
  • Minutes from the city centre
  • Family-friendly care
  • 25

    Yearsorthodontic experience

    Bespoke orthodontic care for patients across Ireland.

  • Free consultationswith our team

  • Affordablepayment plans

  • Free parkingavailable

  • Multidisciplinaryclinic – ortho & dental

(function () { function init(root) { if (root.getAttribute('data-dwt-ready')) return; root.setAttribute('data-dwt-ready', '1'); var reduce = window.matchMedia && window.matchMedia('(prefers-reduced-motion: reduce)').matches; var reveals = Array.prototype.slice.call(root.querySelectorAll('.dwt-reveal')); var num = root.querySelector('.dwt-num[data-count]'); function countUp() { if (!num || reduce) return; var target = parseInt(num.getAttribute('data-count'), 10) || 0, t0 = null, dur = 1400; function frame(ts) { if (t0 === null) t0 = ts; var p = Math.min(1, (ts - t0) / dur), e = 1 - Math.pow(1 - p, 3); num.textContent = Math.round(target * e); if (p < 1) requestAnimationFrame(frame); } num.textContent = '0'; requestAnimationFrame(frame); } if (!('IntersectionObserver' in window) || reduce) return; root.classList.add('dwt-js'); // stagger: copy items, then cards reveals.forEach(function (el, i) { el.style.transitionDelay = (Math.min(i, 10) * 70) + 'ms'; }); var counted = false; var io = new IntersectionObserver(function (entries) { entries.forEach(function (en) { if (!en.isIntersecting) return; en.target.classList.add('is-in'); io.unobserve(en.target); if (!counted && en.target.classList.contains('dwt-card--hero')) { counted = true; setTimeout(countUp, 250); } }); }, { threshold: 0.15, rootMargin: '0px 0px -8% 0px' }); reveals.forEach(function (el) { io.observe(el); }); // clear the stagger delay after the entrance so hover feels instant setTimeout(function () { reveals.forEach(function (el) { el.style.transitionDelay = ''; }); }, 4000); } /* Full-bleed width (screen width without the scrollbar, so no sideways scroll) */ function fit() { var w = document.documentElement.clientWidth; Array.prototype.forEach.call(document.querySelectorAll('.dwt'), function (r) { r.style.setProperty('--dwt-vw', w + 'px'); }); } function boot() { fit(); Array.prototype.forEach.call(document.querySelectorAll('.dwt'), init); } window.addEventListener('resize', fit); window.addEventListener('load', fit); boot(); document.addEventListener('DOMContentLoaded', boot); window.addEventListener('elementor/frontend/init', boot); })();
<!-- ===================================================================== DUBLIN ORTHODONTISTS — VIDEO TESTIMONIALS BLOCK (light theme) --------------------------------------------------------------------- WHERE TO PASTE • Elementor: drag an "HTML" widget onto the page and paste this whole file in. • Gutenberg: add a "Custom HTML" block and paste this whole file in. The block stretches to the full width of the screen on its own, even inside a boxed container. VIDEOS • Each video is one

Patient stories 05

(function () { function pad(n) { return (n < 10 ? '0' : '') + n; } function parseId(v) { v = (v || '').trim(); var m = v.match(/(?:youtu\.be\/|[?&]v=|\/shorts\/|\/embed\/|\/live\/)([A-Za-z0-9_-]{11})/); if (m) return m[1]; return /^[A-Za-z0-9_-]{11}$/.test(v) ? v : ''; } var PLAY_SMALL = ''; function init(root) { if (root.getAttribute('data-dvt-ready')) return; root.setAttribute('data-dvt-ready', '1'); var player = root.querySelector('.dvt-player'); var facade = root.querySelector('.dvt-facade'); var poster = root.querySelector('.dvt-poster'); var kicker = root.querySelector('.dvt-caption-kicker'); var capTitle = root.querySelector('.dvt-caption-title'); var capSub = root.querySelector('.dvt-caption-sub'); var itemsWrap = root.querySelector('.dvt-items'); var items = Array.prototype.slice.call(root.querySelectorAll('.dvt-item')); var reduceMotion = window.matchMedia && window.matchMedia('(prefers-reduced-motion: reduce)').matches; var current = 0; var videos = items.map(function (el, n) { var id = parseId(el.getAttribute('data-video')); var title = el.getAttribute('data-title') || ('Patient story ' + pad(n + 1)); var sub = el.getAttribute('data-sub') || ''; el.innerHTML = '' + (id ? '' : '') + '' + PLAY_SMALL + '' + '' + '' + 'Now showing' + '' + '' + ''; el.querySelector('.dvt-title').textContent = title; el.querySelector('.dvt-sub').textContent = sub; el.setAttribute('aria-label', 'Play ' + title); return { id: id, title: title, sub: sub, el: el }; }).filter(function (v) { return v.id; }); if (!videos.length) { root.style.display = 'none'; return; } root.querySelector('.dvt-total').textContent = pad(videos.length); if (videos.length < 2) root.querySelector('.dvt-side').style.display = 'none'; function setPoster(id) { poster.removeAttribute('data-fallback'); poster.onload = poster.onerror = function () { // maxres isn't available for every video; YouTube returns a 120px placeholder instead if ((!poster.naturalWidth || poster.naturalWidth itemsWrap.clientWidth + 2) { itemsWrap.scrollTo({ left: el.offsetLeft - 4, behavior: reduceMotion ? 'auto' : 'smooth' }); } else if (itemsWrap.scrollHeight > itemsWrap.clientHeight + 2) { var top = el.offsetTop - itemsWrap.clientHeight / 2 + el.offsetHeight / 2; itemsWrap.scrollTo({ top: Math.max(0, top), behavior: reduceMotion ? 'auto' : 'smooth' }); } if (autoplay) { play(); var r = player.getBoundingClientRect(); if (r.top window.innerHeight) { player.scrollIntoView({ block: 'center', behavior: reduceMotion ? 'auto' : 'smooth' }); } } else { stop(); } } facade.addEventListener('click', play); videos.forEach(function (v, i) { v.el.addEventListener('click', function () { select(i, true); }); }); // hide any item whose link couldn't be read items.forEach(function (el) { if (!parseId(el.getAttribute('data-video'))) el.style.display = 'none'; }); select(0, false); } /* Full-bleed width (screen width without the scrollbar, so no sideways scroll) */ function fit() { var w = document.documentElement.clientWidth; Array.prototype.forEach.call(document.querySelectorAll('.dvt'), function (r) { r.style.setProperty('--dvt-vw', w + 'px'); }); } function boot() { fit(); Array.prototype.forEach.call(document.querySelectorAll('.dvt'), init); } window.addEventListener('resize', fit); window.addEventListener('load', fit); boot(); document.addEventListener('DOMContentLoaded', boot); window.addEventListener('elementor/frontend/init', boot); })();
<!-- ===================================================================== DUBLIN ORTHODONTISTS — BEFORE & AFTER GALLERY BLOCK --------------------------------------------------------------------- WHERE TO PASTE • Elementor: drag an "HTML" widget onto the page and paste this whole file in. • Gutenberg: add a "Custom HTML" block and paste this whole file in. The block stretches to the full width of the screen on its own, even inside a boxed container. PHOTOS • All 7 before & after graphics are already built into this code, exactly as supplied — nothing to upload. • To swap a graphic later: upload it to Media, copy its URL and paste it in place of that case's long "data:image/webp;base64,…" value. • Add a case: copy one block. Remove a case: delete its block. Arrows, dots and pop-up update automatically. ====================================================================== --> .dob-ba{ --dob-navy:#161D3A; --dob-navy-2:#1F2852; --dob-pink:#CD4B6D; --dob-pink-light:#EE7D99; --dob-blue:#3C9BD3; --dob-green:#9FCD53; --dob-yellow:#F7EE3B; --dob-logo-green:#90C23E; --dob-logo-blue:#1B75BB; --dob-logo-sky:#3FC2F1; --dob-logo-yellow:#FDC30E; --dob-logo-purple:#90278E; --dob-logo-magenta:#EC297B; --dob-text:#FFFFFF; --dob-muted:#C3C9E2; --dob-font:'Fira Sans', system-ui, -apple-system, 'Segoe UI', Roboto, Arial, sans-serif; position:relative; overflow:hidden; isolation:isolate; clear:both; /* full-bleed: spans the whole screen width even inside a boxed container */ width:var(--dob-vw,100%); max-width:none; margin:0 0 0 calc(50% - var(--dob-vw,100%) / 2); background:var(--dob-navy); color:var(--dob-text); font-family:var(--dob-font); font-size:16px; line-height:1.5; padding:clamp(72px,8vw,120px) 0 calc(clamp(72px,8vw,120px) + 8px); -webkit-font-smoothing:antialiased; } .dob-ba *, .dob-ba *::before, .dob-ba *::after{ box-sizing:border-box; } .dob-ba h2, .dob-ba p{ margin:0; padding:0; font-family:var(--dob-font); text-transform:none; letter-spacing:normal; } /* Decorative brand curves + colour stripe */ .dob-ba .dob-wave{ position:absolute; z-index:0; width:clamp(200px,24vw,380px); height:auto; pointer-events:none; opacity:.9; } .dob-ba .dob-wave path{ fill:none; stroke:var(--dob-pink); stroke-width:2.5; stroke-linecap:round; } .dob-ba .dob-wave--tr{ top:0; right:0; } .dob-ba .dob-wave--bl{ bottom:8px; left:0; width:clamp(150px,16vw,260px); transform:rotate(180deg); opacity:.6; } .dob-ba .dob-stripe{ position:absolute; left:0; right:0; bottom:0; height:8px; display:flex; z-index:1; } .dob-ba .dob-stripe i{ flex:1; display:block; } .dob-ba .dob-stripe i:nth-child(1){ background:var(--dob-pink); } .dob-ba .dob-stripe i:nth-child(2){ background:var(--dob-blue); } .dob-ba .dob-stripe i:nth-child(3){ background:var(--dob-green); } .dob-ba .dob-stripe i:nth-child(4){ background:var(--dob-yellow); } .dob-ba .dob-inner{ position:relative; z-index:1; max-width:1400px; margin:0 auto; padding:0 clamp(20px,4vw,56px); } /* Header */ .dob-ba .dob-head{ text-align:center; max-width:860px; margin:0 auto clamp(36px,4vw,56px); } .dob-ba .dob-eyebrow{ display:inline-flex; align-items:center; gap:14px; font-size:14px; font-weight:600; letter-spacing:.2em; text-transform:uppercase; color:var(--dob-green); } .dob-ba .dob-dots-deco{ display:inline-flex; gap:5px; } .dob-ba .dob-dots-deco i{ width:8px; height:8px; border-radius:50%; display:block; } .dob-ba .dob-dots-deco i:nth-child(1){ background:var(--dob-logo-sky); } .dob-ba .dob-dots-deco i:nth-child(2){ background:var(--dob-logo-magenta); } .dob-ba .dob-dots-deco i:nth-child(3){ background:var(--dob-logo-blue); } .dob-ba .dob-dots-deco i:nth-child(4){ background:var(--dob-logo-purple); } .dob-ba .dob-dots-deco i:nth-child(5){ background:var(--dob-logo-yellow); } .dob-ba .dob-dots-deco i:nth-child(6){ background:var(--dob-logo-green); } .dob-ba .dob-h2{ margin-top:18px; font-size:clamp(34px,5vw,64px); line-height:1.08; font-weight:700; color:var(--dob-text); text-wrap:balance; } .dob-ba .dob-h2 span{ color:var(--dob-pink-light); white-space:nowrap; } .dob-ba .dob-lead{ max-width:760px; margin:20px auto 0; text-wrap:balance; font-size:clamp(17px,1.45vw,20px); line-height:1.6; color:var(--dob-muted); } /* Carousel */ .dob-ba .dob-track{ --gap:24px; --per:3; display:flex; gap:var(--gap); overflow-x:auto; overflow-y:hidden; scroll-snap-type:x mandatory; scroll-padding-left:6px; scrollbar-width:none; -webkit-overflow-scrolling:touch; margin:-10px -6px -30px; padding:10px 6px 30px; } .dob-ba .dob-track::-webkit-scrollbar{ display:none; } .dob-ba .dob-slide, .dob-ba .dob-slide:hover, .dob-ba .dob-slide:focus{ appearance:none; -webkit-appearance:none; position:relative; display:block; flex:0 0 calc((100% - (var(--per) - 1) * var(--gap)) / var(--per)); aspect-ratio:1/1; margin:0; padding:0; border:0; border-radius:18px; overflow:hidden; background:var(--dob-navy-2); color:#fff; scroll-snap-align:start; cursor:zoom-in; outline:none; box-shadow:0 0 0 1px rgba(255,255,255,.10), 0 24px 44px -22px rgba(0,0,0,.75); transition:transform .25s ease, box-shadow .25s ease; } .dob-ba .dob-slide:hover{ transform:translateY(-4px); box-shadow:0 0 0 1px rgba(205,75,109,.65), 0 30px 50px -22px rgba(0,0,0,.8); } .dob-ba .dob-slide:focus-visible{ box-shadow:0 0 0 3px var(--dob-green), 0 24px 44px -22px rgba(0,0,0,.75); } .dob-ba .dob-slide img{ position:absolute; inset:0; display:block; width:100%; height:100%; max-width:none; margin:0; padding:0; object-fit:cover; border:0; border-radius:0; box-shadow:none; } .dob-ba .dob-zoom{ position:absolute; top:14px; right:14px; z-index:1; width:42px; height:42px; border-radius:50%; background:var(--dob-pink); border:2px solid #fff; display:flex; align-items:center; justify-content:center; box-shadow:0 6px 14px rgba(0,0,0,.35); opacity:0; transform:scale(.85); transition:opacity .2s ease, transform .2s ease; pointer-events:none; } .dob-ba .dob-zoom svg{ width:20px; height:20px; display:block; } .dob-ba .dob-slide:hover .dob-zoom, .dob-ba .dob-slide:focus-visible .dob-zoom{ opacity:1; transform:scale(1); } @media (hover:none){ .dob-ba .dob-zoom{ opacity:.95; transform:scale(1); width:36px; height:36px; } .dob-ba .dob-zoom svg{ width:17px; height:17px; } } /* Controls */ .dob-ba .dob-controls{ display:flex; align-items:center; justify-content:center; gap:22px; margin-top:34px; } .dob-ba .dob-arrow, .dob-ba .dob-arrow:hover, .dob-ba .dob-arrow:focus{ appearance:none; -webkit-appearance:none; width:54px; height:54px; padding:0; margin:0; border-radius:50%; border:1.5px solid rgba(255,255,255,.28); background:transparent; color:#fff; display:flex; align-items:center; justify-content:center; cursor:pointer; box-shadow:none; outline:none; transition:background .2s ease, border-color .2s ease, opacity .2s ease; } .dob-ba .dob-arrow:hover{ background:var(--dob-pink); border-color:var(--dob-pink); } .dob-ba .dob-arrow:focus-visible{ box-shadow:0 0 0 3px var(--dob-green); } .dob-ba .dob-arrow[aria-disabled="true"]{ opacity:.3; cursor:default; background:transparent; border-color:rgba(255,255,255,.28); } .dob-ba .dob-arrow svg{ width:22px; height:22px; display:block; } .dob-ba .dob-pager{ display:flex; align-items:center; gap:10px; } .dob-ba .dob-dot, .dob-ba .dob-dot:hover, .dob-ba .dob-dot:focus{ appearance:none; -webkit-appearance:none; width:10px; height:10px; padding:0; margin:0; border:0; border-radius:999px; background:rgba(255,255,255,.28); cursor:pointer; box-shadow:none; outline:none; transition:width .25s ease, background .25s ease; } .dob-ba .dob-dot.is-active{ width:30px; background:var(--dob-pink); } .dob-ba .dob-dot:focus-visible{ box-shadow:0 0 0 3px var(--dob-green); } @media (max-width:1023px){ .dob-ba .dob-track{ --per:2; --gap:20px; } } @media (max-width:640px){ .dob-ba .dob-track{ --per:1.18; --gap:14px; margin:-10px -20px -30px; padding:10px 20px 30px; scroll-padding-left:20px; } .dob-ba .dob-slide, .dob-ba .dob-slide:hover, .dob-ba .dob-slide:focus{ border-radius:14px; transform:none; } .dob-ba .dob-controls{ margin-top:24px; gap:16px; } .dob-ba .dob-arrow, .dob-ba .dob-arrow:hover, .dob-ba .dob-arrow:focus{ width:44px; height:44px; } .dob-ba .dob-arrow svg{ width:20px; height:20px; } .dob-ba .dob-pager{ gap:8px; } .dob-ba .dob-dot.is-active{ width:22px; } .dob-ba .dob-wave{ opacity:.55; width:150px; } .dob-ba .dob-wave--bl{ display:none; } } /* Full-size pop-up (moved to the end of by the script) */ .dob-lb{ position:fixed; inset:0; z-index:2147483000; display:none; align-items:center; justify-content:center; padding:72px 96px; background:rgba(9,12,30,.94); font-family:'Fira Sans', system-ui, -apple-system, 'Segoe UI', Roboto, Arial, sans-serif; } .dob-lb.is-open{ display:flex; } .dob-lb *{ box-sizing:border-box; } .dob-lb .dob-lb-img{ display:block; width:auto; height:auto; max-width:min(100%, 900px); max-height:100%; margin:0; border:0; border-radius:14px; box-shadow:0 30px 80px rgba(0,0,0,.6); user-select:none; -webkit-user-select:none; } .dob-lb .dob-lb-btn, .dob-lb .dob-lb-btn:hover, .dob-lb .dob-lb-btn:focus{ appearance:none; -webkit-appearance:none; position:absolute; width:54px; height:54px; padding:0; margin:0; border-radius:50%; border:1.5px solid rgba(255,255,255,.3); background:rgba(22,29,58,.6); color:#fff; display:flex; align-items:center; justify-content:center; cursor:pointer; box-shadow:none; outline:none; transition:background .2s ease, border-color .2s ease; } .dob-lb .dob-lb-btn:hover{ background:#CD4B6D; border-color:#CD4B6D; } .dob-lb .dob-lb-btn:focus-visible{ box-shadow:0 0 0 3px #9FCD53; } .dob-lb .dob-lb-btn svg{ width:22px; height:22px; display:block; } .dob-lb .dob-lb-close{ top:20px; right:20px; } .dob-lb .dob-lb-prev{ left:24px; top:50%; transform:translateY(-50%); } .dob-lb .dob-lb-next{ right:24px; top:50%; transform:translateY(-50%); } .dob-lb .dob-lb-count{ position:absolute; left:50%; bottom:24px; transform:translateX(-50%); margin:0; font-size:14px; font-weight:600; letter-spacing:.16em; color:#C3C9E2; } @media (max-width:640px){ .dob-lb{ padding:72px 12px 96px; } .dob-lb .dob-lb-btn, .dob-lb .dob-lb-btn:hover, .dob-lb .dob-lb-btn:focus{ width:46px; height:46px; } .dob-lb .dob-lb-close{ top:14px; right:14px; } .dob-lb .dob-lb-prev{ left:16px; top:auto; bottom:22px; transform:none; } .dob-lb .dob-lb-next{ right:16px; top:auto; bottom:22px; transform:none; } .dob-lb .dob-lb-count{ bottom:36px; } } @media (prefers-reduced-motion:reduce){ .dob-ba *, .dob-lb *{ transition:none !important; } }

Before & After

Real patients. Real results.

Every smile here belongs to a patient who chose private orthodontic treatment at Dublin Orthodontists. Tap any case to see it full size.

(function () { var ICON = { prev: '', next: '', close: '' }; function pad(n) { return (n < 10 ? '0' : '') + n; } /* ---------- shared full-size pop-up ---------- */ var lb = null, lbItems = [], lbIndex = 0, lbReturn = null, lbPrevOverflow = ''; function buildLightbox() { if (lb) return lb; lb = document.createElement('div'); lb.className = 'dob-lb'; lb.setAttribute('role', 'dialog'); lb.setAttribute('aria-modal', 'true'); lb.setAttribute('aria-label', 'Before and after case'); lb.innerHTML = '' + '' + '' + '' + '

'; document.body.appendChild(lb); lb.querySelector('.dob-lb-close').addEventListener('click', closeLightbox); lb.querySelector('.dob-lb-prev').addEventListener('click', function () { lbShow(lbIndex - 1); }); lb.querySelector('.dob-lb-next').addEventListener('click', function () { lbShow(lbIndex + 1); }); lb.addEventListener('click', function (e) { if (e.target === lb) closeLightbox(); }); document.addEventListener('keydown', function (e) { if (!lb.classList.contains('is-open')) return; if (e.key === 'Escape') closeLightbox(); else if (e.key === 'ArrowLeft') lbShow(lbIndex - 1); else if (e.key === 'ArrowRight') lbShow(lbIndex + 1); }); var sx = null, sy = null; lb.addEventListener('touchstart', function (e) { sx = e.touches[0].clientX; sy = e.touches[0].clientY; }, { passive: true }); lb.addEventListener('touchend', function (e) { if (sx === null) return; var dx = e.changedTouches[0].clientX - sx, dy = e.changedTouches[0].clientY - sy; if (Math.abs(dx) > 50 && Math.abs(dx) > Math.abs(dy)) lbShow(lbIndex + (dx 1; lb.querySelector('.dob-lb-prev').style.display = many ? '' : 'none'; lb.querySelector('.dob-lb-next').style.display = many ? '' : 'none'; } function openLightbox(items, i, returnEl) { buildLightbox(); lbItems = items; lbReturn = returnEl; lbShow(i); lbPrevOverflow = document.documentElement.style.overflow; document.documentElement.style.overflow = 'hidden'; lb.classList.add('is-open'); lb.querySelector('.dob-lb-close').focus(); } function closeLightbox() { if (!lb) return; lb.classList.remove('is-open'); document.documentElement.style.overflow = lbPrevOverflow; if (lbReturn) { try { lbReturn.focus({ preventScroll: true }); } catch (e) { lbReturn.focus(); } } } /* ---------- carousel ---------- */ function init(root) { if (root.getAttribute('data-dob-ready')) return; root.setAttribute('data-dob-ready', '1'); var track = root.querySelector('.dob-track'); var slides = Array.prototype.slice.call(root.querySelectorAll('.dob-slide')); var pager = root.querySelector('.dob-pager'); var prev = root.querySelector('.dob-prev'); var next = root.querySelector('.dob-next'); var controls = root.querySelector('.dob-controls'); if (!track || !slides.length) return; var items = slides.map(function (s, n) { var im = s.querySelector('img'); s.setAttribute('aria-label', 'View case ' + pad(n + 1) + ' full size'); return { src: im ? im.currentSrc || im.getAttribute('src') : '', alt: im ? im.alt : '' }; }); slides.forEach(function (s, n) { s.addEventListener('click', function () { var im = s.querySelector('img'); if (im) items[n].src = im.currentSrc || im.getAttribute('src'); openLightbox(items, n, s); }); }); var pages = 1, dots = []; function gap() { return parseFloat(getComputedStyle(track).columnGap) || 0; } function step() { return slides[0].getBoundingClientRect().width + gap(); } function perView() { var cs = getComputedStyle(track); var inner = track.clientWidth - (parseFloat(cs.paddingLeft) || 0) - (parseFloat(cs.paddingRight) || 0); return Math.max(1, Math.floor((inner + gap() + 2) / step())); } function current() { var max = track.scrollWidth - track.clientWidth; if (track.scrollLeft >= max - 4) return pages - 1; return Math.min(pages - 1, Math.round(track.scrollLeft / step())); } function goTo(p) { p = Math.max(0, Math.min(pages - 1, p)); track.scrollTo({ left: p * step(), behavior: 'smooth' }); } function update() { var c = current(); dots.forEach(function (d, n) { d.classList.toggle('is-active', n === c); d.setAttribute('aria-current', n === c ? 'true' : 'false'); }); prev.setAttribute('aria-disabled', c = pages - 1 ? 'true' : 'false'); } function buildDots() { pages = Math.max(1, slides.length - perView() + 1); pager.innerHTML = ''; dots = []; for (var i = 0; i 1 ? '' : 'none'; update(); } prev.addEventListener('click', function () { if (prev.getAttribute('aria-disabled') !== 'true') goTo(current() - 1); }); next.addEventListener('click', function () { if (next.getAttribute('aria-disabled') !== 'true') goTo(current() + 1); }); var ticking = false; track.addEventListener('scroll', function () { if (ticking) return; ticking = true; requestAnimationFrame(function () { ticking = false; update(); }); }, { passive: true }); var lastPer = 0; function onResize() { var p = perView(); if (p !== lastPer) { lastPer = p; buildDots(); } else update(); } window.addEventListener('resize', onResize); window.addEventListener('load', onResize); onResize(); } /* Full-bleed width (screen width without the scrollbar, so no sideways scroll) */ function fit() { var w = document.documentElement.clientWidth; Array.prototype.forEach.call(document.querySelectorAll('.dob-ba'), function (r) { r.style.setProperty('--dob-vw', w + 'px'); }); } function boot() { fit(); Array.prototype.forEach.call(document.querySelectorAll('.dob-ba'), init); } window.addEventListener('resize', fit); window.addEventListener('load', fit); boot(); document.addEventListener('DOMContentLoaded', boot); window.addEventListener('elementor/frontend/init', boot); })();

Find Us

Dublin Orthodontist is conveniently located just 15 minutes from Dublin City Centre and 5 minutes from the M50 Ballymun exit. We are in the College Gate Clinic just across from DCU college. Now accepting new patients from Glasnevin, Finglas, Drumcondra, Santry, Ballymun, and all surrounding areas.