stephdemo / gallery.html
aworkimmersive's picture
Create an Artist website, portal with gallery of images, about and contact. Mdoern artistic design site, with animations of background,. For the artist '
480cff5 verified
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Gallery | Stephanie Trujillo</title>
<link rel="icon" type="image/x-icon" href="/static/favicon.ico">
<script src="https://cdn.tailwindcss.com"></script>
<link href="https://unpkg.com/aos@2.3.1/dist/aos.css" rel="stylesheet">
<script src="https://unpkg.com/aos@2.3.1/dist/aos.js"></script>
<script src="https://cdn.jsdelivr.net/npm/feather-icons/dist/feather.min.js"></script>
<script src="https://unpkg.com/feather-icons"></script>
<style>
.artwork-card {
transition: all 0.3s ease;
overflow: hidden;
}
.artwork-card:hover {
transform: translateY(-5px);
box-shadow: 0 20px 25px -5px rgba(0, 0, 0, 0.1), 0 10px 10px -5px rgba(0, 0, 0, 0.04);
}
.artwork-image {
transition: transform 0.5s ease;
}
.artwork-card:hover .artwork-image {
transform: scale(1.05);
}
.nav-link {
position: relative;
}
.nav-link:after {
content: '';
position: absolute;
width: 0;
height: 2px;
bottom: 0;
left: 0;
background-color: currentColor;
transition: width 0.3s ease;
}
.nav-link:hover:after {
width: 100%;
}
.filter-btn {
transition: all 0.3s ease;
}
.filter-btn.active {
background-color: white;
color: black;
}
</style>
</head>
<body class="bg-gray-900 text-gray-100 font-sans">
<!-- Navigation -->
<nav class="py-6 px-4 md:px-12 lg:px-24 flex justify-between items-center">
<a href="index.html" class="text-2xl font-bold tracking-tight">Stephanie Trujillo</a>
<div class="hidden md:flex space-x-8">
<a href="gallery.html" class="nav-link font-medium">Gallery</a>
<a href="about.html" class="nav-link">About</a>
<a href="contact.html" class="nav-link">Contact</a>
</div>
<button class="md:hidden focus:outline-none" id="mobile-menu-button">
<i data-feather="menu"></i>
</button>
</nav>
<!-- Mobile Menu -->
<div id="mobile-menu" class="hidden fixed inset-0 bg-black bg-opacity-90 z-50 flex flex-col items-center justify-center space-y-8">
<button id="close-menu" class="absolute top-6 right-6 p-2">
<i data-feather="x"></i>
</button>
<a href="gallery.html" class="text-2xl">Gallery</a>
<a href="about.html" class="text-2xl">About</a>
<a href="contact.html" class="text-2xl">Contact</a>
</div>
<!-- Gallery Section -->
<main class="py-12 px-4 md:px-12 lg:px-24">
<div class="max-w-6xl mx-auto">
<h1 class="text-4xl font-bold mb-8 text-center" data-aos="fade-up">Art Gallery</h1>
<!-- Filter Controls -->
<div class="flex flex-wrap justify-center gap-3 mb-12" data-aos="fade-up" data-aos-delay="100">
<button class="filter-btn px-4 py-2 rounded-full border border-white active" data-filter="all">All Works</button>
<button class="filter-btn px-4 py-2 rounded-full border border-white" data-filter="painting">Paintings</button>
<button class="filter-btn px-4 py-2 rounded-full border border-white" data-filter="mixed">Mixed Media</button>
<button class="filter-btn px-4 py-2 rounded-full border border-white" data-filter="digital">Digital</button>
</div>
<!-- Gallery Grid -->
<div class="grid grid-cols-1 sm:grid-cols-2 lg:grid-cols-3 gap-8">
<!-- Painting 1 -->
<div class="artwork-card rounded-lg overflow-hidden" data-category="painting" data-aos="fade-up">
<div class="overflow-hidden">
<img src="http://static.photos/abstract/640x360/4" alt="Painting 1" class="w-full h-64 object-cover artwork-image">
</div>
<div class="p-4">
<h3 class="text-xl font-semibold">Vibrant Horizons</h3>
<p class="text-gray-400">Acrylic on canvas, 2023</p>
<p class="mt-2 text-gray-300">A study of color transitions and emotional landscapes</p>
</div>
</div>
<!-- Mixed Media 1 -->
<div class="artwork-card rounded-lg overflow-hidden" data-category="mixed" data-aos="fade-up" data-aos-delay="100">
<div class="overflow-hidden">
<img src="http://static.photos/abstract/640x360/5" alt="Mixed Media 1" class="w-full h-64 object-cover artwork-image">
</div>
<div class="p-4">
<h3 class="text-xl font-semibold">Urban Fragments</h3>
<p class="text-gray-400">Mixed media, 2022</p>
<p class="mt-2 text-gray-300">Collage of city textures and forgotten memories</p>
</div>
</div>
<!-- Digital 1 -->
<div class="artwork-card rounded-lg overflow-hidden" data-category="digital" data-aos="fade-up" data-aos-delay="200">
<div class="overflow-hidden">
<img src="http://static.photos/abstract/640x360/6" alt="Digital 1" class="w-full h-64 object-cover artwork-image">
</div>
<div class="p-4">
<h3 class="text-xl font-semibold">Digital Dreams</h3>
<p class="text-gray-400">Digital art, 2023</p>
<p class="mt-2 text-gray-300">Exploring the boundaries between reality and imagination</p>
</div>
</div>
<!-- Painting 2 -->
<div class="artwork-card rounded-lg overflow-hidden" data-category="painting" data-aos="fade-up">
<div class="overflow-hidden">
<img src="http://static.photos/abstract/640x360/7" alt="Painting 2" class="w-full h-64 object-cover artwork-image">
</div>
<div class="p-4">
<h3 class="text-xl font-semibold">Silent Echoes</h3>
<p class="text-gray-400">Oil on canvas, 2022</p>
<p class="mt-2 text-gray-300">Subtle textures and muted tones create a meditative space</p>
</div>
</div>
<!-- Mixed Media 2 -->
<div class="artwork-card rounded-lg overflow-hidden" data-category="mixed" data-aos="fade-up" data-aos-delay="100">
<div class="overflow-hidden">
<img src="http://static.photos/abstract/640x360/8" alt="Mixed Media 2" class="w-full h-64 object-cover artwork-image">
</div>
<div class="p-4">
<h3 class="text-xl font-semibold">Textured Memories</h3>
<p class="text-gray-400">Mixed media, 2023</p>
<p class="mt-2 text-gray-300">Layered materials create depth and narrative</p>
</div>
</div>
<!-- Digital 2 -->
<div class="artwork-card rounded-lg overflow-hidden" data-category="digital" data-aos="fade-up" data-aos-delay="200">
<div class="overflow-hidden">
<img src="http://static.photos/abstract/640x360/9" alt="Digital 2" class="w-full h-64 object-cover artwork-image">
</div>
<div class="p-4">
<h3 class="text-xl font-semibold">Virtual Realms</h3>
<p class="text-gray-400">Digital art, 2023</p>
<p class="mt-2 text-gray-300">Exploring digital spaces as new artistic frontiers</p>
</div>
</div>
</div>
<!-- Pagination -->
<div class="flex justify-center mt-16" data-aos="fade-up">
<nav class="flex items-center space-x-2">
<button class="px-4 py-2 border border-gray-700 rounded-md hover:bg-gray-800 transition">Previous</button>
<button class="px-4 py-2 bg-white text-gray-900 rounded-md font-medium">1</button>
<button class="px-4 py-2 border border-gray-700 rounded-md hover:bg-gray-800 transition">2</button>
<button class="px-4 py-2 border border-gray-700 rounded-md hover:bg-gray-800 transition">3</button>
<button class="px-4 py-2 border border-gray-700 rounded-md hover:bg-gray-800 transition">Next</button>
</nav>
</div>
</div>
</main>
<!-- Footer -->
<footer class="py-8 px-4 md:px-12 lg:px-24 border-t border-gray-800">
<div class="flex flex-col md:flex-row justify-between items-center">
<p>&copy; 2023 Stephanie Trujillo. All rights reserved.</p>
<div class="flex space-x-6 mt-4 md:mt-0">
<a href="#" aria-label="Instagram"><i data-feather="instagram"></i></a>
<a href="#" aria-label="Twitter"><i data-feather="twitter"></i></a>
<a href="#" aria-label="Facebook"><i data-feather="facebook"></i></a>
</div>
</div>
</footer>
<script>
AOS.init({
duration: 800,
easing: 'ease-in-out',
once: true
});
feather.replace();
// Mobile menu toggle
const mobileMenuButton = document.getElementById('mobile-menu-button');
const mobileMenu = document.getElementById('mobile-menu');
const closeMenuButton = document.getElementById('close-menu');
mobileMenuButton.addEventListener('click', () => {
mobileMenu.classList.remove('hidden');
mobileMenu.classList.add('flex');
});
closeMenuButton.addEventListener('click', () => {
mobileMenu.classList.add('hidden');
mobileMenu.classList.remove('flex');
});
// Filter functionality
const filterButtons = document.querySelectorAll('.filter-btn');
const artworkCards = document.querySelectorAll('.artwork-card');
filterButtons.forEach(button => {
button.addEventListener('click', () => {
// Update active state
filterButtons.forEach(btn => btn.classList.remove('active'));
button.classList.add('active');
const filterValue = button.getAttribute('data-filter');
artworkCards.forEach(card => {
if (filterValue === 'all' || card.getAttribute('data-category') === filterValue) {
card.style.display = 'block';
} else {
card.style.display = 'none';
}
});
});
});
</script>
</body>
</html>