✦ A decade of Canvas craft, now driven by AI — describe it, watch it build live.Start building
← Back to Blog
Niche Tutorials

How to Build a Salon Website with Bootstrap 5 — Step by Step

Canvas BuilderJuly 29, 20268 min read

A salon website needs to do one thing above all else: convince a potential client to book an appointment before they close the tab. Bootstrap 5 gives you the responsive grid, pre-built components, and mobile-first defaults to make that happen — without writing layout CSS from scratch.

Key Takeaways

  • A salon website built on Bootstrap 5 needs five core sections: hero, services, gallery, testimonials, and a booking CTA — each mapped to a specific conversion goal.
  • Bootstrap 5’s grid and utility classes handle responsive layout without custom media queries, saving significant build time.
  • Choosing the right colour palette and typography upfront prevents costly redesigns — warm neutrals and serif/sans-serif pairings consistently outperform generic Bootstrap defaults for beauty brands.
  • If you want to accelerate production further, starting from a structured HTML template like the Canvas HTML Template gives you pre-built Bootstrap 5 components you can customise rather than build from zero.

Plan Your Salon Site Structure Before Writing a Line of Code

Every decision you make in markup will be harder to undo later, so spend ten minutes defining the page sections before opening your editor. A standard single-page salon website should follow this order:

  1. Navigation — logo, menu links, and a prominent “Book Now” button
  2. Hero section — a full-width image or video, headline, and primary CTA
  3. Services — a card grid listing treatments and prices
  4. Gallery — a responsive image grid showing real work
  5. Testimonials — social proof from real clients
  6. Booking / Contact — a form or direct link to an online booking system
  7. Footer — address, hours, and social links

This structure mirrors what high-converting service pages use. If you want to understand the principles behind why this ordering works, the post on lead generation landing page principles covers the psychological reasoning in detail.

Set Up Your Bootstrap 5 Project Correctly

Bootstrap 5 ships with its own bundled JS (including Popper), so you do not need to load any third-party dependencies separately. Use the following minimal HTML shell to start your salon project:

<!DOCTYPE html>
<html lang="en">
<head>
  <meta charset="UTF-8">
  <meta name="viewport" content="width=device-width, initial-scale=1.0">
  <title>Lumière Salon</title>
  <link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/bootstrap@5.3.3/dist/css/bootstrap.min.css">
  <link rel="stylesheet" href="css/salon.css">
</head>
<body>

  <!-- Your sections go here -->

  <script src="https://cdn.jsdelivr.net/npm/bootstrap@5.3.3/dist/js/bootstrap.bundle.min.js"></script>
</body>
</html>

Your custom salon.css file is where you will override Bootstrap’s default colour tokens and set brand-specific CSS custom properties. Keep all visual overrides in one file — do not scatter them across inline styles.

Understanding how Bootstrap’s grid columns interact with your design decisions becomes easier if you read the Bootstrap 5 grid system beginner’s guide first. It covers column offsets, gutters, and breakpoint behaviour that you will rely on throughout this build.

Build a High-Impact Hero Section

The hero is the most important section on any service business website. It needs a compelling headline, a supporting subline, and one clear call to action — nothing more. Use Bootstrap’s position utilities and a background image overlay to create depth without extra CSS libraries:

<section class="hero-section d-flex align-items-center text-white text-center">
  <div class="container">
    <h1 class="display-4 fw-bold">Colour. Cut. Confidence.</h1>
    <p class="lead mb-4">Award-winning hair artistry in central London. Walk out a different person.</p>
    <a href="#booking" class="btn btn-lg px-5 py-3" style="background-color:#b07d5c; color:#fff; border-radius:2px;">Book Your Appointment</a>
  </div>
</section>
/ salon.css /
:root {
  --salon-accent: #b07d5c;
  --salon-dark: #1a1a1a;
  --salon-light: #f7f4f0;
}

.hero-section {
  min-height: 90vh;
  background: linear-gradient(rgba(26,26,26,0.55), rgba(26,26,26,0.55)),
              url('img/salon-hero.jpg') center/cover no-repeat;
}

Keep the button colour distinct from the background. Warm terracotta or dusty rose tones consistently outperform Bootstrap’s default primary blue in beauty-sector A/B tests because they reinforce the brand’s warmth without competing with photography.

Build the Services Section with Bootstrap Cards

Bootstrap’s card component and grid system together handle the services section with minimal custom CSS. Use a three-column layout on desktop that collapses to a single column on mobile:

<section id="services" class="py-6 bg-light">
  <div class="container">
    <h2 class="text-center mb-5 fw-semibold">Our Services</h2>
    <div class="row g-4">

      <div class="col-12 col-md-6 col-lg-4">
        <div class="card border-0 shadow-sm h-100 text-center p-4">
          <h3 class="h5 fw-bold mb-2">Cut &amp; Blowdry</h3>
          <p class="text-muted small">Precision cut tailored to your face shape and lifestyle.</p>
          <p class="fw-semibold mt-auto">From £55</p>
        </div>
      </div>

      <div class="col-12 col-md-6 col-lg-4">
        <div class="card border-0 shadow-sm h-100 text-center p-4">
          <h3 class="h5 fw-bold mb-2">Balayage</h3>
          <p class="text-muted small">Natural sun-kissed colour with seamless grow-out.</p>
          <p class="fw-semibold mt-auto">From £120</p>
        </div>
      </div>

      <div class="col-12 col-md-6 col-lg-4">
        <div class="card border-0 shadow-sm h-100 text-center p-4">
          <h3 class="h5 fw-bold mb-2">Keratin Treatment</h3>
          <p class="text-muted small">Smoothing treatment that lasts up to five months.</p>
          <p class="fw-semibold mt-auto">From £180</p>
        </div>
      </div>

    </div>
  </div>
