Book Appointment Beauty Salon Template
Preview
Edit
Download
Run
Download Options
HTML File
Download as .html file
CSS File
Download as .css file
JavaScript File
Download as .js file
Combined HTML
All code in one HTML file
Project ZIP
All files in a ZIP archive
Cancel
HTML
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <meta name="viewport" content="width=device-width, initial-scale=1.0"> <title>Book Appointment | Aura Beauty Salon & Spa</title> <!-- Premium Fonts --> <link href="https://fonts.googleapis.com/css2?family=Cormorant+Garamond:ital,wght@0,400;0,600;0,700;1,400&family=Jost:wght@300;400;500;600&display=swap" rel="stylesheet"> <!-- Icons --> <link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/font-awesome/6.4.0/css/all.min.css"> </head> <body> <!-- Background Abstract Blobs --> <div class="bg-blob blob-1"></div> <div class="bg-blob blob-2"></div> <div class="bg-blob blob-3"></div> <!-- Hero Section --> <header class="hero"> <div class="glass-card"> <h1><i class="fas fa-spa"></i><br>Book Your Glow-Up</h1> <p>Experience luxury grooming, relaxing spas, and flawless makeovers in a serene, aesthetic environment.</p> </div> </header> <!-- Section 1: Services Image Gallery --> <section class="services-section reveal"> <h2 class="section-title">The Beauty Experience</h2> <p class="section-subtitle">Choose from our wide range of premium salon services.</p> <div class="services-grid"> <div class="service-card"> <img src="https://images.unsplash.com/photo-1562322140-8baeececf3df?auto=format&fit=crop&w=600&q=80" alt="Hair Styling"> <div class="service-overlay"> <h3>Hair & Styling</h3> <p>Cuts, Coloring & Keratin</p> </div> </div> <div class="service-card" style="transition-delay: 0.1s;"> <img src="https://images.unsplash.com/photo-1487412720507-e7ab37603c6f?auto=format&fit=crop&w=600&q=80" alt="Bridal Makeup"> <div class="service-overlay"> <h3>Bridal Makeup</h3> <p>HD & Airbrush Makeovers</p> </div> </div> <div class="service-card" style="transition-delay: 0.2s;"> <img src="https://images.unsplash.com/photo-1632345031435-8727f6897d53?w=500&auto=format&fit=crop&q=60&ixlib=rb-4.1.0&ixid=M3wxMjA3fDB8MHxzZWFyY2h8NHx8bmFpbHxlbnwwfHwwfHx8MA%3D%3D" alt="Nail Art"> <div class="service-overlay"> <h3>Nail Studio</h3> <p>Extensions & Gel Art</p> </div> </div> <div class="service-card" style="transition-delay: 0.3s;"> <img src="https://images.unsplash.com/photo-1544161515-4ab6ce6db874?auto=format&fit=crop&w=600&q=80" alt="Spa Therapy"> <div class="service-overlay"> <h3>Spa & Therapy</h3> <p>Massages & Facials</p> </div> </div> </div> </section> <!-- Section 2: Split Booking Form --> <section class="booking-section reveal"> <!-- Left: Salon Info --> <div class="info-panel"> <h2>Contact Details</h2> <div class="info-block"> <i class="fas fa-map-marker-alt"></i> <div> <h4>Our Studio</h4> <p>45 Rosewood Avenue, Elite Mall<br>Downtown District, NY 10012</p> </div> </div> <div class="info-block"> <i class="fas fa-envelope-open-text"></i> <div> <h4>Get In Touch</h4> <p>+1 (555) 789-0123<br>hello@aurabeauty.com</p> </div> </div> <div class="info-block" style="margin-top: 50px;"> <i class="far fa-clock"></i> <div style="width: 100%;"> <h4>Opening Hours</h4> <ul class="hours-list"> <li><span>Mon - Fri</span> <span>10:00 AM - 08:00 PM</span></li> <li><span>Saturday</span> <span>09:00 AM - 09:00 PM</span></li> <li><span>Sunday</span> <span>10:00 AM - 06:00 PM</span></li> </ul> </div> </div> </div> <!-- Right: Form --> <div class="form-panel"> <h2>Reserve Your Seat</h2> <p style="color: var(--text-gray); margin-bottom: 40px; font-size: 1.05rem;">Fill out the details below, and we’ll confirm your appointment shortly.</p> <form id="bookingForm"> <div class="form-row"> <div class="input-wrap"> <input type="text" id="name" required> <label for="name">Full Name</label> </div> <div class="input-wrap"> <input type="tel" id="phone" required> <label for="phone">Phone Number</label> </div> </div> <div class="form-row"> <div class="input-wrap"> <select id="service" required> <option value="" disabled selected hidden>Select a Service</option> <option value="hair">Haircut & Blowdry ($45+)</option> <option value="color">Hair Coloring/Balayage ($120+)</option> <option value="makeup">Party/Bridal Makeup ($80+)</option> <option value="nails">Nail Extensions ($50+)</option> <option value="facial">Advanced Facial/Spa ($75+)</option> </select> </div> <div class="input-wrap"> <select id="stylist" required> <option value="" disabled selected hidden>Preferred Stylist</option> <option value="any">Anyone Available</option> <option value="sophia">Sophia (Senior Artist)</option> <option value="emma">Emma (Hair Specialist)</option> <option value="olivia">Olivia (Nail Expert)</option> </select> </div> </div> <div class="form-row"> <div class="input-wrap"> <!-- JS applied to prevent past dates --> <input type="date" id="date" required style="color: var(--charcoal);"> <label for="date" style="top: -12px; font-size: 0.85px; color: var(--rose-gold);">Choose Date</label> </div> <div class="input-wrap"> <input type="time" id="time" required style="color: var(--charcoal);"> <label for="time" style="top: -12px; font-size: 0.85px; color: var(--rose-gold);">Preferred Time</label> </div> </div> <div class="input-wrap" style="margin-bottom: 30px;"> <textarea id="notes" required></textarea> <label for="notes">Any special requests or allergies we should know about?</label> </div> <button type="submit" class="submit-btn" id="submitBtn"> Confirm Appointment <i class="fas fa-calendar-check"></i> </button> </form> </div> </section> <!-- Section 3: Client Testimonials --> <section class="testimonials reveal"> <h2 class="section-title">Loved by Thousands</h2> <p class="section-subtitle">Read what our beautiful clients have to say about us.</p> <div class="testi-grid"> <div class="testi-card"> <i class="fas fa-quote-left"></i> <p>"Absolutely amazing experience! Sophia did my bridal makeup and I felt like a princess. The salon vibe is so aesthetic and relaxing."</p> <div class="client-info"> <img src="https://images.unsplash.com/photo-1438761681033-6461ffad8d80?auto=format&fit=crop&w=150&q=80" alt="Sarah"> <div> <h4>Sarah Jenkins</h4> <div class="stars"><i class="fas fa-star"></i><i class="fas fa-star"></i><i class="fas fa-star"></i><i class="fas fa-star"></i><i class="fas fa-star"></i></div> </div> </div> </div> <div class="testi-card" style="transition-delay: 0.1s;"> <i class="fas fa-quote-left"></i> <p>"Best balayage in the city. Emma knows exactly what she's doing. Plus, the complimentary coffee they serve is just *chef's kiss*."</p> <div class="client-info"> <img src="https://images.unsplash.com/photo-1544005313-94ddf0286df2?auto=format&fit=crop&w=150&q=80" alt="Jessica"> <div> <h4>Jessica Alba</h4> <div class="stars"><i class="fas fa-star"></i><i class="fas fa-star"></i><i class="fas fa-star"></i><i class="fas fa-star"></i><i class="fas fa-star-half-alt"></i></div> </div> </div> </div> <div class="testi-card" style="transition-delay: 0.2s;"> <i class="fas fa-quote-left"></i> <p>"The acrylic nails I got here lasted a whole month without chipping! Olivia is super talented. Highly recommend Aura to everyone."</p> <div class="client-info"> <img src="https://images.unsplash.com/photo-1517841905240-472988babdf9?auto=format&fit=crop&w=150&q=80" alt="Emily"> <div> <h4>Emily Roberts</h4> <div class="stars"><i class="fas fa-star"></i><i class="fas fa-star"></i><i class="fas fa-star"></i><i class="fas fa-star"></i><i class="fas fa-star"></i></div> </div> </div> </div> </div> </section> </body> </html>
CSS
/* --- CSS VARIABLES --- */ :root { --rose-gold: #B76E79; --rose-light: #E0A9B0; --blush-pink: #FDFBFB; --cream-bg: #FAF9F6; --charcoal: #2C2C2C; --text-gray: #6B6B6B; --white: #FFFFFF; --shadow-soft: 0 15px 35px rgba(183, 110, 121, 0.1); --transition: all 0.5s cubic-bezier(0.25, 1, 0.5, 1); } * { margin: 0; padding: 0; box-sizing: border-box; } body { font-family: 'Jost', sans-serif; background-color: var(--cream-bg); color: var(--charcoal); overflow-x: hidden; position: relative; } /* Abstract Floating Blobs in Background */ .bg-blob { position: absolute; border-radius: 50%; filter: blur(80px); z-index: -1; opacity: 0.4; animation: floatBlob 15s infinite alternate ease-in-out; } .blob-1 { top: 10%; left: -10%; width: 500px; height: 500px; background: var(--rose-light); } .blob-2 { top: 40%; right: -5%; width: 400px; height: 400px; background: #FDECEF; animation-delay: -5s; } .blob-3 { bottom: 10%; left: 20%; width: 600px; height: 600px; background: #F9E4D4; animation-delay: -10s; } h1, h2, h3, h4 { font-family: 'Cormorant Garamond', serif; font-weight: 600; } /* --- HERO SECTION (Glassmorphism) --- */ .hero { height: 75vh; background: url('https://images.unsplash.com/photo-1560066984-138dadb4c035?auto=format&fit=crop&w=1920&q=80') center/cover fixed; display: flex; align-items: center; justify-content: center; padding: 0 20px; } .glass-card { background: rgba(255, 255, 255, 0.6); backdrop-filter: blur(12px); -webkit-backdrop-filter: blur(12px); border: 1px solid rgba(255, 255, 255, 0.4); padding: 50px 60px; border-radius: 30px; text-align: center; max-width: 700px; box-shadow: 0 20px 40px rgba(0,0,0,0.1); animation: slideUpFade 1.2s cubic-bezier(0.25, 1, 0.5, 1) forwards; } .glass-card h1 { font-size: 4.5rem; color: var(--charcoal); line-height: 1.1; margin-bottom: 15px; } .glass-card h1 i { color: var(--rose-gold); font-size: 3rem; } .glass-card p { font-size: 1.2rem; color: var(--text-gray); font-weight: 400; } /* --- SECTION 1: SERVICES GALLERY (Animated Images) --- */ .services-section { padding: 100px 20px; max-width: 1300px; margin: 0 auto; text-align: center; } .section-title { font-size: 3rem; margin-bottom: 15px; color: var(--charcoal); } .section-subtitle { font-size: 1.1rem; color: var(--text-gray); margin-bottom: 50px; } .services-grid { display: grid; grid-template-columns: repeat(4, 1fr); gap: 25px; } .service-card { position: relative; height: 380px; border-radius: 20px; overflow: hidden; cursor: pointer; box-shadow: var(--shadow-soft); } .service-card img { width: 100%; height: 100%; object-fit: cover; transition: transform 0.8s ease; } .service-overlay { position: absolute; inset: 0; background: linear-gradient(to top, rgba(44, 44, 44, 0.9), rgba(44, 44, 44, 0.1)); display: flex; flex-direction: column; justify-content: flex-end; padding: 30px 20px; transition: var(--transition); } .service-card h3 { color: var(--white); font-size: 1.8rem; transform: translateY(20px); transition: var(--transition); } .service-card p { color: var(--rose-light); font-size: 1rem; opacity: 0; transform: translateY(20px); transition: var(--transition); margin-top: 5px; } .service-card:hover img { transform: scale(1.1); } .service-card:hover .service-overlay { background: rgba(183, 110, 121, 0.6); } /* Rose Gold Tint */ .service-card:hover h3 { transform: translateY(0); } .service-card:hover p { opacity: 1; transform: translateY(0); transition-delay: 0.1s; } /* --- SECTION 2: BOOKING FORM & INFO --- */ .booking-section { max-width: 1200px; margin: 0 auto 100px; padding: 0 20px; display: grid; grid-template-columns: 1fr 1.5fr; gap: 60px; background: var(--white); border-radius: 40px; box-shadow: var(--shadow-soft); overflow: hidden; } /* Left: Info */ .info-panel { background: var(--charcoal); color: var(--white); padding: 60px 40px; position: relative; overflow: hidden; } .info-panel::before { content: '\f0d4'; /* Spa Lotus icon */ font-family: "Font Awesome 6 Free"; font-weight: 900; position: absolute; bottom: -50px; right: -30px; font-size: 15rem; color: rgba(255,255,255,0.03); transform: rotate(-15deg); } .info-panel h2 { font-size: 2.5rem; margin-bottom: 40px; color: var(--rose-light); } .info-block { margin-bottom: 35px; display: flex; gap: 20px; } .info-block i { font-size: 1.5rem; color: var(--rose-gold); margin-top: 5px; } .info-block h4 { font-size: 1.3rem; margin-bottom: 5px; letter-spacing: 1px; } .info-block p, .info-block li { color: #CCCCCC; font-size: 0.95rem; font-family: 'Jost'; } .hours-list { list-style: none; } .hours-list li { display: flex; justify-content: space-between; margin-bottom: 10px; border-bottom: 1px solid rgba(255,255,255,0.1); padding-bottom: 5px;} /* Right: Elegant Form */ .form-panel { padding: 60px 50px 60px 20px; } .form-panel h2 { font-size: 2.8rem; margin-bottom: 10px; color: var(--charcoal); } .form-row { display: grid; grid-template-columns: 1fr 1fr; gap: 30px; margin-bottom: 30px; } .input-wrap { position: relative; } .input-wrap input, .input-wrap select, .input-wrap textarea { width: 100%; padding: 15px 0; background: transparent; border: none; border-bottom: 1px solid #DDDDDD; font-family: 'Jost', sans-serif; font-size: 1.05rem; color: var(--charcoal); outline: none; transition: var(--transition); } .input-wrap textarea { height: 80px; resize: none; } .input-wrap label { position: absolute; top: 15px; left: 0; color: var(--text-gray); pointer-events: none; transition: var(--transition); } /* Animated Elegant Underline */ .input-wrap::after { content: ''; position: absolute; bottom: 0; left: 50%; width: 0; height: 2px; background: var(--rose-gold); transition: var(--transition); transform: translateX(-50%); } .input-wrap input:focus ~ label, .input-wrap input:valid ~ label, .input-wrap textarea:focus ~ label, .input-wrap textarea:valid ~ label { top: -12px; font-size: 0.85rem; color: var(--rose-gold); font-weight: 500; } .input-wrap input:focus ~ ::after, .input-wrap textarea:focus ~ ::after, .input-wrap select:focus ~ ::after { width: 100%; } /* Select & Date Fixes */ .input-wrap select { color: var(--text-gray); cursor: pointer; } .input-wrap select:focus, .input-wrap select:valid { color: var(--charcoal); } ::-webkit-calendar-picker-indicator { cursor: pointer; filter: opacity(0.5); } /* Submit Button */ .submit-btn { background: var(--charcoal); color: var(--white); border: none; padding: 18px 45px; font-size: 1.1rem; font-family: 'Jost', sans-serif; letter-spacing: 1px; border-radius: 50px; cursor: pointer; transition: var(--transition); margin-top: 10px; display: inline-flex; align-items: center; gap: 10px; box-shadow: 0 10px 20px rgba(44, 44, 44, 0.2); } .submit-btn:hover { background: var(--rose-gold); box-shadow: 0 10px 20px rgba(183, 110, 121, 0.4); transform: translateY(-3px); } /* --- SECTION 3: TESTIMONIALS --- */ .testimonials { background: var(--blush-pink); padding: 80px 20px; text-align: center; margin-bottom: 80px; } .testi-grid { max-width: 1200px; margin: 40px auto 0; display: grid; grid-template-columns: repeat(3, 1fr); gap: 40px; } .testi-card { background: var(--white); padding: 40px 30px; border-radius: 20px; box-shadow: var(--shadow-soft); position: relative; transition: var(--transition); } .testi-card:hover { transform: translateY(-10px); } .testi-card i.fa-quote-left { font-size: 2rem; color: var(--rose-light); margin-bottom: 15px; opacity: 0.5; } .testi-card p { font-style: italic; color: var(--text-gray); margin-bottom: 20px; line-height: 1.6; } .client-info { display: flex; align-items: center; justify-content: center; gap: 15px; } .client-info img { width: 50px; height: 50px; border-radius: 50%; object-fit: cover; } .client-info h4 { margin: 0; font-size: 1.2rem; color: var(--charcoal); } .stars { color: #FFD700; font-size: 0.85rem; } /* --- ANIMATIONS --- */ @keyframes slideUpFade { from { opacity: 0; transform: translateY(50px); } to { opacity: 1; transform: translateY(0); } } @keyframes floatBlob { 0% { transform: translate(0, 0) scale(1); } 100% { transform: translate(50px, 50px) scale(1.1); } } .reveal { opacity: 0; transform: translateY(60px); transition: 1s cubic-bezier(0.25, 1, 0.5, 1); } .reveal.active { opacity: 1; transform: translateY(0); } /* --- RESPONSIVE --- */ @media (max-width: 1024px) { .services-grid { grid-template-columns: repeat(2, 1fr); } .booking-section { grid-template-columns: 1fr; border-radius: 20px; } .testi-grid { grid-template-columns: 1fr; max-width: 600px; } } @media (max-width: 768px) { .glass-card { padding: 40px 20px; } .glass-card h1 { font-size: 3rem; } .services-grid { grid-template-columns: 1fr; } .form-row { grid-template-columns: 1fr; gap: 20px; } .form-panel { padding: 40px 20px; } }
JavaScript
// 1. Scroll Reveal Animation const observer = new IntersectionObserver((entries) => { entries.forEach(entry => { if(entry.isIntersecting) { entry.target.classList.add('active'); } }); }, { threshold: 0.15 }); document.querySelectorAll('.reveal').forEach(el => observer.observe(el)); // 2. Select Dropdown Color Fix document.querySelectorAll('select').forEach(select => { select.addEventListener('change', function() { this.style.color = "var(--charcoal)"; }); }); // 3. Smart Date Picker (Prevent Past Dates) const dateInput = document.getElementById('date'); const today = new Date().toISOString().split('T')[0]; dateInput.setAttribute('min', today); // User cannot select yesterday // 4. Form Submit Premium Animation document.getElementById('bookingForm').addEventListener('submit', function(e) { e.preventDefault(); const btn = document.getElementById('submitBtn'); const originalContent = btn.innerHTML; // Loading state btn.innerHTML = 'Booking Slot... <i class="fas fa-circle-notch fa-spin"></i>'; btn.style.opacity = '0.7'; btn.style.pointerEvents = 'none'; // Simulate Network delay setTimeout(() => { // Success state btn.innerHTML = 'Appointment Confirmed <i class="fas fa-heart"></i>'; btn.style.background = '#0D9488'; // Teal success btn.style.opacity = '1'; this.reset(); document.querySelectorAll('select').forEach(s => s.style.color = "var(--text-gray)"); // Revert after 4 seconds setTimeout(() => { btn.innerHTML = originalContent; btn.style.background = ''; btn.style.pointerEvents = 'auto'; }, 4000); }, 2000); });
Output Preview
Desktop
Mobile
Fullscreen