webdevpuneet.com

Hair & Beauty Salon Website HTML Template — Free Snippet

Hair & Beauty Salon Website template · 12 website sections · Plain HTML, CSS & JS · Customise it in the Website Builder

Copy & paste

Source Code


    <section class="st st-navbar-simple" data-uid="smvw6s7vyz5l3">
      <header class="st-wrap nb">
        <a class="st-brand" href="#">
          <span class="st-brand-mark"><span class="st-brand-icon"><svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true"><path d="M9.937 15.5A2 2 0 0 0 8.5 14.063l-6.135-1.582a.5.5 0 0 1 0-.962L8.5 9.936A2 2 0 0 0 9.937 8.5l1.582-6.135a.5.5 0 0 1 .963 0L14.063 8.5A2 2 0 0 0 15.5 9.937l6.135 1.581a.5.5 0 0 1 0 .964L15.5 14.063a2 2 0 0 0-1.437 1.437l-1.582 6.135a.5.5 0 0 1-.963 0z" /><path d="M20 3v4" /><path d="M22 5h-4" /><path d="M4 17v2" /><path d="M5 18H3" /></svg></span><span>Bloom Studio</span></span>
        </a>
        <nav class="nb-nav" data-menu aria-label="Main">
          <ul class="nb-links">
            <li data-menu-item><a class="nb-link" href="#menu"><span>Services</span></a></li>
            <li data-menu-item><a class="nb-link" href="#team"><span>Stylists</span></a></li>
            <li data-menu-item><a class="nb-link" href="#customers"><span>Reviews</span></a></li>
            <li data-menu-item><a class="nb-link" href="#contact"><span>Visit</span></a></li>
          </ul>
          <div class="nb-actions" data-menu-item>
            <a class="st-btn nb-cta" href="#contact"><span>Book now</span></a>
          </div>
        </nav>
        <button type="button" class="st-burger" data-menu-toggle aria-expanded="false" aria-label="Open menu"><span></span><span></span><span></span></button>
      </header>
      <i hidden data-sticky-flag></i>
    </section>
    <section class="st st-image-background-hero" data-uid="smvw6s7vyj3sp">
      <div class="ib-bg" role="img" aria-label="Background photo" style="background-image:url('https://webdevpuneet.com/images/section-templates/tpl-salon.jpg')"></div>
      <div class="ib-shade" aria-hidden="true"></div>
      <div class="ib st-wrap">
        <div class="ib-copy">
          <span class="st-eyebrow ib-eyebrow" data-anim="item">Hair · Colour · Beauty · Hackney</span>
          <h1 class="ib-title" data-anim="item" data-anim-text>Leave feeling <span class="hl">like yourself, only better</span></h1>
          <p class="st-lead ib-lead" data-anim="item">Cuts, colour and care from a friendly team who listen first. Open late on Thursdays and Fridays.</p>
          <div class="st-btns" data-anim="item">
            <a class="st-btn" href="#contact"><span>Book an appointment</span></a>
            <a class="st-btn st-btn--ghost ib-ghost" href="#menu"><span>Services &amp; prices</span></a>
          </div>
        </div>
        <div class="ib-stats" data-anim="media">
          <div><strong>4.9★</strong><span>Google rating</span></div>
          <div><strong>12</strong><span>stylists</span></div>
          <div><strong>Since 2012</strong><span>in Hackney</span></div>
        </div>
      </div>
    </section>
    <section id="menu" class="st st-restaurant-menu" data-uid="smvw6s7vyhalo">
      <div class="st-art" aria-hidden="true" style="color:var(--st-brand);opacity:0.08" data-art-anim="float"><svg viewBox="0 0 1200 800" preserveAspectRatio="xMidYMid slice"><defs><filter id="art-blur-smvw6s7vyhalo" x="-50%" y="-50%" width="200%" height="200%"><feGaussianBlur stdDeviation="60"/></filter></defs><g filter="url(#art-blur-smvw6s7vyhalo)" fill="currentColor"><circle data-float cx="180" cy="160" r="190"/><circle data-float cx="1040" cy="260" r="220"/><circle data-float cx="640" cy="720" r="200"/></g></svg></div>
      <div class="st-wrap">
        <header class="st-head">
          <p class="st-eyebrow" data-anim="item">Services &amp; prices</p>
          <h2 class="st-h2" data-anim="item" data-anim-text>Cut, colour <span class="hl">and care</span></h2>
          <p class="st-lead" data-anim="item">Every appointment starts with a consultation. Prices vary with hair length and stylist level.</p>
        </header>
        <ul class="rm-list">
          <li class="rm-dish" data-anim="item">
            <div class="rm-line">
              <span class="rm-name">Cut &amp; finish</span>
              <span class="rm-dots" aria-hidden="true"></span>
              <span class="rm-price">from £55</span>
            </div>
            <p class="rm-desc">Wash, cut, blow-dry and styling advice.</p>
          </li>
          <li class="rm-dish" data-anim="item">
            <div class="rm-line">
              <span class="rm-name">Men’s cut</span>
              <span class="rm-dots" aria-hidden="true"></span>
              <span class="rm-price">from £32</span>
            </div>
            <p class="rm-desc">Scissor or clipper cut with a hot towel finish.</p>
          </li>
          <li class="rm-dish" data-anim="item">
            <div class="rm-line">
              <span class="rm-name">Full colour</span>
              <span class="rm-dots" aria-hidden="true"></span>
              <span class="rm-price">from £85</span>
            </div>
            <p class="rm-desc">Root-to-tip colour with a gloss and finish.</p>
          </li>
          <li class="rm-dish" data-anim="item">
            <div class="rm-line">
              <span class="rm-name">Balayage</span>
              <span class="rm-tag">Most booked</span>
              <span class="rm-dots" aria-hidden="true"></span>
              <span class="rm-price">from £140</span>
            </div>
            <p class="rm-desc">Hand-painted, sun-kissed highlights.</p>
          </li>
          <li class="rm-dish" data-anim="item">
            <div class="rm-line">
              <span class="rm-name">Blow-dry</span>
              <span class="rm-dots" aria-hidden="true"></span>
              <span class="rm-price">£35</span>
            </div>
            <p class="rm-desc">Smooth, bouncy or curly: your choice.</p>
          </li>
          <li class="rm-dish" data-anim="item">
            <div class="rm-line">
              <span class="rm-name">Gloss treatment</span>
              <span class="rm-tag">New</span>
              <span class="rm-dots" aria-hidden="true"></span>
              <span class="rm-price">£40</span>
            </div>
            <p class="rm-desc">Shine and tone refresh between colours.</p>
          </li>
        </ul>
        <div class="rm-foot" data-anim="item">
          <p class="rm-note">Free colour consultation and patch test 48 hours before any colour service.</p>
          <a class="st-btn" href="#contact"><span>Book online</span></a>
        </div>
      </div>
    </section>
    <section id="zoom" class="st st-scroll-zoom" data-uid="smvw6s7vzmlw0">
      <div class="st-wrap">
        <header class="st-head">
          <p class="st-eyebrow" data-anim="item">The studio</p>
          <h2 class="st-h2" data-anim="item" data-anim-text>A calm place <span class="hl">to take your time</span></h2>
          <p class="st-lead" data-anim="item">Soft light, arched mirrors and chairs by the window. Keep scrolling: each room arrives as a small photograph and zooms up to fill the screen, one after another.</p>
        </header>
        <div class="zs" data-zs data-zoom="45" data-dir="in" data-affect="both" data-per="100" data-smooth="0.6" data-drift="on">
          <ul class="zs-list">
            <li class="zs-layer">
              <img class="zs-img" width="1600" height="900" loading="lazy" src="https://webdevpuneet.com/images/section-templates/tpl-salon.jpg" alt="A bright salon with arched mirrors">
              <div class="zs-cap">
                <h3 class="zs-title">Inside Bloom Studio</h3>
                <p class="zs-text">Soft light and arched mirrors</p>
              </div>
            </li>
            <li class="zs-layer">
              <img class="zs-img" width="1600" height="900" loading="lazy" src="https://webdevpuneet.com/images/section-templates/room-1.jpg" alt="A bright room with tall windows and soft light">
              <div class="zs-cap">
                <h3 class="zs-title">The colour bar</h3>
                <p class="zs-text">Where every colour starts with a chat</p>
              </div>
            </li>
            <li class="zs-layer">
              <img class="zs-img" width="1600" height="900" loading="lazy" src="https://webdevpuneet.com/images/section-templates/room-2.jpg" alt="A calm room with natural light">
              <div class="zs-cap">
                <h3 class="zs-title">The quiet room</h3>
                <p class="zs-text">Treatments without the noise</p>
              </div>
            </li>
            <li class="zs-layer">
              <img class="zs-img" width="1600" height="900" loading="lazy" src="https://webdevpuneet.com/images/section-templates/room-4.jpg" alt="A warm room with wooden floors">
              <div class="zs-cap">
                <h3 class="zs-title">The window seats</h3>
                <p class="zs-text">Tea while the colour sets</p>
              </div>
            </li>
          </ul>
          <div class="zs-ui" aria-hidden="true"><span class="zs-count">01</span><span class="zs-bar"><i></i></span></div>
        </div>
      </div>
    </section>
    <section id="gallery" class="st st-before-after-slider" data-uid="smvw6s7vznr2g">
      <div class="st-wrap">
        <header class="st-head">
          <p class="st-eyebrow" data-anim="item">Results</p>
          <h2 class="st-h2" data-anim="item" data-anim-text>Colour and cut, <span class="hl">before and after</span></h2>
          <p class="st-lead" data-anim="item">Drag the handle to see what a consultation, a colour and a cut can do. Shared with our clients’ permission.</p>
        </header>
        <ul class="ba-grid">
          <li class="ba-item" data-anim="item">
            <div class="ba-compare" data-compare>
              <img class="ba-img ba-after" width="1200" height="800" loading="lazy" src="https://webdevpuneet.com/images/section-templates/room-4.jpg" alt="After photo (sample image)">
              <img class="ba-img ba-before" width="1200" height="800" loading="lazy" src="https://webdevpuneet.com/images/section-templates/room-2.jpg" alt="Before photo (sample image)">
              <span class="ba-tag ba-tag-before">Before</span>
              <span class="ba-tag ba-tag-after">After</span>
              <span class="ba-handle" aria-hidden="true"><span class="ba-knob"><svg viewBox="0 0 24 24" width="22" height="22" fill="none" stroke="currentColor" stroke-width="2.4" stroke-linecap="round" stroke-linejoin="round"><path d="m9 7-5 5 5 5M15 7l5 5-5 5"/></svg></span></span>
              <input class="ba-range" type="range" min="0" max="100" value="50" aria-label="Drag to compare before and after">
            </div>
            <h3 class="ba-title">Warm balayage refresh</h3>
            <p class="ba-cap">Three hours with Amara, including a gloss and a blow-dry.</p>
          </li>
          <li class="ba-item" data-anim="item">
            <div class="ba-compare" data-compare>
              <img class="ba-img ba-after" width="1200" height="800" loading="lazy" src="https://webdevpuneet.com/images/section-templates/wed-dinner.jpg" alt="After photo (sample image)">
              <img class="ba-img ba-before" width="1200" height="800" loading="lazy" src="https://webdevpuneet.com/images/section-templates/tpl-restaurant.jpg" alt="Before photo (sample image)">
              <span class="ba-tag ba-tag-before">Before</span>
              <span class="ba-tag ba-tag-after">After</span>
              <span class="ba-handle" aria-hidden="true"><span class="ba-knob"><svg viewBox="0 0 24 24" width="22" height="22" fill="none" stroke="currentColor" stroke-width="2.4" stroke-linecap="round" stroke-linejoin="round"><path d="m9 7-5 5 5 5M15 7l5 5-5 5"/></svg></span></span>
              <input class="ba-range" type="range" min="0" max="100" value="50" aria-label="Drag to compare before and after">
            </div>
            <h3 class="ba-title">Layered cut with movement</h3>
            <p class="ba-cap">A restyle with soft layers that dries well at home.</p>
          </li>
        </ul>
      </div>
    </section>
    <section id="team" class="st st-team-accordion" data-uid="smvw6s7vzt2gd">
      <div class="st-wrap">
        <header class="st-head">
          <p class="st-eyebrow" data-anim="item">The team</p>
          <h2 class="st-h2" data-anim="item" data-anim-text>Meet the <span class="hl">hands behind Bloom</span></h2>
          <p class="st-lead" data-anim="item">Click a stylist to read about their speciality and how they like to work.</p>
        </header>
        <div class="ta" data-ta data-open="1" data-gray="on">
          <ul class="ta-strips">
            <li class="ta-item" data-anim="item">
              <button type="button" class="ta-trigger" aria-expanded="false" aria-label="Amara Osei"></button>
              <div class="ta-info">
                <div class="ta-inner">
                  <h3 class="ta-name">Amara Osei</h3>
                  <p class="ta-role">Founder &amp; Creative Director</p>
                  <div class="ta-social">
                  </div>
                  <p class="ta-bio">Colour specialist with 18 years of experience.</p>
                </div>
              </div>
              <div class="ta-photo"><img width="600" height="800" loading="lazy" src="https://webdevpuneet.com/images/section-templates/avatar-2.jpg" alt="Amara Osei"></div>
            </li>
            <li class="ta-item" data-anim="item">
              <button type="button" class="ta-trigger" aria-expanded="false" aria-label="Theo Grant"></button>
              <div class="ta-info">
                <div class="ta-inner">
                  <h3 class="ta-name">Theo Grant</h3>
                  <p class="ta-role">Senior Stylist</p>
                  <div class="ta-social">
                  </div>
                  <p class="ta-bio">Precision cuts and men’s grooming.</p>
                </div>
              </div>
              <div class="ta-photo"><img width="600" height="800" loading="lazy" src="https://webdevpuneet.com/images/section-templates/avatar-4.jpg" alt="Theo Grant"></div>
            </li>
            <li class="ta-item" data-anim="item">
              <button type="button" class="ta-trigger" aria-expanded="false" aria-label="Lucia Romano"></button>
              <div class="ta-info">
                <div class="ta-inner">
                  <h3 class="ta-name">Lucia Romano</h3>
                  <p class="ta-role">Colourist</p>
                  <div class="ta-social">
                  </div>
                  <p class="ta-bio">Balayage and lived-in blondes.</p>
                </div>
              </div>
              <div class="ta-photo"><img width="600" height="800" loading="lazy" src="https://webdevpuneet.com/images/section-templates/avatar-5.jpg" alt="Lucia Romano"></div>
            </li>
            <li class="ta-item" data-anim="item">
              <button type="button" class="ta-trigger" aria-expanded="false" aria-label="Mei Tanaka"></button>
              <div class="ta-info">
                <div class="ta-inner">
                  <h3 class="ta-name">Mei Tanaka</h3>
                  <p class="ta-role">Beauty Therapist</p>
                  <div class="ta-social">
                  </div>
                  <p class="ta-bio">Brows, lashes and skin.</p>
                </div>
              </div>
              <div class="ta-photo"><img width="600" height="800" loading="lazy" src="https://webdevpuneet.com/images/section-templates/avatar-8.jpg" alt="Mei Tanaka"></div>
            </li>
          </ul>
        </div>
      </div>
    </section>
    <section id="customers" class="st st-reviews-summary" data-uid="smvw6s7vzh0vy">
      <div class="st-wrap">
        <header class="st-head">
          <p class="st-eyebrow" data-anim="item">Client love</p>
          <h2 class="st-h2" data-anim="item" data-anim-text>Rated <span class="hl">4.9 out of 5</span> by our clients</h2>
          <p class="st-lead" data-anim="item">Kind words from regulars and first-timers. Tap a bar to read only the reviews with that rating.</p>
        </header>
        <div class="rs" data-revfilter data-filter-text="Showing {n} of {t} reviews rated {s} stars" data-clear-label="Show all reviews">
          <aside class="rs-sum" data-anim="item">
            <p class="rs-score"><span class="rs-avg">4.9</span><span class="rs-of">/5</span></p>
            <span class="rs-stars rs-stars--big" style="--r:4.9" role="img" aria-label="Rated 4.9 out of 5">★★★★★</span>
            <p class="rs-count"><span>640</span> <span>Google reviews</span></p>
            <ul class="rs-bars">
              <li class="rs-bar">
                <button type="button" class="rs-barbtn" data-filter-star aria-pressed="false" data-star="5" aria-label="Show only {s}-star reviews">
                  <span class="rs-lab"><span>5</span>★</span>
                  <span class="rs-track"><span class="rs-fill" style="--w:92%"></span></span>
                  <span class="rs-n">590</span>
                </button>
              </li>
              <li class="rs-bar">
                <button type="button" class="rs-barbtn" data-filter-star aria-pressed="false" data-star="4" aria-label="Show only {s}-star reviews">
                  <span class="rs-lab"><span>4</span>★</span>
                  <span class="rs-track"><span class="rs-fill" style="--w:6%"></span></span>
                  <span class="rs-n">38</span>
                </button>
              </li>
              <li class="rs-bar">
                <button type="button" class="rs-barbtn" data-filter-star aria-pressed="false" data-star="3" aria-label="Show only {s}-star reviews">
                  <span class="rs-lab"><span>3</span>★</span>
                  <span class="rs-track"><span class="rs-fill" style="--w:1%"></span></span>
                  <span class="rs-n">8</span>
                </button>
              </li>
              <li class="rs-bar">
                <button type="button" class="rs-barbtn" data-filter-star aria-pressed="false" data-star="2" aria-label="Show only {s}-star reviews">
                  <span class="rs-lab"><span>2</span>★</span>
                  <span class="rs-track"><span class="rs-fill" style="--w:0%"></span></span>
                  <span class="rs-n">3</span>
                </button>
              </li>
              <li class="rs-bar">
                <button type="button" class="rs-barbtn" data-filter-star aria-pressed="false" data-star="1" aria-label="Show only {s}-star reviews">
                  <span class="rs-lab"><span>1</span>★</span>
                  <span class="rs-track"><span class="rs-fill" style="--w:0%"></span></span>
                  <span class="rs-n">1</span>
                </button>
              </li>
            </ul>
            <a class="st-btn" href="#contact"><span>Leave a review</span></a>
          </aside>
          <div class="rs-main">
            <p class="rs-status" data-filter-status role="status" hidden><span data-filter-message></span> <button type="button" class="rs-clear" data-filter-clear></button></p>
            <ul class="rs-list">
              <li class="rs-card" data-anim="item" data-rating="5">
                <div class="rs-top"><span class="rs-stars" style="--r:5" role="img" aria-label="Rated 5 out of 5">★★★★★</span><span class="rs-date">October 2026</span></div>
                <h3 class="rs-title">Finally the right colour</h3>
                <p class="rs-text">Amara finally got my colour right after years of trying elsewhere. I leave smiling every time.</p>
                <div class="rs-by">
                  <img class="rs-av" src="https://webdevpuneet.com/images/section-templates/avatar-3.jpg" alt="">
                  <span class="rs-name">Jess P.</span>
                  <span class="rs-badge"><span aria-hidden="true">✓</span> <span>Verified client</span></span>
                </div>
              </li>
              <li class="rs-card" data-anim="item" data-rating="5">
                <div class="rs-top"><span class="rs-stars" style="--r:5" role="img" aria-label="Rated 5 out of 5">★★★★★</span><span class="rs-date">September 2026</span></div>
                <h3 class="rs-title">Best fade in East London</h3>
                <p class="rs-text">Best fade in East London, and they always remember how I like it.</p>
                <div class="rs-by">
                  <img class="rs-av" src="https://webdevpuneet.com/images/section-templates/avatar-7.jpg" alt="">
                  <span class="rs-name">Kwame A.</span>
                  <span class="rs-badge"><span aria-hidden="true">✓</span> <span>Verified client</span></span>
                </div>
              </li>
              <li class="rs-card" data-anim="item" data-rating="5">
                <div class="rs-top"><span class="rs-stars" style="--r:5" role="img" aria-label="Rated 5 out of 5">★★★★★</span><span class="rs-date">September 2026</span></div>
                <h3 class="rs-title">Exactly what I asked for</h3>
                <p class="rs-text">Warm, relaxed and so talented. The balayage is exactly what I asked for.</p>
                <div class="rs-by">
                  <img class="rs-av" src="https://webdevpuneet.com/images/section-templates/avatar-6.jpg" alt="">
                  <span class="rs-name">Sofia L.</span>
                  <span class="rs-badge"><span aria-hidden="true">✓</span> <span>Verified client</span></span>
                </div>
              </li>
              <li class="rs-card" data-anim="item" data-rating="4">
                <div class="rs-top"><span class="rs-stars" style="--r:4" role="img" aria-label="Rated 4 out of 5">★★★★★</span><span class="rs-date">August 2026</span></div>
                <p class="rs-text">Lovely studio and a great cut. Popular days book up quickly, so plan ahead.</p>
                <div class="rs-by">
                  <img class="rs-av" src="https://webdevpuneet.com/images/section-templates/avatar-2.jpg" alt="">
                  <span class="rs-name">Nadia R.</span>
                  <span class="rs-badge"><span aria-hidden="true">✓</span> <span>Verified client</span></span>
                </div>
              </li>
              <li class="rs-card" data-anim="item" data-rating="5">
                <div class="rs-top"><span class="rs-stars" style="--r:5" role="img" aria-label="Rated 5 out of 5">★★★★★</span><span class="rs-date">August 2026</span></div>
                <h3 class="rs-title">A calm place</h3>
                <p class="rs-text">Nobody rushes you here. Tea, a chat and a cut I did not have to fix at home.</p>
                <div class="rs-by">
                  <img class="rs-av" src="https://webdevpuneet.com/images/section-templates/avatar-4.jpg" alt="">
                  <span class="rs-name">Chris M.</span>
                  <span class="rs-badge"><span aria-hidden="true">✓</span> <span>Verified client</span></span>
                </div>
              </li>
              <li class="rs-card" data-anim="item" data-rating="3">
                <div class="rs-top"><span class="rs-stars" style="--r:3" role="img" aria-label="Rated 3 out of 5">★★★★★</span><span class="rs-date">July 2026</span></div>
                <h3 class="rs-title">Great result, long wait</h3>
                <p class="rs-text">Beautiful colour, though my appointment started a little late. Worth it in the end.</p>
                <div class="rs-by">
                  <img class="rs-av" src="https://webdevpuneet.com/images/section-templates/avatar-5.jpg" alt="">
                  <span class="rs-name">Beth O.</span>
                  <span class="rs-badge"><span aria-hidden="true">✓</span> <span>Verified client</span></span>
                </div>
              </li>
            </ul>
          </div>
        </div>
      </div>
    </section>
    <section id="contact" class="st st-booking-form" data-uid="smvw6s7vzzm7b">
      <div class="st-wrap bk">
        <div class="bk-info">
          <header class="st-head st-head--left bk-head">
            <p class="st-eyebrow" data-anim="item">Book</p>
            <h2 class="st-h2" data-anim="item" data-anim-text>Request <span class="hl">your appointment</span></h2>
            <p class="st-lead" data-anim="item">Choose the service, the day and a time that suits you. We confirm every request by text or email.</p>
          </header>
          <div class="bk-block" data-anim="item">
            <h3 class="bk-sub">Opening hours</h3>
            <dl class="bk-hours">
              <div class="bk-row"><dt>Tuesday – Wednesday</dt><dd>9:30 am – 6:00 pm</dd></div>
              <div class="bk-row"><dt>Thursday – Friday</dt><dd>9:30 am – 8:00 pm</dd></div>
              <div class="bk-row"><dt>Saturday</dt><dd>9:00 am – 5:00 pm</dd></div>
              <div class="bk-row"><dt>Sunday – Monday</dt><dd>Closed</dd></div>
            </dl>
          </div>
          <div class="bk-block" data-anim="item">
            <h3 class="bk-sub">Before you come</h3>
            <ul class="st-checks"><li>Every visit starts with a free consultation</li><li>Patch tests are done 48 hours before colour</li><li>Free cancellation up to 24 hours before</li></ul>
          </div>
        </div>
        <div class="bk-card" data-anim="media">
          <form class="st-form" method="post" data-form action="https://formspree.io/f/your-form-id">
            <div class="st-form-fields" data-form-fields>
              <div class="st-form-row">
                <label class="st-field"><span>Your name</span><input name="name" type="text" required autocomplete="name"></label>
                <label class="st-field"><span>Email</span><input name="email" type="email" required autocomplete="email"></label>
              </div>
              <label class="st-field"><span>Phone</span><input name="phone" type="tel" autocomplete="tel"></label>
              <label class="st-field"><span>Service</span><select name="service" required>
                  <option value="Consultation">Consultation</option>
                  <option value="Cut and blow-dry">Cut and blow-dry</option>
                  <option value="Colour">Colour</option>
                  <option value="Balayage">Balayage</option>
                  <option value="Treatment">Treatment</option>
                </select></label>
              <div class="st-form-row">
                <label class="st-field"><span>Preferred day</span><input name="date" type="date" required data-booking-date></label>
                <label class="st-field"><span>Preferred time</span><select name="time" required>
                    <option value="Morning (9 am – 12 pm)">Morning (9 am – 12 pm)</option>
                    <option value="Lunchtime (12 pm – 2 pm)">Lunchtime (12 pm – 2 pm)</option>
                    <option value="Afternoon (2 pm – 5 pm)">Afternoon (2 pm – 5 pm)</option>
                    <option value="Evening (after 5 pm)">Evening (after 5 pm)</option>
                  </select></label>
              </div>
              <label class="st-field"><span>Anything we should know?</span><textarea name="notes" rows="3"></textarea></label>
              <input class="st-hp" type="text" name="_gotcha" tabindex="-1" autocomplete="off" aria-hidden="true">
              <button class="st-btn st-form-btn" type="submit"><span>Request appointment</span></button>
              <p class="st-form-note">This is a request, not a confirmed booking. We reply to confirm.</p>
              <p class="st-form-error" data-form-error hidden role="alert">Sorry, something went wrong. Please try again or call us directly.</p>
            </div>
            <div class="st-form-success" data-form-success hidden tabindex="-1" role="status">
              <span class="st-icon"><svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2.4" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true"><path d="M20 6 9 17l-5-5"/></svg></span>
              <h3>Request received</h3>
              <p>Thank you. We will confirm your appointment by email shortly.</p>
            </div>
          </form>
        </div>
      </div>
    </section>
    <section id="contact-2" class="st st-opening-hours" data-uid="smvw6s7vzxmj5">
      <div class="st-wrap">
        <header class="st-head">
          <p class="st-eyebrow" data-anim="item">Visit</p>
          <h2 class="st-h2" data-anim="item" data-anim-text>Find <span class="hl">the studio</span></h2>
          <p class="st-lead" data-anim="item">On Broadway Market, two minutes from London Fields.</p>
        </header>
        <div class="oh" data-opennow data-tz="Europe/London" data-open-label="Open now" data-closes-label="closes at" data-shut-label="Closed now" data-opens-label="opens">
          <div class="oh-card oh-hours" data-anim="item">
            <div class="oh-top">
              <h3 class="oh-title">Opening hours</h3>
              <p class="oh-badge" data-open-badge role="status" hidden><span class="oh-dot" aria-hidden="true"></span><span class="oh-badge-text"></span></p>
            </div>
            <ol class="oh-list">
              <li class="oh-row" data-hours-row data-day="Monday" data-open="09:00" data-close="17:00" data-closed="closed">
                <span class="oh-day">Monday</span>
                <span class="oh-shut">Closed</span>
              </li>
              <li class="oh-row" data-hours-row data-day="Tuesday" data-open="09:30" data-close="18:00" data-closed="">
                <span class="oh-day">Tuesday</span>
                <span class="oh-time"><time>09:30</time> <span aria-hidden="true">–</span> <time>18:00</time></span>
              </li>
              <li class="oh-row" data-hours-row data-day="Wednesday" data-open="09:30" data-close="18:00" data-closed="">
                <span class="oh-day">Wednesday</span>
                <span class="oh-time"><time>09:30</time> <span aria-hidden="true">–</span> <time>18:00</time></span>
              </li>
              <li class="oh-row" data-hours-row data-day="Thursday" data-open="09:30" data-close="20:00" data-closed="">
                <span class="oh-day">Thursday</span>
                <span class="oh-time"><time>09:30</time> <span aria-hidden="true">–</span> <time>20:00</time></span>
                <span class="oh-note">Late night</span>
              </li>
              <li class="oh-row" data-hours-row data-day="Friday" data-open="09:30" data-close="20:00" data-closed="">
                <span class="oh-day">Friday</span>
                <span class="oh-time"><time>09:30</time> <span aria-hidden="true">–</span> <time>20:00</time></span>
                <span class="oh-note">Late night</span>
              </li>
              <li class="oh-row" data-hours-row data-day="Saturday" data-open="09:00" data-close="17:00" data-closed="">
                <span class="oh-day">Saturday</span>
                <span class="oh-time"><time>09:00</time> <span aria-hidden="true">–</span> <time>17:00</time></span>
              </li>
              <li class="oh-row" data-hours-row data-day="Sunday" data-open="09:00" data-close="17:00" data-closed="closed">
                <span class="oh-day">Sunday</span>
                <span class="oh-shut">Closed</span>
              </li>
            </ol>
            <p class="oh-special">Walk-ins are welcome when there is a free chair. Booking is the best way to get your stylist.</p>
          </div>
          <div class="oh-side">
            <div class="oh-map" data-anim="media">
              <iframe class="oh-frame" loading="lazy" referrerpolicy="no-referrer-when-downgrade" src="https://www.openstreetmap.org/export/embed.html?bbox=-0.0663%2C51.5341%2C-0.0563%2C51.5391&amp;layer=mapnik&amp;marker=51.5366%2C-0.0613" title="Map showing Bloom Studio on Broadway Market"></iframe>
            </div>
            <div class="oh-card oh-contact" data-anim="item">
              <ul class="oh-info">
                <li class="oh-item"><span class="st-icon"><svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true"><path d="M20 10c0 4.993-5.539 10.193-7.399 11.799a1 1 0 0 1-1.202 0C9.539 20.193 4 14.993 4 10a8 8 0 0 1 16 0" /><circle cx="12" cy="10" r="3" /></svg></span>
                  <address class="oh-addr">
                    <span class="oh-line oh-name">Bloom Studio</span>
                    <span class="oh-line">41 Broadway Market</span>
                    <span class="oh-line"><span>E8 4PH</span> <span>London</span></span>
                    <span class="oh-line">United Kingdom</span>
                  </address>
                </li>
                <li class="oh-item"><span class="st-icon"><svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true"><path d="M22 16.92v3a2 2 0 0 1-2.18 2 19.79 19.79 0 0 1-8.63-3.07 19.5 19.5 0 0 1-6-6 19.79 19.79 0 0 1-3.07-8.67A2 2 0 0 1 4.11 2h3a2 2 0 0 1 2 1.72 12.84 12.84 0 0 0 .7 2.81 2 2 0 0 1-.45 2.11L8.09 9.91a16 16 0 0 0 6 6l1.27-1.27a2 2 0 0 1 2.11-.45 12.84 12.84 0 0 0 2.81.7A2 2 0 0 1 22 16.92z" /></svg></span><a class="oh-link" href="tel:+442079460456">020 7946 0456</a></li>
                <li class="oh-item"><span class="st-icon"><svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true"><rect width="20" height="16" x="2" y="4" rx="2" /><path d="m22 7-8.97 5.7a1.94 1.94 0 0 1-2.06 0L2 7" /></svg></span><a class="oh-link" href="mailto:[email protected]">[email protected]</a></li>
              </ul>
              <div class="st-btns">
                <a class="st-btn" href="https://www.google.com/maps/search/?api=1&amp;query=41%20Broadway%20Market%2C%20London%20E8%204PH"><span>Get directions</span></a>
                <a class="st-btn st-btn--ghost" href="tel:+442079460456"><span>Call to book</span></a>
              </div>
            </div>
          </div>
        </div>
      </div>
    </section>
    <section class="st st-popup-modal" data-uid="smvw6s7vz36oz">
      <div class="pu" data-pu data-trigger="delay" data-delay="10" data-scroll="50" data-days="7" data-pos="bottom-right" data-layout="left" data-autoplay="0" data-pu-id="1pcpcek">
        <div class="pu-backdrop" data-pu-close hidden></div>
        <div class="pu-dialog" role="dialog" aria-modal="true" aria-labelledby="pu-heading" tabindex="-1" hidden>
          <button type="button" class="pu-x" data-pu-close aria-label="Close popup"><svg viewBox="0 0 24 24" width="18" height="18" fill="none" stroke="currentColor" stroke-width="2.4" stroke-linecap="round" aria-hidden="true"><path d="M6 6l12 12M18 6 6 18"/></svg></button>
          <div class="pu-media">
            <img class="pu-img" loading="lazy" src="https://webdevpuneet.com/images/section-templates/tpl-salon.jpg" alt="A stylist at work in the salon">
          </div>
          <div class="pu-body">
            <p class="st-eyebrow">New clients</p>
            <h2 class="pu-h" id="pu-heading"><span class="hl">20% off</span> your first visit</h2>
            <p class="pu-lead">Book a cut, colour or treatment this month and your first visit is on us.</p>
            <div class="pu-ctas">
              <a class="st-btn pu-cta" href="#contact"><span>Book now</span></a>
            </div>
            <button type="button" class="pu-no" data-pu-close><span>No thanks</span></button>
          </div>
        </div>
      </div>
    </section>
    <section class="st st-footer-minimal" data-uid="smvw6s7vzxgje">
      <footer class="st-wrap fm">
        <div class="fm-row" data-anim="item">
          <a class="st-brand" href="#">
            <span class="st-brand-mark"><span class="st-brand-icon"><svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true"><path d="M9.937 15.5A2 2 0 0 0 8.5 14.063l-6.135-1.582a.5.5 0 0 1 0-.962L8.5 9.936A2 2 0 0 0 9.937 8.5l1.582-6.135a.5.5 0 0 1 .963 0L14.063 8.5A2 2 0 0 0 15.5 9.937l6.135 1.581a.5.5 0 0 1 0 .964L15.5 14.063a2 2 0 0 0-1.437 1.437l-1.582 6.135a.5.5 0 0 1-.963 0z" /><path d="M20 3v4" /><path d="M22 5h-4" /><path d="M4 17v2" /><path d="M5 18H3" /></svg></span><span>Bloom Studio</span></span>
          </a>
          <nav aria-label="Footer"><ul class="fm-links"><li><a href="#menu">Services</a></li><li><a href="#team">Stylists</a></li><li><a href="#customers">Reviews</a></li><li><a href="#contact">Book</a></li></ul></nav>
          <div><ul class="st-socials">
              <li><a class="st-social" href="https://x.com/" aria-label="X (Twitter)"><span><svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true"><path d="M22 4s-.7 2.1-2 3.4c1.6 10-9.4 17.3-18 11.6 2.2.1 4.4-.6 6-2C3 15.5.5 9.6 3 5c2.2 2.6 5.6 4.1 9 4-.9-4.2 4-6.6 7-3.8 1.1 0 3-1.2 3-1.2z" /></svg></span></a></li>
              <li><a class="st-social" href="https://www.linkedin.com/" aria-label="LinkedIn"><span><svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true"><path d="M16 8a6 6 0 0 1 6 6v7h-4v-7a2 2 0 0 0-2-2 2 2 0 0 0-2 2v7h-4v-7a6 6 0 0 1 6-6z" /><rect width="4" height="12" x="2" y="9" /><circle cx="4" cy="4" r="2" /></svg></span></a></li>
              <li><a class="st-social" href="https://github.com/" aria-label="GitHub"><span><svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true"><path d="M15 22v-4a4.8 4.8 0 0 0-1-3.5c3 0 6-2 6-5.5.08-1.25-.27-2.48-1-3.5.28-1.15.28-2.35 0-3.5 0 0-1 0-3 1.5-2.64-.5-5.36-.5-8 0C6 2 5 2 5 2c-.3 1.15-.3 2.35 0 3.5A5.403 5.403 0 0 0 4 9c0 3.5 3 5.5 6 5.5-.39.49-.68 1.05-.85 1.65-.17.6-.22 1.23-.15 1.85v4" /><path d="M9 18c-4.51 2-5-2-7-2" /></svg></span></a></li>
            </ul></div>
        </div>
        <p class="fm-copy">© 2026 Bloom Studio</p>
      </footer>
    </section>
    <section class="st st-back-to-top" data-uid="smvw6s7vzodbe">
      <div class="btt" data-btt data-enabled="on" data-distance="500" data-pos="right" data-appear="fade" data-speed="0.8" data-mobile="on" data-shadow="on" style="--btt-size:52px;--btt-off:24px;--btt-radius:50%;--btt-speed:0.8s">
        <div class="btt-demo" aria-hidden="true">
          <span class="btt-bar btt-bar--lg"></span><span class="btt-bar"></span><span class="btt-bar btt-bar--md"></span><span class="btt-bar"></span><span class="btt-bar btt-bar--sm"></span>
          <span class="btt-note">The button appears here once the page has scrolled</span>
        </div><!--/btt-demo-->
        <button type="button" class="btt-btn" aria-label="Back to top" title="Back to top"><svg class="btt-svg" viewBox="0 0 24 24" width="24" height="24" fill="none" stroke="currentColor" stroke-width="2.400" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true" focusable="false"><path d="M12 19V5M5 12l7-7 7 7"/></svg></button>
      </div>
    </section>

