webdevpuneet.com

Photographer Website HTML Template — Free CSS & JS Snippet

Photographer 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="smvw6s7pq24a6">
      <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="M14.5 4h-5L7 7H4a2 2 0 0 0-2 2v9a2 2 0 0 0 2 2h16a2 2 0 0 0 2-2V9a2 2 0 0 0-2-2h-3l-2.5-3z" /><circle cx="12" cy="13" r="3" /></svg></span><span>Mira Lens</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="#pricing"><span>Sessions</span></a></li>
            <li data-menu-item><a class="nb-link" href="#blog"><span>Stories</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>Contact</span></a></li>
          </ul>
          <div class="nb-actions" data-menu-item>
            <a class="st-btn nb-cta" href="#contact"><span>Book a session</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="smvw6s7pqntx7">
      <div class="ib-bg" role="img" aria-label="Background photo" style="background-image:url('https://webdevpuneet.com/images/section-templates/hero-landscape.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">Wedding &amp; portrait photography</span>
          <h1 class="ib-title" data-anim="item" data-anim-text>Honest photos of <span class="hl">your best days</span></h1>
          <p class="st-lead ib-lead" data-anim="item">Natural, unposed photography across Portugal and beyond, for couples, families and brands.</p>
          <div class="st-btns" data-anim="item">
            <a class="st-btn" href="#contact"><span>Check availability</span></a>
            <a class="st-btn st-btn--ghost ib-ghost" href="#pricing"><span>View packages</span></a>
          </div>
        </div>
        <div class="ib-stats" data-anim="media">
          <div><strong>400+</strong><span>weddings</span></div>
          <div><strong>12</strong><span>years</span></div>
          <div><strong>5.0</strong><span>average rating</span></div>
        </div>
      </div>
    </section>
    <section id="gallery" class="st st-gallery-grid" data-uid="smvw6s7pq71aq">
      <div class="st-wrap">
        <header class="st-head">
          <p class="st-eyebrow" data-anim="item">Selected work</p>
          <h2 class="st-h2" data-anim="item" data-anim-text>Stories from <span class="hl">recent sessions</span></h2>
          <p class="st-lead" data-anim="item">Weddings, portraits and brand shoots from the last season. Pick a category or tap a photo to see it larger.</p>
        </header>
        <div class="gg-filters" data-gallery-filters role="group" aria-label="Filter photos" hidden data-all="Everything"></div>
        <ul class="gg-grid" data-gallery>
          <li class="gg-item" data-anim="item" data-tag="Weddings">
            <img class="gg-img" width="1200" height="900" loading="lazy" src="https://webdevpuneet.com/images/section-templates/tpl-wedding.jpg" alt="A wedding scene in soft purple tones">
            <p class="gg-cap"><strong class="gg-title">Quinta da Serra</strong><span class="gg-text">A June wedding above Sintra</span></p>
          </li>
          <li class="gg-item" data-anim="item" data-tag="Weddings">
            <img class="gg-img" width="1200" height="900" loading="lazy" src="https://webdevpuneet.com/images/section-templates/wed-dinner.jpg" alt="A long dinner table set with candles">
            <p class="gg-cap"><strong class="gg-title">Dinner for sixty</strong><span class="gg-text">Candles, long tables and slow courses</span></p>
          </li>
          <li class="gg-item" data-anim="item" data-tag="Weddings">
            <img class="gg-img" width="1200" height="900" loading="lazy" src="https://webdevpuneet.com/images/section-templates/wed-party.jpg" alt="String lights over a dance floor at night">
            <p class="gg-cap"><strong class="gg-title">The last dance</strong><span class="gg-text">Lisbon, an October evening</span></p>
          </li>
          <li class="gg-item" data-anim="item" data-tag="Portraits">
            <img class="gg-img" width="1200" height="900" loading="lazy" src="https://webdevpuneet.com/images/section-templates/tpl-nature.jpg" alt="Green hills at sunrise">
            <p class="gg-cap"><strong class="gg-title">Golden hour</strong><span class="gg-text">A family session on the hills at dawn</span></p>
          </li>
          <li class="gg-item" data-anim="item" data-tag="Portraits">
            <img class="gg-img" width="1200" height="900" loading="lazy" src="https://webdevpuneet.com/images/section-templates/tpl-salon.jpg" alt="A bright studio with arched mirrors">
            <p class="gg-cap"><strong class="gg-title">Studio light</strong><span class="gg-text">Natural window light, no flash</span></p>
          </li>
          <li class="gg-item" data-anim="item" data-tag="Brands">
            <img class="gg-img" width="1200" height="900" loading="lazy" src="https://webdevpuneet.com/images/section-templates/tpl-product.jpg" alt="A pair of headphones on a pale background">
            <p class="gg-cap"><strong class="gg-title">Product day</strong><span class="gg-text">A launch shoot for a small audio brand</span></p>
          </li>
        </ul>
      </div>
    </section>
    <section id="pricing" class="st st-pricing-rows" data-uid="smvw6s7pqxy7v">
      <div class="st-wrap">
        <div class="pl-top">
          <header class="st-head st-head--left pl-head">
            <p class="st-eyebrow" data-anim="item">Sessions</p>
            <h2 class="st-h2" data-anim="item" data-anim-text>Packages for <span class="hl">every story</span></h2>
            <p class="st-lead" data-anim="item">Every package includes an online gallery and full-resolution downloads.</p>
          </header>
        </div>
        <div class="pl-rows">
          <article class="pl-row" data-anim="item">
            <div class="pl-info">
              <h3 class="pl-name"><span>Portrait session</span></h3>
              <p class="pl-desc">One hour, one location, perfect for families and headshots.</p>
            </div>
            <ul class="pl-chips"><li>1 hour</li><li>40+ edited photos</li><li>Online gallery</li></ul>
            <p class="pl-price">
              <span class="st-pm"><b class="pl-amt">€350</b><span class="pl-per">per session</span></span>
              <span class="st-py"><b class="pl-amt">$790</b><span class="pl-per">per session</span></span>
            </p>
            <a class="st-btn" href="https://webdevpuneet.com/contact"><span>Book</span></a>
          </article>
          <article class="pl-row" data-anim="item">
            <div class="pl-info">
              <h3 class="pl-name"><span>Wedding day</span><span class="pl-badge">Most booked</span></h3>
              <p class="pl-desc">Full-day coverage from getting ready to the first dance.</p>
            </div>
            <ul class="pl-chips"><li>10 hours</li><li>600+ photos</li><li>Second shooter</li><li>Printed album</li></ul>
            <p class="pl-price">
              <span class="st-pm"><b class="pl-amt">€2,900</b><span class="pl-per">per wedding</span></span>
              <span class="st-py"><b class="pl-amt">$790</b><span class="pl-per">per wedding</span></span>
            </p>
            <a class="st-btn" href="https://webdevpuneet.com/contact"><span>Check dates</span></a>
          </article>
          <article class="pl-row" data-anim="item">
            <div class="pl-info">
              <h3 class="pl-name"><span>Brand shoot</span></h3>
              <p class="pl-desc">Lifestyle and product photos for your website and socials.</p>
            </div>
            <ul class="pl-chips"><li>Half day</li><li>80+ photos</li><li>Commercial licence</li></ul>
            <p class="pl-price">
              <span class="st-pm"><b class="pl-amt">€1,200</b><span class="pl-per">per shoot</span></span>
              <span class="st-py"><b class="pl-amt">$790</b><span class="pl-per">per shoot</span></span>
            </p>
            <a class="st-btn" href="https://webdevpuneet.com/contact"><span>Enquire</span></a>
          </article>
        </div>
      </div>
    </section>
    <section id="customers" class="st st-testimonials-carousel" data-uid="smvw6s7pq0dzn">
      <div class="st-wrap">
        <div class="tc-top">
          <header class="st-head st-head--left tc-head">
            <p class="st-eyebrow" data-anim="item">Client love</p>
            <h2 class="st-h2" data-anim="item" data-anim-text>Moments they’ll <span class="hl">keep forever</span></h2>
            <p class="st-lead" data-anim="item">Thousands of teams plan and ship with us every day. Here is what a few of them say.</p>
          </header>
          <div class="tc-arrows" data-anim="item">
            <button type="button" class="tc-arrow" data-carousel-prev><span class="tc-sr">Previous testimonials</span><svg width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2.4" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true"><path d="m15 18-6-6 6-6"/></svg></button>
            <button type="button" class="tc-arrow" data-carousel-next><span class="tc-sr">Next testimonials</span><svg width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2.4" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true"><path d="m9 18 6-6-6-6"/></svg></button>
          </div>
        </div>
        <div class="tc-track" data-carousel tabindex="0" role="region" aria-label="Testimonials">
          <figure class="tc-card" data-anim="item">
            <p class="st-stars" role="img" aria-label="Rated 5 out of 5"><span aria-hidden="true">★★★★★</span></p>
            <blockquote class="tc-quote"><p>Our launch checklist used to live in five places. Now it lives in one, and we haven’t missed a step since.</p></blockquote>
            <figcaption><div class="st-person">
                <img class="st-avatar" width="96" height="96" loading="lazy" src="https://webdevpuneet.com/images/section-templates/avatar-5.jpg" alt="">
                <div><p class="st-person-name">Priya Raman</p><p class="st-person-role">Product Marketing, Orbit</p></div>
              </div></figcaption>
          </figure>
          <figure class="tc-card" data-anim="item">
            <p class="st-stars" role="img" aria-label="Rated 5 out of 5"><span aria-hidden="true">★★★★★</span></p>
            <blockquote class="tc-quote"><p>The best onboarding I’ve seen. Our whole team was productive on day one without a single training session.</p></blockquote>
            <figcaption><div class="st-person">
                <img class="st-avatar" width="96" height="96" loading="lazy" src="https://webdevpuneet.com/images/section-templates/avatar-4.jpg" alt="">
                <div><p class="st-person-name">Marcus Webb</p><p class="st-person-role">COO, Fernhill</p></div>
              </div></figcaption>
          </figure>
          <figure class="tc-card" data-anim="item">
            <p class="st-stars" role="img" aria-label="Rated 5 out of 5"><span aria-hidden="true">★★★★★</span></p>
            <blockquote class="tc-quote"><p>Reports that used to take me Friday afternoon now build themselves. I got my Fridays back.</p></blockquote>
            <figcaption><div class="st-person">
                <img class="st-avatar" width="96" height="96" loading="lazy" src="https://webdevpuneet.com/images/section-templates/avatar-3.jpg" alt="">
                <div><p class="st-person-name">Lena Fischer</p><p class="st-person-role">Project Lead, Alder &amp; Co</p></div>
              </div></figcaption>
          </figure>
          <figure class="tc-card" data-anim="item">
            <p class="st-stars" role="img" aria-label="Rated 5 out of 5"><span aria-hidden="true">★★★★★</span></p>
            <blockquote class="tc-quote"><p>It scales with us. Twelve people last year, ninety this year, and it still feels fast and simple.</p></blockquote>
            <figcaption><div class="st-person">
                <img class="st-avatar" width="96" height="96" loading="lazy" src="https://webdevpuneet.com/images/section-templates/avatar-7.jpg" alt="">
                <div><p class="st-person-name">Tom Alvarez</p><p class="st-person-role">VP Engineering, Quill</p></div>
              </div></figcaption>
          </figure>
          <figure class="tc-card" data-anim="item">
            <p class="st-stars" role="img" aria-label="Rated 5 out of 5"><span aria-hidden="true">★★★★★</span></p>
            <blockquote class="tc-quote"><p>Clients can follow progress with a view-only link. Fewer status emails, happier clients.</p></blockquote>
            <figcaption><div class="st-person">
                <img class="st-avatar" width="96" height="96" loading="lazy" src="https://webdevpuneet.com/images/section-templates/avatar-8.jpg" alt="">
                <div><p class="st-person-name">Grace Kim</p><p class="st-person-role">Agency Owner, Studio Kim</p></div>
              </div></figcaption>
          </figure>
        </div>
      </div>
    </section>
    <section id="blog" class="st st-blog-cards" data-uid="smvw6s7pqrffh">
      <div class="st-wrap">
        <div class="bc-top">
          <header class="st-head st-head--left bc-head">
            <p class="st-eyebrow" data-anim="item">Stories</p>
            <h2 class="st-h2" data-anim="item" data-anim-text>Recent <span class="hl">weddings and shoots</span></h2>
          </header>
          <a class="bc-all" data-anim="item" href="/blog/"><span>View all posts</span> <span aria-hidden="true">→</span></a>
        </div>
        <ul class="bc-grid">
          <li class="bc-card" data-anim="item">
            <a class="bc-cover" tabindex="-1" aria-hidden="true" href="/blog/faster-pages/"><img width="1200" height="750" loading="lazy" src="https://webdevpuneet.com/images/section-templates/blog-4.jpg" alt=""></a>
            <p class="bc-meta"><span class="bc-cat">Engineering</span><span>Oct 14, 2026</span><span class="bc-sep" aria-hidden="true">·</span><span>8 min read</span></p>
            <h3 class="bc-title"><a href="/blog/faster-pages/"><span>How we cut page load time in half</span></a></h3>
            <p class="bc-excerpt">Lazy hydration, smarter caching and one surprising database index: the full story of our performance sprint.</p>
            <p class="bc-author"><img width="64" height="64" loading="lazy" src="https://webdevpuneet.com/images/section-templates/avatar-1.jpg" alt=""><span>Leo Martins</span></p>
          </li>
          <li class="bc-card" data-anim="item">
            <a class="bc-cover" tabindex="-1" aria-hidden="true" href="/blog/live-reports/"><img width="1200" height="750" loading="lazy" src="https://webdevpuneet.com/images/section-templates/blog-6.jpg" alt=""></a>
            <p class="bc-meta"><span class="bc-cat">Product</span><span>Oct 9, 2026</span><span class="bc-sep" aria-hidden="true">·</span><span>5 min read</span></p>
            <h3 class="bc-title"><a href="/blog/live-reports/"><span>Introducing live reports</span></a></h3>
            <p class="bc-excerpt">Dashboards that update as your team works, with no spreadsheets and no Friday afternoon status updates.</p>
            <p class="bc-author"><img width="64" height="64" loading="lazy" src="https://webdevpuneet.com/images/section-templates/avatar-5.jpg" alt=""><span>Nora Quinn</span></p>
          </li>
          <li class="bc-card" data-anim="item">
            <a class="bc-cover" tabindex="-1" aria-hidden="true" href="/blog/four-day-sprints/"><img width="1200" height="750" loading="lazy" src="https://webdevpuneet.com/images/section-templates/blog-1.jpg" alt=""></a>
            <p class="bc-meta"><span class="bc-cat">Culture</span><span>Oct 2, 2026</span><span class="bc-sep" aria-hidden="true">·</span><span>6 min read</span></p>
            <h3 class="bc-title"><a href="/blog/four-day-sprints/"><span>What four-day sprints taught us</span></a></h3>
            <p class="bc-excerpt">A year of shorter weeks: what changed in our output, our planning and how the team feels.</p>
            <p class="bc-author"><img width="64" height="64" loading="lazy" src="https://webdevpuneet.com/images/section-templates/avatar-6.jpg" alt=""><span>Aisha Bello</span></p>
          </li>
        </ul>
      </div>
    </section>
    <section class="st st-product-grid" data-uid="smvw6s7pqz4mx">
      <div class="st-wrap">
        <div class="pg-top">
          <header class="st-head st-head--left pg-head">
            <p class="st-eyebrow" data-anim="item">Prints &amp; albums</p>
            <h2 class="st-h2" data-anim="item" data-anim-text>Take <span class="hl">the day home</span></h2>
          </header>
          <a class="pg-all" data-anim="item" href="#contact"><span>See all prints</span> <span aria-hidden="true">→</span></a>
        </div>
        <ul class="pg-grid">
          <li class="pg-card" data-anim="item">
            <a class="pg-media" tabindex="-1" aria-hidden="true" href="#contact">
              <img class="pg-img" width="800" height="1000" loading="lazy" src="https://webdevpuneet.com/images/section-templates/tpl-nature.jpg" alt="Green hills at sunrise, framed print">
              <span class="pg-badge">Best seller</span>
            </a>
            <div class="pg-body">
              <h3 class="pg-name"><a href="#contact"><span>Golden hour print</span></a></h3>
              <p class="pg-text">Fine-art paper, 30 × 40 cm</p>
              <p class="pg-rating"><span aria-hidden="true">★</span> <span>4.9</span><span class="pg-reviews">(<span>64</span>)</span></p>
              <p class="pg-price"><strong>€85</strong></p>
              <a class="st-btn pg-btn" href="#contact"><span>Order a print</span></a>
            </div>
          </li>
          <li class="pg-card" data-anim="item">
            <a class="pg-media" tabindex="-1" aria-hidden="true" href="#contact">
              <img class="pg-img" width="800" height="1000" loading="lazy" src="https://webdevpuneet.com/images/section-templates/wed-dinner.jpg" alt="A candlelit wedding dinner table, framed print">
            </a>
            <div class="pg-body">
              <h3 class="pg-name"><a href="#contact"><span>Candlelit dinner print</span></a></h3>
              <p class="pg-text">Fine-art paper, 30 × 40 cm</p>
              <p class="pg-rating"><span aria-hidden="true">★</span> <span>4.8</span><span class="pg-reviews">(<span>41</span>)</span></p>
              <p class="pg-price"><strong>€85</strong></p>
              <a class="st-btn pg-btn" href="#contact"><span>Order a print</span></a>
            </div>
          </li>
          <li class="pg-card" data-anim="item">
            <a class="pg-media" tabindex="-1" aria-hidden="true" href="#contact">
              <img class="pg-img" width="800" height="1000" loading="lazy" src="https://webdevpuneet.com/images/section-templates/tpl-wedding.jpg" alt="A wedding album with a linen cover">
              <span class="pg-badge">New</span>
            </a>
            <div class="pg-body">
              <h3 class="pg-name"><a href="#contact"><span>Wedding album</span></a></h3>
              <p class="pg-text">30 pages, linen cover, lay-flat</p>
              <p class="pg-rating"><span aria-hidden="true">★</span> <span>5.0</span><span class="pg-reviews">(<span>27</span>)</span></p>
              <p class="pg-price"><strong>€420</strong></p>
              <a class="st-btn pg-btn" href="#contact"><span>Ask about albums</span></a>
            </div>
          </li>
          <li class="pg-card" data-anim="item">
            <a class="pg-media" tabindex="-1" aria-hidden="true" href="#contact">
              <img class="pg-img" width="800" height="1000" loading="lazy" src="https://webdevpuneet.com/images/section-templates/wed-party.jpg" alt="A gift voucher for a photo session">
            </a>
            <div class="pg-body">
              <h3 class="pg-name"><a href="#contact"><span>Session gift voucher</span></a></h3>
              <p class="pg-text">A portrait session for two</p>
              <p class="pg-price"><strong>€150</strong></p>
              <a class="st-btn pg-btn" href="#contact"><span>Buy a voucher</span></a>
            </div>
          </li>
        </ul>
      </div>
    </section>
    <section id="contact" class="st st-contact-split-form" data-uid="smvw6s7pqamk1">
      <div class="st-wrap cs2">
        <div class="cs2-info">
          <header class="st-head st-head--left cs2-head">
            <p class="st-eyebrow" data-anim="item">Contact</p>
            <h2 class="st-h2" data-anim="item" data-anim-text>Tell me about <span class="hl">your day</span></h2>
            <p class="st-lead" data-anim="item">Share your date, place and a little about you. I’ll reply with availability within 24 hours.</p>
          </header>
          <ul class="cs2-methods">
            <li class="cs2-method" data-anim="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>
              <div><p class="cs2-label">Email us</p><a class="cs2-value" href="mailto:[email protected]"><span>[email protected]</span></a></div>
            </li>
            <li class="cs2-method" data-anim="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>
              <div><p class="cs2-label">Call us</p><a class="cs2-value" href="tel:+442079460958"><span>+44 20 7946 0958</span></a></div>
            </li>
            <li class="cs2-method" data-anim="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>
              <div><p class="cs2-label">Visit us</p><a class="cs2-value" href="https://www.openstreetmap.org/search?query=Clerkenwell%20Road%20London"><span>12 Clerkenwell Road, London</span></a></div>
            </li>
            <li class="cs2-method" data-anim="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"><circle cx="12" cy="12" r="10" /><polyline points="12 6 12 12 16 14" /></svg></span>
              <div><p class="cs2-label">Office hours</p><p class="cs2-value">Mon–Fri, 9am–6pm GMT</p></div>
            </li>
          </ul>
        </div>
        <div class="cs2-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>How can we help?</span><textarea name="message" rows="5" required></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>Check availability</span></button>
              <p class="st-form-note">We reply within one business day.</p>
              <p class="st-form-error" data-form-error hidden role="alert">Sorry, something went wrong. Please try again or email 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>Thanks, message sent!</h3>
              <p>We’ll get back to you within one business day.</p>
            </div>
          </form>
        </div>
      </div>
    </section>
    <section class="st st-floating-social-share" data-uid="smvw6s7pq9ia7">
      <div class="ss" data-ss data-side="left" data-align="center" style="--ss-top:50%" data-mobile="bar" data-look="network" data-shape="attached" data-size="default" data-tips="on" data-start="open" data-copied="Link copied">
        <div class="ss-panel" role="group" aria-label="Share this page">
          <ul class="ss-list"><li class="ss-item"><a class="ss-btn" data-net="pinterest" data-share="https://www.pinterest.com/pin/create/button/?url={url}&amp;media={image}&amp;description={title}" href="https://www.pinterest.com/pin/create/button/" target="_blank" rel="noopener noreferrer" style="--c:#E60023" aria-label="Share on Pinterest (opens in a new tab)"><svg class="ss-ic" viewBox="0 0 24 24" width="22" height="22" aria-hidden="true" focusable="false" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><circle cx="12" cy="12" r="10"/><path d="M10.600 18l1.400-6"/><path d="M9.600 12.800C8.700 10 10.300 7.500 12.800 7.500c2.200 0 3.500 1.500 3.500 3.300 0 2.400-1.400 4-3.200 4-.8 0-1.500-.4-1.700-1.100"/></svg><span class="ss-tip" aria-hidden="true">Pinterest</span></a></li><li class="ss-item"><a class="ss-btn" data-net="facebook" data-share="https://www.facebook.com/sharer/sharer.php?u={url}" href="https://www.facebook.com/sharer/sharer.php" target="_blank" rel="noopener noreferrer" style="--c:#1877F2" aria-label="Share on Facebook (opens in a new tab)"><svg class="ss-ic" viewBox="0 0 24 24" width="22" height="22" aria-hidden="true" focusable="false" fill="currentColor"><path d="M18 2h-3a5 5 0 0 0-5 5v3H7v4h3v8h4v-8h3l1-4h-4V7a1 1 0 0 1 1-1h3z"/></svg><span class="ss-tip" aria-hidden="true">Facebook</span></a></li><li class="ss-item"><a class="ss-btn" data-net="x" data-share="https://x.com/intent/post?url={url}&amp;text={title}&amp;via={via}&amp;hashtags={tags}" href="https://x.com/intent/post" target="_blank" rel="noopener noreferrer" style="--c:#111111" aria-label="Share on X (opens in a new tab)"><svg class="ss-ic" viewBox="0 0 24 24" width="22" height="22" aria-hidden="true" focusable="false" fill="currentColor"><path d="M18.244 2.25h3.308l-7.227 8.26 8.502 11.24H16.17l-5.214-6.817L4.99 21.75H1.68l7.73-8.835L1.254 2.25H8.08l4.713 6.231zm-1.161 17.52h1.833L7.084 4.126H5.117z"/></svg><span class="ss-tip" aria-hidden="true">X</span></a></li><li class="ss-item"><button type="button" class="ss-btn" data-net="copy" style="--c:#0F7B3F" aria-label="Copy link"><svg class="ss-ic" viewBox="0 0 24 24" width="22" height="22" aria-hidden="true" focusable="false" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><rect width="13" height="13" x="8" y="8" rx="2.500"/><path d="M16 8V6.500A2.500 2.500 0 0 0 13.500 4h-7A2.500 2.500 0 0 0 4 6.500v7A2.500 2.500 0 0 0 6.500 16H8"/></svg><svg class="ss-ic ss-ic--done" viewBox="0 0 24 24" width="22" height="22" aria-hidden="true" focusable="false" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><path d="M20 6 9 17l-5-5"/></svg><span class="ss-tip" aria-hidden="true">Copy link</span></button></li><li class="ss-item ss-item--hide"><button type="button" class="ss-hide" data-ss-hide aria-expanded="true" aria-label="Hide share buttons"><svg class="ss-ic ss-ic--hide" viewBox="0 0 24 24" width="22" height="22" aria-hidden="true" focusable="false" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><path d="m11 17-5-5 5-5"/><path d="m18 17-5-5 5-5"/></svg></button></li></ul>
        </div>
        <button type="button" class="ss-tab" data-ss-show aria-expanded="true" aria-label="Show share buttons"><svg class="ss-ic" viewBox="0 0 24 24" width="22" height="22" aria-hidden="true" focusable="false" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><circle cx="18" cy="5" r="3"/><circle cx="6" cy="12" r="3"/><circle cx="18" cy="19" r="3"/><path d="m8.600 13.500 6.800 4M15.400 6.500l-6.800 4"/></svg><span class="ss-tab-text" aria-hidden="true">Share</span></button>
        <span class="ss-live" role="status" aria-live="polite"></span>
      </div>
    </section>
    <section class="st st-footer-minimal" data-uid="smvw6s7profrt">
      <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="M14.5 4h-5L7 7H4a2 2 0 0 0-2 2v9a2 2 0 0 0 2 2h16a2 2 0 0 0 2-2V9a2 2 0 0 0-2-2h-3l-2.5-3z" /><circle cx="12" cy="13" r="3" /></svg></span><span>Mira Lens</span></span>
          </a>
          <nav aria-label="Footer"><ul class="fm-links"><li><a href="#pricing">Sessions</a></li><li><a href="#customers">Reviews</a></li><li><a href="#blog">Stories</a></li><li><a href="#contact">Contact</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 Mira Lens Photography</p>
      </footer>
    </section>
    <section class="st st-back-to-top" data-uid="smvw6s7pr9jd7">
      <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>
    <section class="st st-cursor-follower" data-uid="smvw6s7pry2ww">
      <div class="cf" data-cf data-enabled="on" data-size="80" data-color="#ffffff" data-blend="difference" data-speed="0.18" data-border="0" data-border-style="solid" data-fill="on" data-grow="on" data-hide="off">
        <div class="cf-stage" aria-hidden="true">
          <p class="cf-word">Cur<b>sors</b></p>
          <p class="cf-sub">Move your mouse over this box</p>
          <div class="cf-art"></div>
          <p class="cf-word cf-word--2">in <b>motion</b></p>
        </div><!--/cf-stage-->
        <span class="cf-dot" aria-hidden="true"></span>
      </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 Photographer 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 photographer website for “Mira Lens” as clean HTML, CSS and a little JavaScript.

