Project Overview
In this comprehensive tutorial, we'll build a modern, responsive landing page from scratch using HTML and CSS. This project will incorporate all the concepts we've learned: semantic HTML, CSS Grid, Flexbox, responsive design, animations, forms, and accessibility best practices.
Table of Contents
- Project Planning
- Project Structure
- HTML Structure
- CSS Implementation
- Responsive Design
- Animations and Interactions
- Accessibility Features
- Complete Code
- Deployment
Project Planning
What We're Building
A modern SaaS (Software as a Service) landing page for a fictional product called "TaskFlow" - a project management tool.
Page Sections
- Navigation Bar - Fixed header with logo and menu
- Hero Section - Main headline, subheading, CTA button
- Features Section - Key product features with icons
- How It Works - Step-by-step process
- Testimonials - Customer reviews
- Pricing - Pricing plans
- CTA Section - Call to action
- Footer - Links and copyright
Design Goals
- Responsive - Works on mobile, tablet, and desktop
- Accessible - WCAG compliant
- Modern - Clean design with subtle animations
- Performance - Optimized images and CSS
Project Structure
landing-page/ │ ├── index.html # Main HTML file ├── css/ │ └── style.css # All CSS styles ├── js/ │ └── main.js # JavaScript for interactivity ├── images/ │ ├── hero-bg.jpg │ ├── feature-1.svg │ ├── feature-2.svg │ ├── feature-3.svg │ └── avatar-placeholder.jpg └── assets/ └── fonts/ # Custom fonts (if any)
HTML Structure
Complete HTML Code
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <meta name="viewport" content="width=device-width, initial-scale=1.0, user-scalable=yes"> <meta name="description" content="TaskFlow - The ultimate project management tool for modern teams"> <title>TaskFlow | Manage Projects Effortlessly</title> <!-- Preconnect for performance --> <link rel="preconnect" href="https://fonts.googleapis.com"> <link rel="preconnect" href="https://fonts.gstatic.com" crossorigin> <!-- Google Fonts --> <link href="https://fonts.googleapis.com/css2?family=Inter:wght@300;400;500;600;700;800&display=swap" rel="stylesheet"> <!-- Font Awesome Icons (free) --> <link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/font-awesome/6.4.0/css/all.min.css"> <!-- Main CSS --> <link rel="stylesheet" href="css/style.css"> </head> <body> <!-- Skip to main content link for accessibility --> <a href="#main-content" class="skip-link">Skip to main content</a> <!-- Navigation Bar --> <nav class="navbar" aria-label="Main navigation"> <div class="container nav-container"> <div class="logo"> <a href="#home" aria-label="TaskFlow home"> <i class="fas fa-tasks" aria-hidden="true"></i> <span>TaskFlow</span> </a> </div> <button class="mobile-menu-btn" aria-label="Toggle menu" aria-expanded="false"> <i class="fas fa-bars" aria-hidden="true"></i> </button> <ul class="nav-menu" role="list"> <li><a href="#home" class="nav-link active">Home</a></li> <li><a href="#features" class="nav-link">Features</a></li> <li><a href="#how-it-works" class="nav-link">How It Works</a></li> <li><a href="#testimonials" class="nav-link">Testimonials</a></li> <li><a href="#pricing" class="nav-link">Pricing</a></li> <li><a href="#cta" class="nav-link btn-primary btn-small">Get Started</a></li> </ul> </div> </nav> <main id="main-content"> <!-- Hero Section --> <section id="home" class="hero" aria-label="Hero section"> <div class="container hero-container"> <div class="hero-content"> <span class="hero-badge">🚀 Launching Soon</span> <h1 class="hero-title"> Manage Projects <span class="gradient-text">Effortlessly</span> </h1> <p class="hero-description"> TaskFlow helps teams organize, track, and manage their work. From simple to-do lists to complex project workflows, we've got you covered. </p> <div class="hero-buttons"> <a href="#pricing" class="btn btn-primary btn-large">Start Free Trial</a> <a href="#demo" class="btn btn-outline btn-large">Watch Demo</a> </div> <div class="hero-stats"> <div class="stat"> <span class="stat-number">10k+</span> <span class="stat-label">Active Users</span> </div> <div class="stat"> <span class="stat-number">98%</span> <span class="stat-label">Satisfaction</span> </div> <div class="stat"> <span class="stat-number">24/7</span> <span class="stat-label">Support</span> </div> </div> </div> <div class="hero-image"> <img src="https://via.placeholder.com/600x500/4361ee/ffffff?text=TaskFlow+Dashboard" alt="TaskFlow dashboard preview showing task management interface" loading="eager"> </div> </div> </section> <!-- Features Section --> <section id="features" class="features" aria-label="Features"> <div class="container"> <div class="section-header"> <span class="section-tag">Features</span> <h2 class="section-title">Everything You Need to Succeed</h2> <p class="section-description"> Powerful features that help you organize, track, and collaborate on projects. </p> </div> <div class="features-grid"> <div class="feature-card"> <div class="feature-icon"> <i class="fas fa-chart-line" aria-hidden="true"></i> </div> <h3 class="feature-title">Analytics Dashboard</h3> <p class="feature-description"> Get insights into your team's productivity with detailed analytics and reports. </p> </div> <div class="feature-card"> <div class="feature-icon"> <i class="fas fa-users" aria-hidden="true"></i> </div> <h3 class="feature-title">Team Collaboration</h3> <p class="feature-description"> Work together seamlessly with real-time updates and team messaging. </p> </div> <div class="feature-card"> <div class="feature-icon"> <i class="fas fa-mobile-alt" aria-hidden="true"></i> </div> <h3 class="feature-title">Mobile Ready</h3> <p class="feature-description"> Access your projects on the go with our fully responsive mobile app. </p> </div> <div class="feature-card"> <div class="feature-icon"> <i class="fas fa-shield-alt" aria-hidden="true"></i> </div> <h3 class="feature-title">Enterprise Security</h3> <p class="feature-description"> Bank-level encryption and security to protect your data. </p> </div> <div class="feature-card"> <div class="feature-icon"> <i class="fas fa-clock" aria-hidden="true"></i> </div> <h3 class="feature-title">Time Tracking</h3> <p class="feature-description"> Track time spent on tasks and generate detailed timesheets. </p> </div> <div class="feature-card"> <div class="feature-icon"> <i class="fas fa-plug" aria-hidden="true"></i> </div> <h3 class="feature-title">Integrations</h3> <p class="feature-description"> Connect with Slack, GitHub, Google Drive, and 100+ other tools. </p> </div> </div> </div> </section> <!-- How It Works Section --> <section id="how-it-works" class="how-it-works" aria-label="How it works"> <div class="container"> <div class="section-header"> <span class="section-tag">Simple Process</span> <h2 class="section-title">Get Started in 3 Easy Steps</h2> <p class="section-description"> No complex setup. Start managing projects in minutes. </p> </div> <div class="steps-grid"> <div class="step-card"> <div class="step-number">1</div> <div class="step-icon"> <i class="fas fa-user-plus" aria-hidden="true"></i> </div> <h3 class="step-title">Create Account</h3> <p class="step-description"> Sign up for free and set up your workspace in seconds. </p> </div> <div class="step-card"> <div class="step-number">2</div> <div class="step-icon"> <i class="fas fa-folder-open" aria-hidden="true"></i> </div> <h3 class="step-title">Create Project</h3> <p class="step-description"> Add your first project and invite team members to collaborate. </p> </div> <div class="step-card"> <div class="step-number">3</div> <div class="step-icon"> <i class="fas fa-check-circle" aria-hidden="true"></i> </div> <h3 class="step-title">Start Working</h3> <p class="step-description"> Create tasks, assign them, and track progress in real-time. </p> </div> </div> </div> </section> <!-- Testimonials Section --> <section id="testimonials" class="testimonials" aria-label="Customer testimonials"> <div class="container"> <div class="section-header"> <span class="section-tag">Testimonials</span> <h2 class="section-title">Loved by Teams Worldwide</h2> <p class="section-description"> See what our customers have to say about TaskFlow. </p> </div> <div class="testimonials-grid"> <div class="testimonial-card"> <div class="testimonial-rating"> <i class="fas fa-star" aria-hidden="true"></i> <i class="fas fa-star" aria-hidden="true"></i> <i class="fas fa-star" aria-hidden="true"></i> <i class="fas fa-star" aria-hidden="true"></i> <i class="fas fa-star" aria-hidden="true"></i> </div> <p class="testimonial-text"> "TaskFlow has completely transformed how our team works. We're more productive and organized than ever before!" </p> <div class="testimonial-author"> <img src="https://via.placeholder.com/50x50/4361ee/ffffff?text=JD" alt="John Doe avatar" class="author-avatar"> <div class="author-info"> <strong>John Doe</strong> <span>CEO, TechStart</span> </div> </div> </div> <div class="testimonial-card"> <div class="testimonial-rating"> <i class="fas fa-star" aria-hidden="true"></i> <i class="fas fa-star" aria-hidden="true"></i> <i class="fas fa-star" aria-hidden="true"></i> <i class="fas fa-star" aria-hidden="true"></i> <i class="fas fa-star" aria-hidden="true"></i> </div> <p class="testimonial-text"> "The best project management tool we've ever used. The interface is intuitive and the features are powerful." </p> <div class="testimonial-author"> <img src="https://via.placeholder.com/50x50/2ecc71/ffffff?text=JS" alt="Jane Smith avatar" class="author-avatar"> <div class="author-info"> <strong>Jane Smith</strong> <span>Product Manager, InnovateCo</span> </div> </div> </div> <div class="testimonial-card"> <div class="testimonial-rating"> <i class="fas fa-star" aria-hidden="true"></i> <i class="fas fa-star" aria-hidden="true"></i> <i class="fas fa-star" aria-hidden="true"></i> <i class="fas fa-star" aria-hidden="true"></i> <i class="fas fa-star-half-alt" aria-hidden="true"></i> </div> <p class="testimonial-text"> "Excellent customer support and continuous updates. TaskFlow keeps getting better every month!" </p> <div class="testimonial-author"> <img src="https://via.placeholder.com/50x50/e74c3c/ffffff?text=MW" alt="Mike Wilson avatar" class="author-avatar"> <div class="author-info"> <strong>Mike Wilson</strong> <span>Project Lead, DesignHub</span> </div> </div> </div> </div> </div> </section> <!-- Pricing Section --> <section id="pricing" class="pricing" aria-label="Pricing plans"> <div class="container"> <div class="section-header"> <span class="section-tag">Pricing</span> <h2 class="section-title">Simple, Transparent Pricing</h2> <p class="section-description"> Choose the plan that works best for your team. All plans include a 14-day free trial. </p> </div> <div class="pricing-grid"> <div class="pricing-card"> <h3 class="plan-name">Free</h3> <div class="plan-price"> <span class="currency">$</span> <span class="amount">0</span> <span class="period">/month</span> </div> <p class="plan-description">Perfect for individuals and small teams</p> <ul class="plan-features"> <li><i class="fas fa-check" aria-hidden="true"></i> Up to 5 projects</li> <li><i class="fas fa-check" aria-hidden="true"></i> 10 team members</li> <li><i class="fas fa-check" aria-hidden="true"></i> 2GB storage</li> <li><i class="fas fa-check" aria-hidden="true"></i> Basic analytics</li> <li><i class="fas fa-times" aria-hidden="true"></i> Priority support</li> </ul> <a href="#" class="btn btn-outline btn-block">Get Started</a> </div> <div class="pricing-card featured"> <div class="popular-badge">Most Popular</div> <h3 class="plan-name">Pro</h3> <div class="plan-price"> <span class="currency">$</span> <span class="amount">19</span> <span class="period">/month</span> </div> <p class="plan-description">Perfect for growing teams</p> <ul class="plan-features"> <li><i class="fas fa-check" aria-hidden="true"></i> Unlimited projects</li> <li><i class="fas fa-check" aria-hidden="true"></i> Unlimited team members</li> <li><i class="fas fa-check" aria-hidden="true"></i> 50GB storage</li> <li><i class="fas fa-check" aria-hidden="true"></i> Advanced analytics</li> <li><i class="fas fa-check" aria-hidden="true"></i> Priority support</li> </ul> <a href="#" class="btn btn-primary btn-block">Start Free Trial</a> </div> <div class="pricing-card"> <h3 class="plan-name">Enterprise</h3> <div class="plan-price"> <span class="currency">$</span> <span class="amount">49</span> <span class="period">/month</span> </div> <p class="plan-description">For large organizations</p> <ul class="plan-features"> <li><i class="fas fa-check" aria-hidden="true"></i> Unlimited projects</li> <li><i class="fas fa-check" aria-hidden="true"></i> Unlimited team members</li> <li><i class="fas fa-check" aria-hidden="true"></i> 500GB storage</li> <li><i class="fas fa-check" aria-hidden="true"></i> Custom analytics</li> <li><i class="fas fa-check" aria-hidden="true"></i> 24/7 dedicated support</li> </ul> <a href="#" class="btn btn-outline btn-block">Contact Sales</a> </div> </div> </div> </section> <!-- CTA Section --> <section id="cta" class="cta" aria-label="Call to action"> <div class="container"> <div class="cta-content"> <h2 class="cta-title">Ready to Boost Your Productivity?</h2> <p class="cta-description"> Join thousands of teams already using TaskFlow to manage their work. </p> <form class="cta-form" action="#" method="post"> <div class="form-group"> <label for="cta-email" class="sr-only">Email address</label> <input type="email" id="cta-email" placeholder="Enter your email" required> <button type="submit" class="btn btn-primary">Start Free Trial</button> </div> <p class="form-note">No credit card required. Free for 14 days.</p> </form> </div> </div> </section> </main> <!-- Footer --> <footer class="footer" role="contentinfo"> <div class="container"> <div class="footer-grid"> <div class="footer-brand"> <div class="logo"> <i class="fas fa-tasks" aria-hidden="true"></i> <span>TaskFlow</span> </div> <p>Making project management simple and effective.</p> <div class="social-links"> <a href="#" aria-label="Follow us on Twitter"><i class="fab fa-twitter"></i></a> <a href="#" aria-label="Follow us on LinkedIn"><i class="fab fa-linkedin"></i></a> <a href="#" aria-label="Follow us on GitHub"><i class="fab fa-github"></i></a> </div> </div> <div class="footer-links"> <h4>Product</h4> <ul> <li><a href="#features">Features</a></li> <li><a href="#pricing">Pricing</a></li> <li><a href="#">Integrations</a></li> <li><a href="#">Roadmap</a></li> </ul> </div> <div class="footer-links"> <h4>Company</h4> <ul> <li><a href="#">About Us</a></li> <li><a href="#">Blog</a></li> <li><a href="#">Careers</a></li> <li><a href="#">Press</a></li> </ul> </div> <div class="footer-links"> <h4>Support</h4> <ul> <li><a href="#">Help Center</a></li> <li><a href="#">Contact Us</a></li> <li><a href="#">Privacy Policy</a></li> <li><a href="#">Terms of Service</a></li> </ul> </div> </div> <div class="footer-bottom"> <p>© 2024 TaskFlow. All rights reserved.</p> </div> </div> </footer> <!-- JavaScript --> <script src="js/main.js"></script> </body> </html>
CSS Implementation
Complete CSS Code (css/style.css)
/* ============================================ CSS Variables & Reset ============================================ */ :root { /* Colors */ --primary: #4361ee; --primary-dark: #3a56d4; --primary-light: #e0e7ff; --secondary: #2ecc71; --secondary-dark: #27ae60; --accent: #f39c12; --danger: #e74c3c; --dark: #1a2c3e; --dark-light: #2c3e50; --gray: #6c757d; --gray-light: #e9ecef; --gray-lighter: #f8f9fa; --white: #ffffff; /* Typography */ --font-family: 'Inter', -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, sans-serif; --font-size-xs: 0.75rem; --font-size-sm: 0.875rem; --font-size-base: 1rem; --font-size-lg: 1.125rem; --font-size-xl: 1.25rem; --font-size-2xl: 1.5rem; --font-size-3xl: 1.875rem; --font-size-4xl: 2.25rem; --font-size-5xl: 3rem; /* Spacing */ --spacing-xs: 0.5rem; --spacing-sm: 0.75rem; --spacing-md: 1rem; --spacing-lg: 1.5rem; --spacing-xl: 2rem; --spacing-2xl: 3rem; --spacing-3xl: 4rem; --spacing-4xl: 6rem; /* Border Radius */ --radius-sm: 0.25rem; --radius-md: 0.5rem; --radius-lg: 0.75rem; --radius-xl: 1rem; --radius-full: 9999px; /* Shadows */ --shadow-sm: 0 1px 2px 0 rgba(0, 0, 0, 0.05); --shadow-md: 0 4px 6px -1px rgba(0, 0, 0, 0.1); --shadow-lg: 0 10px 15px -3px rgba(0, 0, 0, 0.1); --shadow-xl: 0 20px 25px -5px rgba(0, 0, 0, 0.1); /* Transitions */ --transition-fast: 150ms; --transition-base: 300ms; --transition-slow: 500ms; } /* Reset */ * { margin: 0; padding: 0; box-sizing: border-box; } html { scroll-behavior: smooth; font-size: 16px; } body { font-family: var(--font-family); color: var(--dark); line-height: 1.5; overflow-x: hidden; background: var(--white); } /* Typography */ h1, h2, h3, h4, h5, h6 { font-weight: 700; line-height: 1.2; margin-bottom: var(--spacing-md); } h1 { font-size: var(--font-size-5xl); } h2 { font-size: var(--font-size-4xl); } h3 { font-size: var(--font-size-2xl); } h4 { font-size: var(--font-size-xl); } p { margin-bottom: var(--spacing-md); color: var(--gray); } a { text-decoration: none; color: var(--primary); transition: color var(--transition-fast); } a:hover { color: var(--primary-dark); } img { max-width: 100%; height: auto; } /* Utility Classes */ .container { max-width: 1280px; margin: 0 auto; padding: 0 var(--spacing-xl); } .sr-only { position: absolute; width: 1px; height: 1px; padding: 0; margin: -1px; overflow: hidden; clip: rect(0, 0, 0, 0); white-space: nowrap; border: 0; } .skip-link { position: absolute; top: -40px; left: 0; background: var(--primary); color: white; padding: var(--spacing-sm) var(--spacing-md); text-decoration: none; z-index: 100; } .skip-link:focus { top: 0; } /* Buttons */ .btn { display: inline-flex; align-items: center; justify-content: center; padding: var(--spacing-sm) var(--spacing-xl); font-weight: 600; border-radius: var(--radius-md); transition: all var(--transition-base); cursor: pointer; text-decoration: none; border: 2px solid transparent; font-size: var(--font-size-base); } .btn-primary { background: var(--primary); color: var(--white); } .btn-primary:hover { background: var(--primary-dark); transform: translateY(-2px); box-shadow: var(--shadow-md); } .btn-outline { background: transparent; border-color: var(--primary); color: var(--primary); } .btn-outline:hover { background: var(--primary); color: var(--white); } .btn-large { padding: var(--spacing-md) var(--spacing-2xl); font-size: var(--font-size-lg); } .btn-small { padding: var(--spacing-xs) var(--spacing-md); font-size: var(--font-size-sm); } .btn-block { width: 100%; justify-content: center; } /* Section Header */ .section-header { text-align: center; max-width: 800px; margin: 0 auto var(--spacing-3xl); } .section-tag { display: inline-block; font-size: var(--font-size-sm); font-weight: 600; text-transform: uppercase; letter-spacing: 1px; color: var(--primary); background: var(--primary-light); padding: var(--spacing-xs) var(--spacing-md); border-radius: var(--radius-full); margin-bottom: var(--spacing-md); } .section-title { margin-bottom: var(--spacing-md); } .section-description { font-size: var(--font-size-lg); max-width: 600px; margin: 0 auto; } /* ============================================ Navigation ============================================ */ .navbar { position: fixed; top: 0; left: 0; right: 0; background: var(--white); box-shadow: var(--shadow-sm); z-index: 1000; padding: var(--spacing-md) 0; transition: all var(--transition-base); } .nav-container { display: flex; justify-content: space-between; align-items: center; } .logo a { display: flex; align-items: center; gap: var(--spacing-xs); font-size: var(--font-size-xl); font-weight: 800; color: var(--dark); } .logo i { color: var(--primary); font-size: 1.5rem; } .nav-menu { display: flex; gap: var(--spacing-lg); list-style: none; align-items: center; } .nav-link { color: var(--dark); font-weight: 500; transition: color var(--transition-fast); } .nav-link:hover, .nav-link.active { color: var(--primary); } .mobile-menu-btn { display: none; background: none; border: none; font-size: 1.5rem; cursor: pointer; color: var(--dark); } /* ============================================ Hero Section ============================================ */ .hero { padding: calc(80px + var(--spacing-4xl)) 0 var(--spacing-4xl); background: linear-gradient(135deg, var(--white) 0%, var(--gray-lighter) 100%); } .hero-container { display: grid; grid-template-columns: 1fr 1fr; gap: var(--spacing-3xl); align-items: center; } .hero-badge { display: inline-block; background: var(--primary-light); color: var(--primary); padding: var(--spacing-xs) var(--spacing-md); border-radius: var(--radius-full); font-size: var(--font-size-sm); font-weight: 600; margin-bottom: var(--spacing-md); } .hero-title { margin-bottom: var(--spacing-md); } .gradient-text { background: linear-gradient(135deg, var(--primary), var(--secondary)); -webkit-background-clip: text; background-clip: text; color: transparent; } .hero-description { font-size: var(--font-size-lg); margin-bottom: var(--spacing-xl); } .hero-buttons { display: flex; gap: var(--spacing-md); margin-bottom: var(--spacing-2xl); } .hero-stats { display: flex; gap: var(--spacing-2xl); } .stat { text-align: center; } .stat-number { display: block; font-size: var(--font-size-2xl); font-weight: 800; color: var(--dark); } .stat-label { font-size: var(--font-size-sm); color: var(--gray); } .hero-image img { width: 100%; height: auto; border-radius: var(--radius-lg); box-shadow: var(--shadow-xl); } /* ============================================ Features Section ============================================ */ .features { padding: var(--spacing-4xl) 0; background: var(--white); } .features-grid { display: grid; grid-template-columns: repeat(auto-fit, minmax(300px, 1fr)); gap: var(--spacing-2xl); } .feature-card { text-align: center; padding: var(--spacing-xl); background: var(--white); border-radius: var(--radius-lg); transition: all var(--transition-base); border: 1px solid var(--gray-light); } .feature-card:hover { transform: translateY(-5px); box-shadow: var(--shadow-lg); border-color: transparent; } .feature-icon { width: 70px; height: 70px; background: var(--primary-light); border-radius: var(--radius-lg); display: flex; align-items: center; justify-content: center; margin: 0 auto var(--spacing-md); } .feature-icon i { font-size: 2rem; color: var(--primary); } .feature-title { margin-bottom: var(--spacing-sm); } .feature-description { color: var(--gray); } /* ============================================ How It Works Section ============================================ */ .how-it-works { padding: var(--spacing-4xl) 0; background: var(--gray-lighter); } .steps-grid { display: grid; grid-template-columns: repeat(auto-fit, minmax(250px, 1fr)); gap: var(--spacing-2xl); text-align: center; } .step-card { position: relative; padding: var(--spacing-xl); background: var(--white); border-radius: var(--radius-lg); box-shadow: var(--shadow-sm); transition: transform var(--transition-base); } .step-card:hover { transform: translateY(-5px); box-shadow: var(--shadow-md); } .step-number { position: absolute; top: -20px; left: 50%; transform: translateX(-50%); width: 40px; height: 40px; background: var(--primary); color: var(--white); border-radius: var(--radius-full); display: flex; align-items: center; justify-content: center; font-weight: 700; font-size: var(--font-size-lg); } .step-icon { font-size: 3rem; color: var(--primary); margin-bottom: var(--spacing-md); } .step-title { margin-bottom: var(--spacing-sm); } .step-description { color: var(--gray); } /* ============================================ Testimonials Section ============================================ */ .testimonials { padding: var(--spacing-4xl) 0; background: var(--white); } .testimonials-grid { display: grid; grid-template-columns: repeat(auto-fit, minmax(350px, 1fr)); gap: var(--spacing-xl); } .testimonial-card { background: var(--white); border-radius: var(--radius-lg); padding: var(--spacing-xl); border: 1px solid var(--gray-light); transition: all var(--transition-base); } .testimonial-card:hover { transform: translateY(-5px); box-shadow: var(--shadow-lg); } .testimonial-rating { margin-bottom: var(--spacing-md); color: var(--accent); } .testimonial-text { font-style: italic; margin-bottom: var(--spacing-lg); color: var(--dark); } .testimonial-author { display: flex; align-items: center; gap: var(--spacing-md); } .author-avatar { width: 50px; height: 50px; border-radius: var(--radius-full); object-fit: cover; } .author-info strong { display: block; color: var(--dark); } .author-info span { font-size: var(--font-size-sm); color: var(--gray); } /* ============================================ Pricing Section ============================================ */ .pricing { padding: var(--spacing-4xl) 0; background: var(--gray-lighter); } .pricing-grid { display: grid; grid-template-columns: repeat(auto-fit, minmax(300px, 1fr)); gap: var(--spacing-2xl); align-items: stretch; } .pricing-card { background: var(--white); border-radius: var(--radius-lg); padding: var(--spacing-xl); text-align: center; position: relative; transition: all var(--transition-base); border: 1px solid var(--gray-light); } .pricing-card.featured { transform: scale(1.05); border-color: var(--primary); box-shadow: var(--shadow-lg); z-index: 1; } .popular-badge { position: absolute; top: -12px; left: 50%; transform: translateX(-50%); background: var(--primary); color: var(--white); padding: var(--spacing-xs) var(--spacing-md); border-radius: var(--radius-full); font-size: var(--font-size-sm); font-weight: 600; white-space: nowrap; } .plan-name { font-size: var(--font-size-2xl); margin-bottom: var(--spacing-md); } .plan-price { margin-bottom: var(--spacing-md); } .currency { font-size: var(--font-size-xl); vertical-align: top; line-height: 1.5; } .amount { font-size: var(--font-size-5xl); font-weight: 800; } .period { font-size: var(--font-size-base); color: var(--gray); } .plan-description { margin-bottom: var(--spacing-lg); font-size: var(--font-size-sm); } .plan-features { list-style: none; margin-bottom: var(--spacing-xl); } .plan-features li { padding: var(--spacing-xs) 0; color: var(--gray); } .plan-features i { margin-right: var(--spacing-sm); } .plan-features i.fa-check { color: var(--secondary); } .plan-features i.fa-times { color: var(--danger); } /* ============================================ CTA Section ============================================ */ .cta { padding: var(--spacing-4xl) 0; background: linear-gradient(135deg, var(--primary) 0%, var(--primary-dark) 100%); color: var(--white); text-align: center; } .cta-title { font-size: var(--font-size-4xl); margin-bottom: var(--spacing-md); color: var(--white); } .cta-description { font-size: var(--font-size-lg); margin-bottom: var(--spacing-xl); color: rgba(255, 255, 255, 0.9); } .cta-form .form-group { display: flex; gap: var(--spacing-md); max-width: 500px; margin: 0 auto var(--spacing-md); } .cta-form input { flex: 1; padding: var(--spacing-md) var(--spacing-lg); border: none; border-radius: var(--radius-md); font-size: var(--font-size-base); outline: none; } .cta-form input:focus { outline: 2px solid var(--secondary); } .form-note { font-size: var(--font-size-sm); opacity: 0.8; } /* ============================================ Footer ============================================ */ .footer { background: var(--dark); color: var(--white); padding: var(--spacing-3xl) 0 var(--spacing-xl); } .footer-grid { display: grid; grid-template-columns: 2fr 1fr 1fr 1fr; gap: var(--spacing-2xl); margin-bottom: var(--spacing-2xl); } .footer-brand .logo a { color: var(--white); margin-bottom: var(--spacing-md); display: inline-flex; } .footer-brand p { color: rgba(255, 255, 255, 0.7); margin-bottom: var(--spacing-md); } .social-links { display: flex; gap: var(--spacing-md); } .social-links a { color: rgba(255, 255, 255, 0.7); font-size: 1.25rem; transition: color var(--transition-fast); } .social-links a:hover { color: var(--white); } .footer-links h4 { color: var(--white); margin-bottom: var(--spacing-md); font-size: var(--font-size-lg); } .footer-links ul { list-style: none; } .footer-links li { margin-bottom: var(--spacing-sm); } .footer-links a { color: rgba(255, 255, 255, 0.7); transition: color var(--transition-fast); } .footer-links a:hover { color: var(--white); } .footer-bottom { text-align: center; padding-top: var(--spacing-xl); border-top: 1px solid rgba(255, 255, 255, 0.1); color: rgba(255, 255, 255, 0.5); font-size: var(--font-size-sm); } /* ============================================ Responsive Design ============================================ */ @media (max-width: 1024px) { :root { --font-size-5xl: 2.5rem; --font-size-4xl: 2rem; --spacing-4xl: 4rem; } .hero-container { grid-template-columns: 1fr; text-align: center; } .hero-buttons { justify-content: center; } .hero-stats { justify-content: center; } .hero-image { max-width: 500px; margin: 0 auto; } .footer-grid { grid-template-columns: repeat(2, 1fr); } } @media (max-width: 768px) { :root { --font-size-5xl: 2rem; --font-size-4xl: 1.75rem; --spacing-4xl: 3rem; --spacing-3xl: 2rem; } .container { padding: 0 var(--spacing-md); } /* Mobile Navigation */ .mobile-menu-btn { display: block; } .nav-menu { position: fixed; top: 70px; left: -100%; width: 100%; height: calc(100vh - 70px); background: var(--white); flex-direction: column; padding: var(--spacing-xl); transition: left var(--transition-base); box-shadow: var(--shadow-lg); } .nav-menu.active { left: 0; } .hero-buttons { flex-direction: column; } .hero-stats { flex-wrap: wrap; } .pricing-card.featured { transform: scale(1); } .footer-grid { grid-template-columns: 1fr; text-align: center; } .social-links { justify-content: center; } .cta-form .form-group { flex-direction: column; } .cta-form button { width: 100%; } } /* ============================================ Animations ============================================ */ @keyframes fadeInUp { from { opacity: 0; transform: translateY(30px); } to { opacity: 1; transform: translateY(0); } } .hero-content { animation: fadeInUp 0.8s ease-out; } .feature-card { animation: fadeInUp 0.6s ease-out; animation-fill-mode: both; } .feature-card:nth-child(1) { animation-delay: 0.1s; } .feature-card:nth-child(2) { animation-delay: 0.2s; } .feature-card:nth-child(3) { animation-delay: 0.3s; } .feature-card:nth-child(4) { animation-delay: 0.4s; } .feature-card:nth-child(5) { animation-delay: 0.5s; } .feature-card:nth-child(6) { animation-delay: 0.6s; } .step-card { animation: fadeInUp 0.6s ease-out; animation-fill-mode: both; } .step-card:nth-child(1) { animation-delay: 0.1s; } .step-card:nth-child(2) { animation-delay: 0.2s; } .step-card:nth-child(3) { animation-delay: 0.3s; } .testimonial-card { animation: fadeInUp 0.6s ease-out; animation-fill-mode: both; } .testimonial-card:nth-child(1) { animation-delay: 0.1s; } .testimonial-card:nth-child(2) { animation-delay: 0.2s; } .testimonial-card:nth-child(3) { animation-delay: 0.3s; } .pricing-card { animation: fadeInUp 0.6s ease-out; animation-fill-mode: both; } .pricing-card:nth-child(1) { animation-delay: 0.1s; } .pricing-card:nth-child(2) { animation-delay: 0.2s; } .pricing-card:nth-child(3) { animation-delay: 0.3s; } JavaScript for Interactivity
Complete JavaScript Code (js/main.js)
// ============================================ // Mobile Menu Toggle // ============================================ document.addEventListener('DOMContentLoaded', function() { const mobileMenuBtn = document.querySelector('.mobile-menu-btn'); const navMenu = document.querySelector('.nav-menu'); if (mobileMenuBtn) { mobileMenuBtn.addEventListener('click', function() { const expanded = this.getAttribute('aria-expanded') === 'true'; this.setAttribute('aria-expanded', !expanded); navMenu.classList.toggle('active'); }); } // Close menu when clicking outside document.addEventListener('click', function(event) { if (navMenu && navMenu.classList.contains('active')) { if (!navMenu.contains(event.target) && !mobileMenuBtn.contains(event.target)) { navMenu.classList.remove('active'); mobileMenuBtn.setAttribute('aria-expanded', 'false'); } } }); // Close menu when clicking a link const navLinks = document.querySelectorAll('.nav-link'); navLinks.forEach(link => { link.addEventListener('click', () => { if (navMenu.classList.contains('active')) { navMenu.classList.remove('active'); mobileMenuBtn.setAttribute('aria-expanded', 'false'); } }); }); }); // ============================================ // Active Link on Scroll // ============================================ const sections = document.querySelectorAll('section[id]'); const navLinksActive = document.querySelectorAll('.nav-link'); function updateActiveLink() { const scrollPosition = window.scrollY + 100; sections.forEach(section => { const sectionTop = section.offsetTop; const sectionBottom = sectionTop + section.offsetHeight; if (scrollPosition >= sectionTop && scrollPosition < sectionBottom) { const currentId = section.getAttribute('id'); navLinksActive.forEach(link => { link.classList.remove('active'); if (link.getAttribute('href') === `#${currentId}`) { link.classList.add('active'); } }); } }); } window.addEventListener('scroll', updateActiveLink); window.addEventListener('load', updateActiveLink); // ============================================ // Navbar Background Change on Scroll // ============================================ const navbar = document.querySelector('.navbar'); function updateNavbarBackground() { if (window.scrollY > 50) { navbar.style.boxShadow = '0 4px 6px -1px rgba(0, 0, 0, 0.1)'; navbar.style.background = 'rgba(255, 255, 255, 0.98)'; } else { navbar.style.boxShadow = '0 1px 2px 0 rgba(0, 0, 0, 0.05)'; navbar.style.background = 'rgba(255, 255, 255, 1)'; } } window.addEventListener('scroll', updateNavbarBackground); updateNavbarBackground(); // ============================================ // Smooth Scroll for Anchor Links // ============================================ document.querySelectorAll('a[href^="#"]').forEach(anchor => { anchor.addEventListener('click', function(e) { const targetId = this.getAttribute('href'); if (targetId !== '#' && targetId !== '#home' && targetId !== '') { const targetElement = document.querySelector(targetId); if (targetElement) { e.preventDefault(); targetElement.scrollIntoView({ behavior: 'smooth', block: 'start' }); } } }); }); // ============================================ // CTA Form Validation // ============================================ const ctaForm = document.querySelector('.cta-form'); if (ctaForm) { ctaForm.addEventListener('submit', function(e) { e.preventDefault(); const emailInput = this.querySelector('input[type="email"]'); const email = emailInput.value.trim(); if (!email) { showMessage('Please enter your email address', 'error'); emailInput.focus(); return; } const emailRegex = /^[^\s@]+@[^\s@]+\.[^\s@]+$/; if (!emailRegex.test(email)) { showMessage('Please enter a valid email address', 'error'); emailInput.focus(); return; } // Simulate form submission const submitBtn = this.querySelector('button'); const originalText = submitBtn.textContent; submitBtn.textContent = 'Sending...'; submitBtn.disabled = true; setTimeout(() => { showMessage('Thank you! Check your email to get started.', 'success'); emailInput.value = ''; submitBtn.textContent = originalText; submitBtn.disabled = false; }, 1500); }); } // Message helper function showMessage(message, type) { const existingMessage = document.querySelector('.form-message'); if (existingMessage) { existingMessage.remove(); } const messageDiv = document.createElement('div'); messageDiv.className = `form-message ${type}`; messageDiv.textContent = message; messageDiv.style.cssText = ` margin-top: 1rem; padding: 0.75rem; border-radius: 0.5rem; font-size: 0.875rem; text-align: center; ${type === 'error' ? 'background: #fee2e2; color: #dc2626;' : 'background: #d1fae5; color: #065f46;'} `; const ctaForm = document.querySelector('.cta-form'); ctaForm.appendChild(messageDiv); setTimeout(() => { messageDiv.remove(); }, 5000); } // ============================================ // Intersection Observer for Animations // ============================================ const animateElements = document.querySelectorAll('.feature-card, .step-card, .testimonial-card, .pricing-card'); const observer = new IntersectionObserver((entries) => { entries.forEach(entry => { if (entry.isIntersecting) { entry.target.style.opacity = '1'; entry.target.style.transform = 'translateY(0)'; } }); }, { threshold: 0.1, rootMargin: '50px' }); animateElements.forEach(element => { element.style.opacity = '0'; element.style.transform = 'translateY(20px)'; element.style.transition = 'opacity 0.6s ease, transform 0.6s ease'; observer.observe(element); }); // ============================================ // Header Image Lazy Loading (optional) // ============================================ const images = document.querySelectorAll('img[data-src]'); const imageObserver = new IntersectionObserver((entries) => { entries.forEach(entry => { if (entry.isIntersecting) { const img = entry.target; img.src = img.dataset.src; img.removeAttribute('data-src'); imageObserver.unobserve(img); } }); }); images.forEach(img => imageObserver.observe(img)); Deployment
How to Deploy Your Landing Page
- Local Testing
# Navigate to your project folder cd landing-page # Use a local server (Python 3) python -m http.server 8000 # Or use Live Server in VS Code
- Hosting Options
- GitHub Pages (free): Push to GitHub and enable Pages
- Netlify (free): Drag and drop your folder
- Vercel (free): Connect your Git repository
- Cloudflare Pages (free): Easy deployment
- Optimization Checklist
- [ ] Compress images (use tools like TinyPNG)
- [ ] Minify CSS and JS
- [ ] Add proper meta tags
- [ ] Test on multiple browsers
- [ ] Validate HTML and CSS
- [ ] Test accessibility
- [ ] Check performance (Lighthouse)
Conclusion
Congratulations! You've built a complete, modern, responsive landing page with:
Features Implemented
- ✅ Semantic HTML5 structure
- ✅ CSS Grid and Flexbox layouts
- ✅ Responsive design for all devices
- ✅ Mobile-first navigation
- ✅ CSS animations and transitions
- ✅ Accessible components
- ✅ Form validation
- ✅ Smooth scrolling
- ✅ Active link highlighting
- ✅ Interactive elements
Skills Practiced
- HTML structure and semantics
- CSS styling and layout
- Responsive design principles
- JavaScript interactivity
- Accessibility best practices
- Performance optimization
- Cross-browser compatibility
Next Steps
- Customize the content and colors to match your brand
- Replace placeholder images with real assets
- Add real functionality with a backend (optional)
- Optimize for SEO with meta tags and structured data
- Deploy your site to share with the world!
This landing page project demonstrates all the key concepts of modern web development. You can use it as a template for your own projects or continue enhancing it with more advanced features like animations, dark mode, or CMS integration.
HTML & CSS Learning Guides, Exercises, Projects, Design Systems, Accessibility & Performance (Related to HTML & CSS Development)
HTML & CSS Quiz – Comprehensive Assessment:
This quiz evaluates core knowledge of HTML and CSS including structure, styling, layout, forms, and responsive design. It is used to test practical understanding of front-end fundamentals and identify skill levels in web development.
Read more: https://macronepal.com/bash/html-and-css-quiz-comprehensive-assessment/
Complete Guide to HTML & CSS Tooling & Automation:
This guide explains tools and automation workflows used in modern web development, such as preprocessors, build tools, and task runners that improve efficiency in HTML and CSS projects.
Read more: https://macronepal.com/bash/complete-guide-to-html-and-css-tooling-automation/
Complete HTML & CSS Exercises:
A collection of practical exercises designed to strengthen HTML and CSS skills through hands-on coding tasks, covering layout, styling, and responsive design concepts.
Read more: https://macronepal.com/bash/complete-html-and-css-exercises/
Complete HTML & CSS Landing Page Project:
This project focuses on building a full landing page using HTML and CSS, helping learners understand real-world website structure, layout design, and UI development.
Read more: https://macronepal.com/bash/complete-html-css-landing-page-project/
HTML & CSS Debugging and Testing Guide:
This guide teaches how to identify and fix errors in HTML and CSS code, along with testing techniques to ensure websites work correctly across browsers.
Read more: https://macronepal.com/bash/complete-guide-to-html-and-css-debugging-testing/
HTML & CSS Design Systems Guide:
A design system approach helps maintain consistency in UI development using reusable components, styles, and patterns across web projects.
Read more: https://macronepal.com/html-and-css/complete-guide-to-html-and-css-design-systems/
HTML & CSS Accessibility (A11y) Guide:
This guide focuses on making websites accessible for all users, including proper semantic HTML, keyboard navigation, alt text, and screen reader support.
Read more: https://macronepal.com/bash/complete-guide-to-html-css-accessibility-a11y/
HTML & CSS Performance Guide:
This topic explains optimization techniques such as reducing file size, improving loading speed, and writing efficient HTML and CSS for better website performance.
Read more: https://macronepal.com/bash/complete-guide-to-html-and-css-performance/
HTML & CSS Design Systems (Advanced Overview):
Design systems help developers maintain scalable and consistent UI components across large projects using structured HTML and reusable CSS patterns.
Read more: https://macronepal.com/html-and-css/complete-guide-to-html-and-css-design-systems/