Extend with AI

Take This Template Further With AI

Give this prompt to an AI assistant to generate your own version of the Hair & Beauty Salon Website template: swap in your business name, services and tone, add or remove sections, translate it, or turn the page into a Next.js project or a WordPress theme. Use the template above as the visual reference, so you and the AI start from a design that already works.

Prompt to recreate it

Copy this into your AI assistant of choice to build the effect from scratch, or as a jumping-off point for your own variant:

text
Build a complete hair & beauty salon website for “Bloom Studio” as clean HTML, CSS and a little JavaScript.

Page structure, top to bottom:
1. Simple Sticky Navbar
2. Image Background Hero: “Leave feeling like yourself, only better”
3. Restaurant Menu: “Cut, colour and care”
4. Scroll Zoom Image Stack (Ken Burns): “A calm place to take your time”
5. Before & After Slider: “Colour and cut, before and after”
6. Interactive Team Accordion: “Meet the hands behind Bloom”
7. Reviews Summary & Rating: “Rated 4.9 out of 5 by our clients”
8. Booking Request Form: “Request your appointment”
9. Opening Hours & Location: “Find the studio”
10. Popup & Promo Modal
11. Minimal Footer
12. Back to Top Button

Look and feel:
- Colours as CSS custom properties: brand #be185d, page background #fff8f7, cards #f8e9e6, text #3b1d24, muted text #7b5960. Corner radius 18px, content width 1200px.
- Headings in Playfair Display, body text in DM Sans (load both from Google Fonts with display=swap).
- Mobile first. Sections use CSS grid or flexbox and stack cleanly below 700px.

