CSS
CSS Final Project
Build the complete WanderLust Travel website using everything you've learned across 39 lessons of CSS mastery.
Time to put it all together. You've learned selectors, layouts, animations, and responsive design. Now we'll build the complete WanderLust Travel website from scratch, combining every concept into one cohesive project that looks professional and works beautifully on any device.Project Overview
The final WanderLust website consists of four connected pages: a stunning homepage with hero animations, a destinations gallery using CSS Grid, a booking form with custom styling, and an about page showcasing the team. Each page demonstrates different CSS techniques while maintaining consistent branding.Hero + Navigation
Grid Gallery
Form Styling
Team Cards
Each page uses different CSS techniques while sharing the same design system
Homepage Structure
The homepage serves as the centerpiece, featuring a full-screen hero section with gradient overlays, smooth scrolling navigation, and animated call-to-action buttons. The layout usesflexbox for the header and CSS Grid for the features section.
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>WanderLust Travel - Explore the World</title>
<style>
/* Global reset and typography */
* {
margin: 0;
padding: 0;
box-sizing: border-box;
}
body {
font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', roboto, sans-serif;
line-height: 1.6;
color: #0f172a;
}
/* Header navigation with flexbox */
.header {
position: fixed;
top: 0;
width: 100%;
background: rgba(15, 23, 42, 0.95);
backdrop-filter: blur(10px);
z-index: 1000;
transition: all 0.3s ease;
}
.nav {
display: flex;
justify-content: space-between;
align-items: center;
padding: 1rem 2rem;
max-width: 1200px;
margin: 0 auto;
}
.logo {
font-size: 1.5rem;
font-weight: 900;
color: #0ea5e9;
text-decoration: none;
}
.nav-links {
display: flex;
list-style: none;
gap: 2rem;
}
.nav-links a {
color: #f8fafc;
text-decoration: none;
transition: color 0.3s ease;
}
.nav-links a:hover {
color: #0ea5e9;
}
/* Hero section with gradient overlay */
.hero {
height: 100vh;
background: linear-gradient(135deg, rgba(14, 165, 233, 0.8), rgba(249, 115, 22, 0.8)),
linear-gradient(45deg, #0f172a, #1e293b);
display: flex;
align-items: center;
justify-content: center;
text-align: center;
color: white;
}
.hero-content h1 {
font-size: 3.5rem;
font-weight: 900;
margin-bottom: 1rem;
animation: slideUp 1s ease-out;
}
.hero-content p {
font-size: 1.25rem;
margin-bottom: 2rem;
opacity: 0.9;
animation: slideUp 1s ease-out 0.2s both;
}
.cta-button {
background: linear-gradient(45deg, #f97316, #ea580c);
color: white;
padding: 1rem 2rem;
border: none;
border-radius: 50px;
font-size: 1.1rem;
font-weight: 700;
cursor: pointer;
transition: all 0.3s ease;
animation: slideUp 1s ease-out 0.4s both;
}
.cta-button:hover {
transform: translateY(-2px);
box-shadow: 0 10px 25px rgba(249, 115, 22, 0.3);
}
/* Features section with CSS Grid */
.features {
padding: 5rem 2rem;
max-width: 1200px;
margin: 0 auto;
}
.features h2 {
text-align: center;
font-size: 2.5rem;
margin-bottom: 3rem;
color: #0f172a;
}
.features-grid {
display: grid;
grid-template-columns: repeat(auto-fit, minmax(300px, 1fr));
gap: 2rem;
}
.feature-card {
background: white;
padding: 2rem;
border-radius: 16px;
box-shadow: 0 4px 6px rgba(0, 0, 0, 0.1);
transition: all 0.3s ease;
border: 1px solid #e2e8f0;
}
.feature-card:hover {
transform: translateY(-5px);
box-shadow: 0 20px 40px rgba(0, 0, 0, 0.1);
}
.feature-card h3 {
color: #0ea5e9;
font-size: 1.5rem;
margin-bottom: 1rem;
}
/* Animations */
@keyframes slideUp {
from {
opacity: 0;
transform: translateY(30px);
}
to {
opacity: 1;
transform: translateY(0);
}
}
/* Responsive design */
@media (max-width: 768px) {
.hero-content h1 {
font-size: 2.5rem;
}
.nav-links {
display: none;
}
.features {
padding: 3rem 1rem;
}
}
</style>
</head>
<body>
<header class="header">
<nav class="nav">
<a href="#" class="logo">WanderLust</a>
<ul class="nav-links">
<li><a href="#">Home</a></li>
<li><a href="#">Destinations</a></li>
<li><a href="#">Booking</a></li>
<li><a href="#">About</a></li>
</ul>
</nav>
</header>
<section class="hero">
<div class="hero-content">
<h1>Explore the World</h1>
<p>Discover amazing destinations and create unforgettable memories</p>
<button class="cta-button">Start Your Journey</button>
</div>
</section>
<section class="features">
<h2>Why Choose WanderLust?</h2>
<div class="features-grid">
<div class="feature-card">
<h3>Expert Guides</h3>
<p>Our experienced guides know every hidden gem and local secret to make your trip extraordinary.</p>
</div>
<div class="feature-card">
<h3>Best Prices</h3>
<p>We guarantee the best prices on all destinations with our price-match promise.</p>
</div>
<div class="feature-card">
<h3>24/7 Support</h3>
<p>Round-the-clock customer support ensures your peace of mind throughout your journey.</p>
</div>
</div>
</section>
</body>
</html>What just happened?
The homepage combines a fixed navigation with backdrop blur, animated hero section using CSS keyframes, and responsive grid cards that lift on hover. Try this: resize the browser window to see the mobile layout adapt automatically.
Destinations Gallery Page
The destinations page showcases CSS Grid at its finest, creating a masonry-style layout where each destination card has different heights based on content. Grid-template-columns withrepeat(auto-fit, minmax(320px, 1fr)) ensures the layout adapts perfectly to any screen size.
/* Destinations page styling */
.destinations-hero {
background: linear-gradient(135deg, #0ea5e9, #7c3aed);
color: white;
text-align: center;
padding: 8rem 2rem 4rem;
}
.destinations-hero h1 {
font-size: 3rem;
font-weight: 900;
margin-bottom: 1rem;
}
.destinations-grid {
display: grid;
grid-template-columns: repeat(auto-fit, minmax(320px, 1fr));
gap: 2rem;
padding: 4rem 2rem;
max-width: 1200px;
margin: 0 auto;
}
.destination-card {
background: white;
border-radius: 16px;
overflow: hidden;
box-shadow: 0 4px 20px rgba(0, 0, 0, 0.1);
transition: all 0.3s cubic-bezier(0.4, 0, 0.2, 1);
}
.destination-card:hover {
transform: translateY(-8px);
box-shadow: 0 20px 40px rgba(0, 0, 0, 0.15);
}
.card-image {
height: 200px;
background: linear-gradient(45deg, #0ea5e9, #f97316);
display: flex;
align-items: center;
justify-content: center;
color: white;
font-size: 1.2rem;
font-weight: 700;
}
.card-content {
padding: 1.5rem;
}
.card-title {
font-size: 1.5rem;
font-weight: 800;
color: #0f172a;
margin-bottom: 0.5rem;
}
.card-price {
color: #f97316;
font-size: 1.25rem;
font-weight: 700;
margin: 1rem 0;
}
.card-description {
color: #64748b;
line-height: 1.6;
margin-bottom: 1.5rem;
}
.book-button {
background: #0ea5e9;
color: white;
border: none;
padding: 0.75rem 1.5rem;
border-radius: 8px;
font-weight: 600;
cursor: pointer;
transition: background 0.3s ease;
width: 100%;
}
.book-button:hover {
background: #0284c7;
}
/* Filter buttons */
.filter-buttons {
display: flex;
justify-content: center;
gap: 1rem;
padding: 2rem;
flex-wrap: wrap;
}
.filter-btn {
background: white;
border: 2px solid #e2e8f0;
padding: 0.75rem 1.5rem;
border-radius: 50px;
font-weight: 600;
cursor: pointer;
transition: all 0.3s ease;
}
.filter-btn.active,
.filter-btn:hover {
background: #0ea5e9;
color: white;
border-color: #0ea5e9;
}Booking Form Styling
The booking form demonstrates advanced form styling with custom input designs, floating labels, and interactive validation states. Each form element usesfocus-within pseudo-classes for smooth label animations and transition properties for polished interactions.
/* Booking form advanced styling */
.booking-form {
max-width: 600px;
margin: 4rem auto;
padding: 3rem;
background: white;
border-radius: 20px;
box-shadow: 0 10px 40px rgba(0, 0, 0, 0.1);
}
.form-group {
position: relative;
margin-bottom: 2rem;
}
.form-input {
width: 100%;
padding: 1.25rem 1rem 0.75rem;
border: 2px solid #e2e8f0;
border-radius: 12px;
font-size: 1rem;
background: transparent;
transition: all 0.3s ease;
}
.form-input:focus {
outline: none;
border-color: #0ea5e9;
box-shadow: 0 0 0 3px rgba(14, 165, 233, 0.1);
}
.form-label {
position: absolute;
top: 1.25rem;
left: 1rem;
color: #64748b;
font-size: 1rem;
pointer-events: none;
transition: all 0.3s ease;
background: white;
padding: 0 0.5rem;
}
.form-input:focus + .form-label,
.form-input:not(:placeholder-shown) + .form-label {
top: -0.5rem;
left: 0.75rem;
font-size: 0.875rem;
color: #0ea5e9;
font-weight: 600;
}
.form-select {
appearance: none;
background-image: url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' fill='none' viewBox='0 0 20 20'%3e%3cpath stroke='%236b7280' stroke-linecap='round' stroke-linejoin='round' stroke-width='1.5' d='M6 8l4 4 4-4'/%3e%3c/svg%3e");
background-position: right 1rem center;
background-repeat: no-repeat;
background-size: 1rem;
padding-right: 3rem;
}
.form-row {
display: grid;
grid-template-columns: 1fr 1fr;
gap: 1rem;
}
.submit-button {
width: 100%;
background: linear-gradient(45deg, #0ea5e9, #7c3aed);
color: white;
padding: 1.25rem 2rem;
border: none;
border-radius: 12px;
font-size: 1.1rem;
font-weight: 700;
cursor: pointer;
transition: all 0.3s ease;
margin-top: 1rem;
}
.submit-button:hover {
transform: translateY(-2px);
box-shadow: 0 10px 30px rgba(14, 165, 233, 0.3);
}
/* Form validation states */
.form-input:valid {
border-color: #15803d;
}
.form-input:invalid:not(:placeholder-shown) {
border-color: #dc2626;
}
@media (max-width: 768px) {
.form-row {
grid-template-columns: 1fr;
}
.booking-form {
margin: 2rem 1rem;
padding: 2rem;
}
}Performance Optimization
The final project includes several performance optimizations that make the website load faster and run smoother. These techniques reduce CSS file size, improve rendering speed, and create a better user experience across all devices.CSS Minification
Remove whitespace, comments, and unnecessary characters to reduce file size by 30-40%
Critical CSS
Inline above-the-fold styles to eliminate render-blocking requests
CSS Grid vs Flexbox
Use Grid for 2D layouts, Flexbox for 1D alignment — better performance
Hardware Acceleration
Use transform and opacity for animations to leverage GPU processing
Best Practices Checklist
Your final WanderLust website should follow these professional development standards that separate amateur projects from production-ready websites. Each practice improves maintainability, accessibility, and user experience.| Category | Requirement | Impact |
|---|---|---|
| Accessibility | Minimum 4.5:1 color contrast ratio | Screen reader compatibility |
| Performance | CSS file under 50KB compressed | Faster load times on mobile |
| Responsive | Works on 320px to 2560px widths | Universal device support |
| Browser Support | Works in Chrome, Firefox, Safari, Edge | Reaches 95% of users |
Project Deployment
Once your WanderLust website is complete, deployment makes it live on the internet for real users. GitHub Pages provides free hosting for static websites, while services like Netlify and Vercel offer automatic deployments from your code repository. The deployment process involves connecting your HTML and CSS files to a hosting service, configuring custom domains if desired, and setting up automatic updates when you make changes. Your final project demonstrates mastery of CSS fundamentals, layout systems, responsive design, animations, and professional development practices. This complete WanderLust Travel website represents everything you've learned across 39 lessons: from basic selectors and box model concepts to advanced Grid layouts and animation techniques. The project showcases real-world application of CSS skills that employers value and users appreciate.Quiz
1. The WanderLust homepage uses which CSS layout combination for optimal performance and flexibility?
2. The floating label animation in the booking form is created using which CSS technique?
3. Which performance optimization technique is most important for smooth card hover animations on the destinations page?
Up Next: CSS Course Wrap-Up
Celebrate your CSS mastery and discover the next steps in your web development journey.