Red Image Slider 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>Premium Red Image Slider</title> <link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/font-awesome/6.4.0/css/all.min.css"> </head> <body> <div class="slider-container"> <div class="slider"> <div class="slide active"> <img src="https://images.unsplash.com/photo-1494625927555-6ec4433b1571?q=80&w=874&auto=format&fit=crop&ixlib=rb-4.1.0&ixid=M3wxMjA3fDB8MHxwaG90by1wYWdlfHx8fGVufDB8fHx8fA%3D%3D" alt="Mountain"> <div class="slide-content"> <h2 class="slide-title">Explore The Wild</h2> <p class="slide-description">Discover breathtaking landscapes and untouched nature.</p> </div> </div> <div class="slide"> <img src="https://plus.unsplash.com/premium_photo-1670260849802-8c228aaf7d24?q=80&w=870&auto=format&fit=crop&ixlib=rb-4.1.0&ixid=M3wxMjA3fDB8MHxwaG90by1wYWdlfHx8fGVufDB8fHx8fA%3D%3D" alt="City"> <div class="slide-content"> <h2 class="slide-title">Urban Nights</h2> <p class="slide-description">Experience the vibrant energy of city life after dark.</p> </div> </div> <div class="slide"> <img src="https://images.unsplash.com/photo-1477468572316-36979010099d?q=80&w=1032&auto=format&fit=crop&ixlib=rb-4.1.0&ixid=M3wxMjA3fDB8MHxwaG90by1wYWdlfHx8fGVufDB8fHx8fA%3D%3D" alt="Beach"> <div class="slide-content"> <h2 class="slide-title">Ocean Paradise</h2> <p class="slide-description">Relax on pristine beaches with crystal-clear waters.</p> </div> </div> </div> <div class="progress-bar"></div> <div class="slider-controls"> <button class="slider-btn prev-btn"><i class="fas fa-chevron-left"></i></button> <button class="slider-btn next-btn"><i class="fas fa-chevron-right"></i></button> </div> <div class="slider-dots"> <div class="dot active" data-index="0"></div> <div class="dot" data-index="1"></div> <div class="dot" data-index="2"></div> </div> </div> </body> </html>
CSS
:root { --primary-red: #ff2e2e; --dark-red: #d00000; --light-red: #ff6b6b; --black: #1a1a1a; --white: #ffffff; --gray: #f5f5f5; --shadow: 0 10px 30px rgba(0, 0, 0, 0.2); --transition: all 0.6s cubic-bezier(0.16, 1, 0.3, 1); } * { margin: 0; padding: 0; box-sizing: border-box; } body { font-family: 'Poppins', sans-serif; background: var(--gray); display: flex; justify-content: center; align-items: center; min-height: 100vh; overflow-x: hidden; } .slider-container { width: 90%; max-width: 1200px; margin: 2rem auto; position: relative; border-radius: 20px; overflow: hidden; box-shadow: var(--shadow); } .slider { width: 100%; height: 600px; position: relative; overflow: hidden; } .slide { position: absolute; width: 100%; height: 100%; opacity: 0; transition: var(--transition); transform: scale(0.95); will-change: transform, opacity; } .slide.active { opacity: 1; transform: scale(1); z-index: 1; } .slide img { width: 100%; height: 100%; object-fit: cover; object-position: center; transform: scale(1.1); transition: var(--transition); will-change: transform; } .slide.active img { transform: scale(1); } .slide-content { position: absolute; bottom: 0; left: 0; right: 0; padding: 3rem; background: linear-gradient(to top, rgba(0, 0, 0, 0.9), transparent); color: var(--white); transform: translateY(100px); opacity: 0; transition: var(--transition); } .slide.active .slide-content { transform: translateY(0); opacity: 1; } .slide-title { font-size: 2.5rem; font-weight: 700; margin-bottom: 1rem; text-shadow: 0 2px 10px rgba(0, 0, 0, 0.5); } .slide-description { font-size: 1.1rem; max-width: 600px; line-height: 1.6; opacity: 0.9; } .slider-controls { position: absolute; top: 50%; left: 0; right: 0; display: flex; justify-content: space-between; padding: 0 2rem; z-index: 10; transform: translateY(-50%); } .slider-btn { width: 50px; height: 50px; border-radius: 50%; background: rgba(255, 255, 255, 0.2); backdrop-filter: blur(10px); border: none; color: var(--white); cursor: pointer; display: flex; align-items: center; justify-content: center; transition: var(--transition); font-size: 1.2rem; } .slider-btn:hover { background: var(--primary-red); transform: scale(1.1); } .slider-dots { position: absolute; bottom: 2rem; left: 50%; transform: translateX(-50%); display: flex; gap: 0.8rem; z-index: 10; } .dot { width: 12px; height: 12px; border-radius: 50%; background: rgba(255, 255, 255, 0.5); cursor: pointer; transition: var(--transition); position: relative; overflow: hidden; } .dot::after { content: ''; position: absolute; top: 0; left: 0; width: 100%; height: 100%; background: var(--primary-red); transform: scaleX(0); transform-origin: left; transition: transform 5s linear; } .dot.active { background: transparent; } .dot.active::after { transform: scaleX(1); } .progress-bar { position: absolute; bottom: 0; left: 0; height: 4px; background: var(--primary-red); width: 0%; z-index: 10; transition: width 0.1s linear; } /* Responsive Adjustments */ @media (max-width: 992px) { .slider { height: 500px; } } @media (max-width: 768px) { .slider { height: 400px; } .slide-content { padding: 2rem; } .slide-title { font-size: 2rem; } } @media (max-width: 576px) { .slider { height: 350px; } .slide-content { padding: 1.5rem; } .slide-title { font-size: 1.5rem; } .slide-description { font-size: 0.9rem; } .slider-btn { width: 40px; height: 40px; } }
JavaScript
document.addEventListener('DOMContentLoaded', function() { const slider = document.querySelector('.slider'); const slides = document.querySelectorAll('.slide'); const prevBtn = document.querySelector('.prev-btn'); const nextBtn = document.querySelector('.next-btn'); const dots = document.querySelectorAll('.dot'); const progressBar = document.querySelector('.progress-bar'); let currentIndex = 0; let intervalId; let isAutoPlaying = true; const slideDuration = 5000; // 5 seconds // Initialize slider function initSlider() { updateSlider(); startAutoPlay(); } // Update slider position function updateSlider() { slides.forEach((slide, index) => { slide.classList.remove('active'); if (index === currentIndex) { slide.classList.add('active'); } }); dots.forEach((dot, index) => { dot.classList.remove('active'); if (index === currentIndex) { dot.classList.add('active'); dot.style.setProperty('--progress', '100%'); } else { dot.style.setProperty('--progress', '0%'); } }); resetProgressBar(); } // Next slide function nextSlide() { currentIndex = (currentIndex + 1) % slides.length; updateSlider(); resetAutoPlay(); } // Previous slide function prevSlide() { currentIndex = (currentIndex - 1 + slides.length) % slides.length; updateSlider(); resetAutoPlay(); } // Start auto-play function startAutoPlay() { if (isAutoPlaying) { intervalId = setInterval(nextSlide, slideDuration); animateProgressBar(); } } // Reset auto-play function resetAutoPlay() { clearInterval(intervalId); startAutoPlay(); } // Animate progress bar function animateProgressBar() { let width = 0; const increment = 100 / (slideDuration / 10); const progressInterval = setInterval(() => { if (width >= 100) { clearInterval(progressInterval); } else { width += increment; progressBar.style.width = `${width}%`; } }, 10); } // Reset progress bar function resetProgressBar() { progressBar.style.width = '0%'; } // Event listeners nextBtn.addEventListener('click', nextSlide); prevBtn.addEventListener('click', prevSlide); dots.forEach(dot => { dot.addEventListener('click', function() { currentIndex = parseInt(this.getAttribute('data-index')); updateSlider(); resetAutoPlay(); }); }); // Pause on hover slider.addEventListener('mouseenter', () => { clearInterval(intervalId); isAutoPlaying = false; }); slider.addEventListener('mouseleave', () => { isAutoPlaying = true; resetAutoPlay(); }); // Touch swipe support let touchStartX = 0; let touchEndX = 0; slider.addEventListener('touchstart', (e) => { touchStartX = e.changedTouches[0].clientX; clearInterval(intervalId); }, { passive: true }); slider.addEventListener('touchend', (e) => { touchEndX = e.changedTouches[0].clientX; handleSwipe(); isAutoPlaying = true; resetAutoPlay(); }, { passive: true }); function handleSwipe() { const difference = touchStartX - touchEndX; if (difference > 50) { nextSlide(); // Swipe left } else if (difference < -50) { prevSlide(); // Swipe right } } // Initialize slider initSlider(); });
Output Preview
Desktop
Mobile
Fullscreen