Content:
- Write real, believable health & beauty copy for every section instead of lorem ipsum: specific offers, numbers, names and calls to action.
- One clear primary action in the hero and again near the end.

Quality:
- Semantic HTML (header, main, section, footer) with exactly one h1, the hero headline, and one h2 per section.
- Accessible: alt text on every image, visible focus states, labelled form fields, buttons and links with clear text, and prefers-reduced-motion respected.
- SEO: title “Bloom Studio: Hair, Colour and Beauty Salon in Hackney”, a meta description of 150 to 160 characters, Open Graph tags and JSON-LD that suits a health & beauty business.
- Optional: a subtle GSAP ScrollTrigger fade-up on section headings, with content visible without JavaScript.

Also create these pages with the same navbar, footer and theme, and link them from the menu:
- Services (services.html)
- Stylists (team.html)
- Book (book.html)
- Privacy (privacy.html)

Want to tighten it up first? Run this prompt through the AI Prompt Studio to score it across 8 quality dimensions, catch anti-patterns, and tune the wording for Claude, ChatGPT, or Gemini before you paste it in.

What's included

Features

12 ready-made website sections assembled into one finished hair & beauty salon website page: Simple Sticky Navbar, Image Background Hero, Restaurant Menu, Scroll Zoom Image Stack (Ken Burns), Before & After Slider, Interactive Team Accordion, Reviews Summary & Rating, Booking Request Form, Opening Hours & Location, Popup & Promo Modal, Minimal Footer, Back to Top Button
Every section links to its own page in the Website Section Templates library, where you can edit it on its own
One theme drives the whole page (colours, fonts, corner radius, width), so changing the brand takes a minute
Container-query responsive: each section adapts to the width it is placed in, from phone to desktop
GSAP entrance animations and scroll effects load from a CDN, and switch off for visitors who prefer reduced motion
Also available as a 6-page website in the builder, sharing one navbar, footer and theme
A pinned stack of photographs that each start small and zoom up to full size as you scroll (GSAP ScrollTrigger)
An interactive team accordion of grayscale image strips that expand on click
A reviews summary with the average rating and a star breakdown that filters the review cards
Opening hours with a live Open now badge in the business time zone, the address, a map and call buttons, plus LocalBusiness data for search engines
A floating back to top button that appears as visitors scroll, on every page of the multi-page version
Plain HTML, CSS and JavaScript: copy the code here or export it to React, Vue, Angular or Tailwind