Page structure, top to bottom:
1. Simple Sticky Navbar
2. Image Background Hero: “Honest photos of your best days”
3. Filterable Image Gallery: “Stories from recent sessions”
4. Pricing List Rows: “Packages for every story”
5. Testimonial Carousel: “Moments they’ll keep forever”
6. Blog Post Cards: “Recent weddings and shoots”
7. Product Grid: “Take the day home”
8. Contact Form With Details: “Tell me about your day”
9. Floating Social Share Bar
10. Minimal Footer
11. Back to Top Button
12. Cursor Follower (Blend Mode Circle)

Look and feel:
- Colours as CSS custom properties: brand #e2e8f0, page background #0b0b0d, cards #16161a, text #f5f5f4, muted text #a8a29e. Corner radius 4px, content width 1320px.
- 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 creative 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 “Photographer Website Template — Free Portfolio HTML Template”, a meta description of 150 to 160 characters, Open Graph tags and JSON-LD that suits a creative 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:
- Pricing (pricing.html)
- Blog (blog.html)
- Contact (contact.html)
- Article (article.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 photographer website page: Simple Sticky Navbar, Image Background Hero, Filterable Image Gallery, Pricing List Rows, Testimonial Carousel, Blog Post Cards, Product Grid, Contact Form With Details, Floating Social Share Bar, Minimal Footer, Back to Top Button, Cursor Follower (Blend Mode Circle)
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 7-page website in the builder, sharing one navbar, footer and theme
A floating back to top button that appears as visitors scroll, on every page of the multi-page version
A cursor follower circle that inverts the text and images under it with a blend mode
Plain HTML, CSS and JavaScript: copy the code here or export it to React, Vue, Angular or Tailwind

About this UI Snippet

A Photographer Website That Lets the Photos Lead and the Packages Close the Booking

Screenshot of the Photographer Website Template snippet rendered live

For a photographer the work is the pitch, so this layout gets out of its way. A full-bleed image hero, a dark palette that makes photographs glow, and a filterable gallery where a visitor can look only at weddings, portraits or landscapes. What a gallery alone does not do is answer "how much?", so the page follows with session packages as clean price rows, followed by quotes from couples and clients that speak to the experience of being photographed, which is often what people are most nervous about.

Stories (blog cards) give search engines text to read and prospective clients a deeper look at a shoot. A small product grid lets you sell prints or presets. The booking form closes the page with the details a photographer needs: date, type of session and location.

Replace the sample images with your own best work and keep the gallery tight. It is the layout of the Photographer Website template; open it in the Website Builder to change fonts and colours, upload your images and export.

Interactive extras built in

Beyond the core sections, this template adds a floating back to top button that appears after the visitor scrolls, so a long page is easy to leave and return; and a circle that follows the cursor and inverts the page beneath it with a blend mode, adding a bold, playful touch. Each one has its own page in the Website Section Templates library (Back to Top Button, Cursor Follower), 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 Photographer 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 simple sticky bar so the booking link is always close while visitors browse the work
  2. Image Background Heroa full-bleed photograph as the hero: the first impression is the product itself
  3. Filterable Image Gallerya filterable gallery so a wedding couple sees weddings and a brand sees commercial work
  4. Pricing List Rowssession packages as price rows, so the cost question is answered without a phone call
  5. Testimonial Carouselquotes from clients about the experience of being photographed, which is what people worry about
  6. Blog Post Cardsstories from recent shoots, giving search engines text to read and clients a deeper look
  7. Product Grida print and preset grid for selling work beyond the shoot itself
  8. Contact Form With Detailsa booking form that asks for the date, session type and location you need to give a quote
  9. Floating Social Share Bara floating share bar so a favourite gallery is easy to send to a partner or family
  10. Minimal Footera minimal footer with your socials and copyright
  11. 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
  12. Cursor Follower (Blend Mode Circle)a circle that follows the cursor and inverts the page beneath it with a blend mode, adding a bold, playful touch

Step by step

How to Use

  1. 1
    Open the template in the Website BuilderPress "Start using this template" to open the Photographer Website in the Website Builder. Everything is edited with forms in a side panel; no code is needed.
  2. 2
    Curate the gallery to your best twelveUpload only the images you want more of, tag each with its filter category, and let the strongest set the tone in the first row.
  3. 3
    Write your packages as real pricesEdit the price rows to your actual sessions, with what is included (hours, edited images, delivery time) so enquiries arrive qualified.
  4. 4
    Ask the booking questions you needAdjust the form fields to the details you need for a quote, and route submissions to your email through Formspree or your own endpoint.
  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

A portfolio and booking site in one
Show the work, list the packages and take bookings from a single page with no platform fees.
Wedding, portrait and brand photographers
Use the gallery filter to give each client type their own corner of the work.
Learn filterable galleries
See how a gallery filters with small amounts of JavaScript while the images stay lazy-loaded and responsive.

Got questions?

Frequently Asked Questions

Fewer than you think. A tight set of your best work, grouped by category, persuades more than an exhaustive archive.

Showing starting prices pre-qualifies enquiries and saves time on both sides. List what is included in each package so it is easy to compare.

Resize and compress images before uploading, and keep the hero image to a sensible width. The builder resizes uploaded images in the browser.

It adds a floating back to top button and a cursor follower circle. 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, Filterable Image Gallery, Pricing List Rows, Testimonial Carousel, Blog Post Cards, Product Grid, Contact Form With Details, Floating Social Share Bar, Minimal Footer, Back to Top Button, Cursor Follower (Blend Mode Circle). 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.