Duration: 120 minutes | Difficulty: Advanced | Prerequisites: All previous lessons completed
By the end of this lesson, you will be able to:
Youβll build a complete responsive website for a fictional digital agency called βPixelCraft Studioβ. This project integrates all CSS concepts from the previous 9 lessons.
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>PixelCraft Studio - Digital Agency</title>
<link rel="stylesheet" href="styles.css">
<link rel="preconnect" href="https://fonts.googleapis.com">
<link rel="preconnect" href="https://fonts.gstatic.com" crossorigin>
<link href="https://fonts.googleapis.com/css2?family=Inter:wght@300;400;500;600;700&display=swap" rel="stylesheet">
</head>
<body>
<!-- Navigation -->
<header class="header">
<nav class="navbar">
<div class="nav-container">
<div class="nav-brand">
<h1>PixelCraft</h1>
</div>
<button class="nav-toggle" aria-label="Toggle navigation">
<span></span>
<span></span>
<span></span>
</button>
<ul class="nav-menu">
<li><a href="#home" class="nav-link">Home</a></li>
<li><a href="#services" class="nav-link">Services</a></li>
<li><a href="#about" class="nav-link">About</a></li>
<li><a href="#portfolio" class="nav-link">Portfolio</a></li>
<li><a href="#contact" class="nav-link">Contact</a></li>
</ul>
</div>
</nav>
</header>
<!-- Hero Section -->
<section id="home" class="hero">
<div class="hero-container">
<div class="hero-content">
<h1 class="hero-title">
We Create Digital
<span class="highlight">Experiences</span>
</h1>
<p class="hero-subtitle">
Transform your ideas into stunning digital realities with our expert design and development team.
</p>
<div class="hero-cta">
<a href="#contact" class="btn btn-primary">Get Started</a>
<a href="#portfolio" class="btn btn-outline">View Work</a>
</div>
</div>
<div class="hero-visual">
<div class="hero-shape"></div>
</div>
</div>
</section>
<!-- Services Section -->
<section id="services" class="services">
<div class="container">
<div class="section-header">
<h2 class="section-title">Our Services</h2>
<p class="section-subtitle">We offer comprehensive digital solutions</p>
</div>
<div class="services-grid">
<div class="service-card">
<div class="service-icon">π¨</div>
<h3>UI/UX Design</h3>
<p>Creating intuitive and beautiful user interfaces that convert visitors into customers.</p>
</div>
<div class="service-card">
<div class="service-icon">π»</div>
<h3>Web Development</h3>
<p>Building fast, responsive websites using modern technologies and best practices.</p>
</div>
<div class="service-card">
<div class="service-icon">π±</div>
<h3>Mobile Apps</h3>
<p>Developing native and cross-platform mobile applications for iOS and Android.</p>
</div>
<div class="service-card">
<div class="service-icon">π</div>
<h3>Digital Marketing</h3>
<p>Boosting your online presence with SEO, social media, and digital advertising.</p>
</div>
</div>
</div>
</section>
<!-- About Section -->
<section id="about" class="about">
<div class="container">
<div class="about-content">
<div class="about-text">
<h2>About PixelCraft</h2>
<p>We're a passionate team of designers and developers dedicated to creating exceptional digital experiences. With over 5 years in the industry, we've helped countless businesses establish their online presence.</p>
<div class="stats">
<div class="stat-item">
<span class="stat-number">150+</span>
<span class="stat-label">Projects Completed</span>
</div>
<div class="stat-item">
<span class="stat-number">50+</span>
<span class="stat-label">Happy Clients</span>
</div>
<div class="stat-item">
<span class="stat-number">5+</span>
<span class="stat-label">Years Experience</span>
</div>
</div>
</div>
<div class="team-grid">
<div class="team-member">
<div class="member-avatar">π¨βπ»</div>
<h4>Alex Johnson</h4>
<p>Lead Designer</p>
</div>
<div class="team-member">
<div class="member-avatar">π©βπ»</div>
<h4>Sarah Chen</h4>
<p>Frontend Developer</p>
</div>
<div class="team-member">
<div class="member-avatar">π¨βπΌ</div>
<h4>Mike Rodriguez</h4>
<p>Project Manager</p>
</div>
</div>
</div>
</div>
</section>
<!-- Portfolio Section -->
<section id="portfolio" class="portfolio">
<div class="container">
<div class="section-header">
<h2 class="section-title">Our Portfolio</h2>
<p class="section-subtitle">Recent projects we're proud of</p>
</div>
<div class="portfolio-grid">
<div class="portfolio-item">
<div class="portfolio-image">
<div class="placeholder-image"></div>
</div>
<div class="portfolio-overlay">
<h4>E-commerce Platform</h4>
<p>Modern shopping experience</p>
</div>
</div>
<!-- More portfolio items... -->
</div>
</div>
</section>
<!-- Contact Section -->
<section id="contact" class="contact">
<div class="container">
<div class="contact-content">
<div class="contact-info">
<h2>Let's Work Together</h2>
<p>Ready to start your next project? Get in touch with us today.</p>
<div class="contact-details">
<div class="contact-item">
<span class="contact-icon">π§</span>
<span>hello@pixelcraft.com</span>
</div>
<div class="contact-item">
<span class="contact-icon">π±</span>
<span>+1 (555) 123-4567</span>
</div>
</div>
</div>
<form class="contact-form">
<div class="form-row">
<input type="text" placeholder="Your Name" required>
<input type="email" placeholder="Your Email" required>
</div>
<input type="text" placeholder="Subject" required>
<textarea placeholder="Your Message" required></textarea>
<button type="submit" class="btn btn-primary">Send Message</button>
</form>
</div>
</div>
</section>
<!-- Footer -->
<footer class="footer">
<div class="container">
<div class="footer-content">
<div class="footer-brand">
<h3>PixelCraft</h3>
<p>Creating digital experiences that matter.</p>
</div>
<div class="footer-links">
<div class="footer-column">
<h4>Services</h4>
<ul>
<li><a href="#services">UI/UX Design</a></li>
<li><a href="#services">Development</a></li>
<li><a href="#services">Mobile Apps</a></li>
</ul>
</div>
<div class="footer-column">
<h4>Company</h4>
<ul>
<li><a href="#about">About Us</a></li>
<li><a href="#portfolio">Portfolio</a></li>
<li><a href="#contact">Contact</a></li>
</ul>
</div>
</div>
<div class="footer-social">
<h4>Follow Us</h4>
<div class="social-links">
<a href="#" class="social-link">π</a>
<a href="#" class="social-link">π¦</a>
<a href="#" class="social-link">π·</a>
<a href="#" class="social-link">πΌ</a>
</div>
</div>
</div>
<div class="footer-bottom">
<p>© 2025 PixelCraft Studio. All rights reserved.</p>
</div>
</div>
</footer>
<script src="script.js"></script>
</body>
</html>
/* CSS Custom Properties */
:root {
--primary-color: #6366f1;
--primary-dark: #4f46e5;
--secondary-color: #ec4899;
--accent-color: #06b6d4;
--success-color: #10b981;
--warning-color: #f59e0b;
--error-color: #ef4444;
--text-primary: #0f172a;
--text-secondary: #475569;
--text-muted: #64748b;
--text-light: #cbd5e1;
--bg-primary: #ffffff;
--bg-secondary: #f8fafc;
--bg-dark: #1e293b;
--border-color: #e2e8f0;
--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);
--font-family: 'Inter', system-ui, -apple-system, sans-serif;
--font-mono: 'Fira Code', Monaco, 'Courier New', monospace;
--container-max-width: 1200px;
--section-padding: 5rem 0;
--border-radius: 0.75rem;
--transition: all 0.3s cubic-bezier(0.4, 0, 0.2, 1);
}
/* Reset and Base Styles */
* {
margin: 0;
padding: 0;
box-sizing: border-box;
}
html {
scroll-behavior: smooth;
}
body {
font-family: var(--font-family);
line-height: 1.6;
color: var(--text-primary);
background: var(--bg-primary);
}
.container {
max-width: var(--container-max-width);
margin: 0 auto;
padding: 0 1.5rem;
}
/* Typography */
h1, h2, h3, h4, h5, h6 {
font-weight: 600;
line-height: 1.2;
margin-bottom: 0.5em;
}
h1 { font-size: clamp(2rem, 5vw, 3.5rem); }
h2 { font-size: clamp(1.75rem, 4vw, 2.5rem); }
h3 { font-size: clamp(1.25rem, 3vw, 1.75rem); }
p {
margin-bottom: 1rem;
color: var(--text-secondary);
}
/* Button Styles */
.btn {
display: inline-flex;
align-items: center;
gap: 0.5rem;
padding: 0.875rem 1.5rem;
border-radius: var(--border-radius);
font-weight: 500;
text-decoration: none;
transition: var(--transition);
cursor: pointer;
border: 2px solid transparent;
font-size: 1rem;
}
.btn-primary {
background: var(--primary-color);
color: white;
}
.btn-primary:hover {
background: var(--primary-dark);
transform: translateY(-2px);
box-shadow: var(--shadow-lg);
}
.btn-outline {
background: transparent;
color: var(--primary-color);
border-color: var(--primary-color);
}
.btn-outline:hover {
background: var(--primary-color);
color: white;
}
/* Header and Navigation */
.header {
position: fixed;
top: 0;
width: 100%;
background: rgba(255, 255, 255, 0.95);
backdrop-filter: blur(10px);
border-bottom: 1px solid var(--border-color);
z-index: 1000;
transition: var(--transition);
}
.navbar {
padding: 1rem 0;
}
.nav-container {
display: flex;
align-items: center;
justify-content: space-between;
max-width: var(--container-max-width);
margin: 0 auto;
padding: 0 1.5rem;
}
.nav-brand h1 {
background: linear-gradient(135deg, var(--primary-color), var(--secondary-color));
-webkit-background-clip: text;
-webkit-text-fill-color: transparent;
background-clip: text;
font-size: 1.75rem;
margin: 0;
}
.nav-menu {
display: flex;
list-style: none;
gap: 2rem;
margin: 0;
padding: 0;
}
.nav-link {
color: var(--text-primary);
text-decoration: none;
font-weight: 500;
position: relative;
transition: var(--transition);
}
.nav-link::after {
content: '';
position: absolute;
bottom: -4px;
left: 0;
width: 0;
height: 2px;
background: var(--primary-color);
transition: var(--transition);
}
.nav-link:hover::after {
width: 100%;
}
.nav-toggle {
display: none;
flex-direction: column;
background: none;
border: none;
cursor: pointer;
gap: 4px;
}
.nav-toggle span {
width: 25px;
height: 3px;
background: var(--text-primary);
transition: var(--transition);
}
/* Hero Section */
.hero {
padding: 8rem 0 6rem;
background: linear-gradient(135deg, var(--bg-secondary) 0%, rgba(99, 102, 241, 0.05) 100%);
overflow: hidden;
}
.hero-container {
display: grid;
grid-template-columns: 1fr 1fr;
align-items: center;
gap: 4rem;
max-width: var(--container-max-width);
margin: 0 auto;
padding: 0 1.5rem;
}
.hero-title {
margin-bottom: 1.5rem;
}
.highlight {
background: linear-gradient(135deg, var(--primary-color), var(--secondary-color));
-webkit-background-clip: text;
-webkit-text-fill-color: transparent;
background-clip: text;
}
.hero-subtitle {
font-size: 1.25rem;
margin-bottom: 2rem;
max-width: 500px;
}
.hero-cta {
display: flex;
gap: 1rem;
flex-wrap: wrap;
}
.hero-visual {
position: relative;
height: 400px;
}
.hero-shape {
width: 300px;
height: 300px;
background: linear-gradient(135deg, var(--primary-color), var(--secondary-color));
border-radius: 50% 20% 50% 20%;
position: absolute;
top: 50%;
left: 50%;
transform: translate(-50%, -50%);
animation: float 6s ease-in-out infinite;
}
@keyframes float {
0%, 100% { transform: translate(-50%, -50%) rotate(0deg); }
50% { transform: translate(-50%, -60%) rotate(180deg); }
}
/* Services Section */
.services {
padding: var(--section-padding);
}
.section-header {
text-align: center;
margin-bottom: 4rem;
}
.section-subtitle {
font-size: 1.125rem;
max-width: 600px;
margin: 0 auto;
}
.services-grid {
display: grid;
grid-template-columns: repeat(auto-fit, minmax(280px, 1fr));
gap: 2rem;
}
.service-card {
background: var(--bg-primary);
padding: 2.5rem;
border-radius: var(--border-radius);
box-shadow: var(--shadow-md);
text-align: center;
transition: var(--transition);
border: 1px solid var(--border-color);
}
.service-card:hover {
transform: translateY(-8px);
box-shadow: var(--shadow-xl);
}
.service-icon {
font-size: 3rem;
margin-bottom: 1.5rem;
display: block;
}
.service-card h3 {
margin-bottom: 1rem;
color: var(--text-primary);
}
/* About Section */
.about {
padding: var(--section-padding);
background: var(--bg-secondary);
}
.about-content {
display: grid;
grid-template-columns: 1fr 1fr;
gap: 4rem;
align-items: start;
}
.stats {
display: flex;
gap: 2rem;
margin-top: 2rem;
}
.stat-item {
text-align: center;
}
.stat-number {
display: block;
font-size: 2rem;
font-weight: 700;
color: var(--primary-color);
}
.stat-label {
font-size: 0.875rem;
color: var(--text-muted);
}
.team-grid {
display: grid;
grid-template-columns: repeat(auto-fit, minmax(200px, 1fr));
gap: 1.5rem;
}
.team-member {
background: var(--bg-primary);
padding: 1.5rem;
border-radius: var(--border-radius);
text-align: center;
box-shadow: var(--shadow-sm);
}
.member-avatar {
font-size: 3rem;
margin-bottom: 1rem;
}
/* Portfolio Section */
.portfolio {
padding: var(--section-padding);
}
.portfolio-grid {
display: grid;
grid-template-columns: repeat(auto-fit, minmax(350px, 1fr));
gap: 2rem;
}
.portfolio-item {
position: relative;
border-radius: var(--border-radius);
overflow: hidden;
box-shadow: var(--shadow-md);
cursor: pointer;
}
.portfolio-image {
height: 250px;
background: var(--bg-secondary);
}
.placeholder-image {
width: 100%;
height: 100%;
background: linear-gradient(45deg, var(--primary-color), var(--secondary-color));
opacity: 0.1;
}
.portfolio-overlay {
position: absolute;
top: 0;
left: 0;
right: 0;
bottom: 0;
background: linear-gradient(to bottom, transparent, rgba(0,0,0,0.8));
color: white;
display: flex;
flex-direction: column;
justify-content: flex-end;
padding: 2rem;
opacity: 0;
transition: var(--transition);
}
.portfolio-item:hover .portfolio-overlay {
opacity: 1;
}
/* Contact Section */
.contact {
padding: var(--section-padding);
background: var(--bg-secondary);
}
.contact-content {
display: grid;
grid-template-columns: 1fr 1fr;
gap: 4rem;
align-items: start;
}
.contact-details {
margin-top: 2rem;
}
.contact-item {
display: flex;
align-items: center;
gap: 1rem;
margin-bottom: 1rem;
}
.contact-icon {
font-size: 1.25rem;
}
.contact-form {
background: var(--bg-primary);
padding: 2rem;
border-radius: var(--border-radius);
box-shadow: var(--shadow-md);
}
.form-row {
display: grid;
grid-template-columns: 1fr 1fr;
gap: 1rem;
margin-bottom: 1rem;
}
.contact-form input,
.contact-form textarea {
width: 100%;
padding: 1rem;
border: 2px solid var(--border-color);
border-radius: var(--border-radius);
font-family: inherit;
transition: var(--transition);
margin-bottom: 1rem;
}
.contact-form input:focus,
.contact-form textarea:focus {
outline: none;
border-color: var(--primary-color);
box-shadow: 0 0 0 3px rgba(99, 102, 241, 0.1);
}
.contact-form textarea {
min-height: 120px;
resize: vertical;
}
/* Footer */
.footer {
background: var(--bg-dark);
color: var(--text-light);
padding: 3rem 0 1rem;
}
.footer-content {
display: grid;
grid-template-columns: 2fr 1fr 1fr 1fr;
gap: 2rem;
margin-bottom: 2rem;
}
.footer-brand h3 {
color: white;
margin-bottom: 1rem;
}
.footer-column h4 {
color: white;
margin-bottom: 1rem;
font-size: 1rem;
}
.footer-column ul {
list-style: none;
}
.footer-column ul li {
margin-bottom: 0.5rem;
}
.footer-column ul li a {
color: var(--text-light);
text-decoration: none;
transition: var(--transition);
}
.footer-column ul li a:hover {
color: white;
}
.social-links {
display: flex;
gap: 1rem;
}
.social-link {
display: flex;
align-items: center;
justify-content: center;
width: 40px;
height: 40px;
background: rgba(255, 255, 255, 0.1);
border-radius: 50%;
text-decoration: none;
transition: var(--transition);
}
.social-link:hover {
background: var(--primary-color);
transform: translateY(-2px);
}
.footer-bottom {
text-align: center;
padding-top: 2rem;
border-top: 1px solid rgba(255, 255, 255, 0.1);
}
/* Responsive Design */
@media (max-width: 768px) {
.nav-menu {
position: fixed;
left: -100%;
top: 70px;
flex-direction: column;
background-color: white;
width: 100%;
text-align: center;
transition: 0.3s;
box-shadow: var(--shadow-lg);
padding: 2rem 0;
}
.nav-menu.active {
left: 0;
}
.nav-toggle {
display: flex;
}
.hero-container {
grid-template-columns: 1fr;
text-align: center;
gap: 2rem;
}
.hero-visual {
order: -1;
height: 300px;
}
.about-content {
grid-template-columns: 1fr;
gap: 2rem;
}
.contact-content {
grid-template-columns: 1fr;
gap: 2rem;
}
.form-row {
grid-template-columns: 1fr;
}
.footer-content {
grid-template-columns: 1fr;
text-align: center;
}
.stats {
justify-content: center;
}
.hero-cta {
justify-content: center;
}
}
// Mobile Navigation Toggle
const navToggle = document.querySelector('.nav-toggle');
const navMenu = document.querySelector('.nav-menu');
navToggle.addEventListener('click', () => {
navMenu.classList.toggle('active');
});
// Close mobile menu when clicking on a link
document.querySelectorAll('.nav-link').forEach(link => {
link.addEventListener('click', () => {
navMenu.classList.remove('active');
});
});
// Smooth scrolling for anchor links
document.querySelectorAll('a[href^="#"]').forEach(anchor => {
anchor.addEventListener('click', function (e) {
e.preventDefault();
const target = document.querySelector(this.getAttribute('href'));
if (target) {
target.scrollIntoView({
behavior: 'smooth',
block: 'start'
});
}
});
});
// Header background on scroll
window.addEventListener('scroll', () => {
const header = document.querySelector('.header');
if (window.scrollY > 100) {
header.style.background = 'rgba(255, 255, 255, 0.98)';
header.style.backdropFilter = 'blur(15px)';
} else {
header.style.background = 'rgba(255, 255, 255, 0.95)';
header.style.backdropFilter = 'blur(10px)';
}
});
// Form submission
const contactForm = document.querySelector('.contact-form');
contactForm.addEventListener('submit', function(e) {
e.preventDefault();
// Simple form validation and submission simulation
const formData = new FormData(this);
// Simulate form submission
const submitBtn = this.querySelector('button[type="submit"]');
const originalText = submitBtn.textContent;
submitBtn.textContent = 'Sending...';
submitBtn.disabled = true;
setTimeout(() => {
alert('Message sent successfully! We\'ll get back to you soon.');
this.reset();
submitBtn.textContent = originalText;
submitBtn.disabled = false;
}, 2000);
});
// Animate elements on scroll
const observerOptions = {
threshold: 0.1,
rootMargin: '0px 0px -50px 0px'
};
const observer = new IntersectionObserver(function(entries) {
entries.forEach(entry => {
if (entry.isIntersecting) {
entry.target.style.opacity = '1';
entry.target.style.transform = 'translateY(0)';
}
});
}, observerOptions);
// Observe elements for animation
document.querySelectorAll('.service-card, .team-member, .portfolio-item').forEach(el => {
el.style.opacity = '0';
el.style.transform = 'translateY(30px)';
el.style.transition = 'opacity 0.6s ease, transform 0.6s ease';
observer.observe(el);
});
Congratulations on completing the CSS Mastery course! Youβve built a complete, professional website using modern CSS techniques. This project demonstrates your ability to:
Continue practicing these skills and exploring new CSS features like CSS Grid subgrid, container queries, and CSS layers to stay current with web development trends.
This capstone project showcases everything youβve learned. Be proud of your accomplishment and continue building amazing web experiences!