About this UI Snippet

A Salon Website That Books Appointments: Services Menu, Stylists and Before-and-After Proof

Screenshot of the Hair & Beauty Salon Website Template snippet rendered live

Clients choose a salon on three things: the work, the price and the person who will do it. The services are therefore laid out like a menu, with prices, so the cost of a cut and colour is clear before anyone books. A before-and-after slider shows transformations that no description can convey, and the stylist grid lets a client pick someone by name, which is how most salon bookings really work.

Reviews from regulars confirm the experience, a booking request form takes the service, preferred stylist and date, and a map shows where to find you. A popup can promote a new-client offer or a quiet-day discount without restructuring the page.

Replace the sample menu and stylists with your own, and photograph your real work. It is the layout of the Hair & Beauty Salon Website template, which also comes as a multi-page site with Services, Stylists and Book pages; open it in the Website Builder to edit and export.

Interactive extras built in

Beyond the core sections, this template adds a pinned stack of studio photographs that each arrive small and zoom up to fill the screen as you scroll, room by room; an interactive team accordion where each stylist is a grayscale strip that opens on click; a reviews summary with the 4.9 average and a star breakdown that filters the client reviews; an opening hours table with a live Open now badge, late-night Thursdays and Fridays and a map of the studio; and a floating back to top button that appears after the visitor scrolls, so a long page is easy to leave and return. Each one has its own page in the Website Section Templates library (Scroll Zoom Image Stack, Interactive Team Accordion, Reviews Summary & Rating, Opening Hours & Location, Back to Top Button), where you can try its settings on their own, and you can edit, move or remove any of them in the Website Builder.