</section>

The h-100 class on each card ensures equal height across the row regardless of content length. The g-4 gutter class handles spacing between cards without custom margin rules. If you want to compare this approach against a pure CSS Grid implementation for more complex layouts, the article on CSS Grid vs Bootstrap Grid walks through the trade-offs clearly.

Add Testimonials That Build Trust

Testimonials are not decoration — they are evidence. Place them before your booking form so a visitor who is on the fence encounters social proof at the moment of decision. A simple two-column quote layout works reliably:

<section id="testimonials" class="py-6" style="background-color: var(--salon-light);">
  <div class="container">
    <h2 class="text-center mb-5 fw-semibold">What Our Clients Say</h2>
    <div class="row g-4">

      <div class="col-12 col-md-6">
        <blockquote class="card border-0 p-4 shadow-sm">
          <p class="mb-3">"I've been going to Lumière for three years. The balayage always looks natural and lasts beautifully."</p>
          <footer class="blockquote-footer">Sarah T., Shoreditch</footer>
        </blockquote>
      </div>

      <div class="col-12 col-md-6">
        <blockquote class="card border-0 p-4 shadow-sm">
          <p class="mb-3">"Best keratin treatment in London. Totally transformed my hair. Worth every penny."</p>
          <footer class="blockquote-footer">Priya M., Islington</footer>
        </blockquote>
      </div>

    </div>
  </div>
</section>

Include the client’s name and neighbourhood where possible. Location specificity increases perceived credibility significantly for local service businesses.

Build the Booking Section and Apply Finishing Touches

The booking section is the conversion endpoint. If you use an third-party booking tool like Fresha or Treatwell, embed their widget or link directly to your booking URL inside a clearly marked section with its own id=”booking” anchor so your hero CTA button scrolls to it correctly.

For a simple contact form fallback, Bootstrap’s form utilities handle the layout:

<section id="booking" class="py-6 text-white" style="background-color: var(--salon-dark);">
  <div class="container">
    <div class="row justify-content-center">
      <div class="col-12 col-md-8 col-lg-6">
        <h2 class="text-center mb-4 fw-semibold">Book Your Appointment</h2>
        <form>
          <div class="mb-3">
            <label for="clientName" class="form-label">Your Name</label>
            <input type="text" class="form-control" id="clientName" placeholder="Jane Smith">
          </div>
          <div class="mb-3">
            <label for="clientEmail" class="form-label">Email Address</label>
            <input type="email" class="form-control" id="clientEmail" placeholder="jane@example.com">
          </div>
          <div class="mb-3">
            <label for="service" class="form-label">Service Required</label>
            <select class="form-select" id="service">
              <option value="">Select a service</option>
              <option>Cut &amp; Blowdry</option>
              <option>Balayage</option>
              <option>Keratin Treatment</option>
            </select>
          </div>
          <button type="submit" class="btn w-100 py-3 fw-semibold" style="background-color: var(--salon-accent); color:#fff;">Request Booking</button>
        </form>
      </div>
    </div>
  </div>
</section>

Before you call the build complete, review spacing and whitespace carefully. Generous vertical padding between sections — Bootstrap’s py-6 or equivalent — prevents the page from feeling compressed. Compressed layouts reduce perceived quality, which is fatal for a premium salon positioning. The principles behind effective whitespace use are covered in the post on whitespace in web design.

Finally, validate your colour choices against your brand. Soft warm neutrals (cream, blush, terracotta, champagne) are the dominant palette for beauty brands in 2025–2026. Avoid defaulting to Bootstrap’s blue primary — it signals tech, not luxury. Define your palette at the :root level using CSS custom properties from the start so every component inherits them consistently.

Frequently Asked Questions

Do I need JavaScript to build a salon website with Bootstrap 5?

Not for core layout. Bootstrap 5’s grid, cards, and utility classes are pure CSS. You only need the Bootstrap JS bundle if you use interactive components like a mobile navbar toggle, modal gallery, or carousel. The bundle is included via a single script tag and handles Popper internally — no separate dependency needed.

How do I make the salon website mobile-friendly?

Bootstrap 5 is mobile-first by default, meaning its grid classes apply from the smallest breakpoint upward. Use col-12 as your base column width, then add col-md-6 or col-lg-4 to expand the layout on larger screens. Test on real devices — Chrome DevTools emulation is useful but not a substitute for physical testing on iOS and Android.

Should I use a multi-page or single-page layout for a salon website?

For most salons with fewer than six services, a single-page layout with anchor navigation converts better than a multi-page site. It reduces clicks-to-booking and keeps visitors on one URL. If you offer many treatments across different categories (hair, nails, beauty, spa), a multi-page site with a clear menu structure is more appropriate.

Can I use Bootstrap 5 with the Canvas HTML Template?

Yes — Canvas is built on Bootstrap 5 and bundles it internally. You should never load Bootstrap from a CDN separately when using Canvas, as that would create conflicting versions. Canvas extends Bootstrap with its own component library and CSS custom properties like –cnvs-themecolor for theme colour overrides.

How long does it take to build a salon website with Bootstrap 5 from scratch?

A competent developer building from scratch with Bootstrap 5 should expect 8–20 hours for a polished single-page salon site, depending on design complexity, gallery size, and whether a booking integration is required. Starting from a structured HTML template reduces that to 2–6 hours because the component architecture is already in place.

If you’re working with the Canvas HTML Template and want to generate production-ready layouts faster, try Canvas Builder free and see how much time you save on every project.

Related Posts