Built from website section templates

The 12 Sections Behind This Hair & Beauty Salon Website Page

This page is not one big block of code: it is stacked from ready-made sections in the free Website Section Templates library, in this order. Open any of them to edit it on its own, or start with the whole page.

  1. Simple Sticky Navbara sticky bar with a Book now button for visitors who already know what they want
  2. Image Background Heroa soft hero with your best review and a booking button, tone first
  3. Restaurant Menuservices and prices laid out like a menu, so the cost is clear before anyone books
  4. Scroll Zoom Image Stack (Ken Burns)a pinned stack of studio photographs that each arrive small and zoom up to fill the screen as you scroll, room by room
  5. Before & After Sliderbefore-and-after results, the proof of skill that words cannot give
  6. Interactive Team Accordionan interactive team accordion where each stylist is a grayscale strip that opens on click
  7. Reviews Summary & Ratinga reviews summary with the 4.9 average and a star breakdown that filters the client reviews
  8. Booking Request Forma booking request form for service, stylist, date and contact details
  9. Opening Hours & Locationan opening hours table with a live Open now badge, late-night Thursdays and Fridays and a map of the studio
  10. Popup & Promo Modalan optional popup for a new-client offer or a quiet-day discount
  11. Minimal Footera minimal footer with socials and legal links
  12. Back to Top Buttona floating back to top button that appears after the visitor scrolls, so a long page is easy to leave and return

Step by step

How to Use

  1. 1
    Open the template in the Website BuilderPress "Start using this template" to open the Hair & Beauty Salon Website in the Website Builder. Everything is edited with forms in a side panel; no code is needed.
  2. 2
    Turn your price list into the menuEnter each service with its real price or "from" price and duration, grouped by cut, colour and treatments, so clients know what to expect before they book.
  3. 3
    Introduce each stylistAdd a photo, speciality and booking link for each stylist; many clients ask for someone by name.
  4. 4
    Show real transformationsUse your own before-and-after images in the slider, with the client's permission, to demonstrate the work you most want to be booked for.
  5. 5
    Export and publishDownload one HTML file or a ZIP (or one HTML file per page for the multi-page version) and upload it to Netlify, Vercel, Cloudflare Pages, GitHub Pages or your own host. Or copy the code from this page and export it to React, Vue, Angular or Tailwind with the buttons above the editor.

Real-world uses

Common Use Cases

Hair salons, barbers and beauty studios
Show services, prices and stylists, and take booking requests.
Nail, lash, brow and spa businesses
Swap the menu for your treatments and keep the proof-and-booking structure.
Learn a price menu and a comparison slider
See how a menu layout and a draggable before/after slider are built in plain HTML, CSS and JS.

Got questions?

Frequently Asked Questions

Services with prices, the stylists, before-and-after photos, reviews, a booking method and your address and hours.

They send a request through the form, which emails you; or link the Book now button to your online booking system.

Yes. Clear prices reduce no-shows and queries and let clients choose with confidence.

It adds a scroll zoom image stack, an interactive team accordion, a reviews summary with a star breakdown and filter, an opening hours section with a live Open now badge and a floating back to top button. Each is a section you can edit, move or remove in the Website Builder, and each has its own page in the Website Section Templates library.

It is assembled from 12 templates in the free Website Section Templates library: Simple Sticky Navbar, Image Background Hero, Restaurant Menu, Scroll Zoom Image Stack (Ken Burns), Before & After Slider, Interactive Team Accordion, Reviews Summary & Rating, Booking Request Form, Opening Hours & Location, Popup & Promo Modal, Minimal Footer, Back to Top Button. Each one has its own page where you can edit it separately.

It is the same page. Here you read and edit the HTML, CSS and JavaScript directly with a live preview; in the Website Builder you edit it with forms, change the theme once for the whole page, add pages and export a finished site.