Адаптивная галерея изображений с LightBox эффектом на CSS + jQuery с доработками от Apocalypse
Очень простая галерея изображений, которая выполнена на CSS3 и Javascript. Галерея адаптивная и умеет подстраиваться под разные разрешения экрана
Для начала посмотрите ДЕМО
Установка:
1#: В самый низ вашего CSS вставьте:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 |
.gallery { display: flex; flex-direction: column; align-items: center; } .gallery .row { display: flex; justify-content: center; max-width: 900px; } .gallery .row img { width: 31%; min-height: 250px; margin: 5px; cursor: pointer; transition: all ease-in-out 250ms; filter: brightness(60%); object-fit: cover; } .gallery .row img:hover { filter: brightness(100%); } .lightboxContainer { background-color: #00000099; position: fixed; width: 100vw; height: 100vh; top: 0; left: 0; z-index: 1; display: flex; display: none; } .lightboxContainer .lightbox { display: flex; align-items: center; justify-content: space-between; width: 100%; } .lightboxContainer .lightbox img { width: 100%; max-width: 800px; } .lightboxContainer .lightbox .close { position: absolute; top: 20px; right: 20px; cursor: pointer; font-size: 40px; color: white; } .lightboxContainer .lightbox .prev, .lightboxContainer .lightbox .next { user-select: none; cursor: pointer; font-size: 50px; color: white; margin: 40px; font-weight: 800; } @media only screen and (max-width: 600px) { .gallery { width: initial; height: initial; } .gallery .row { flex-direction: column; align-items: center; } .gallery .row img { width: 400px; height: 400px; } .lightboxContainer .lightbox .prev, .lightboxContainer .lightbox .next { margin: 15px; } } @media only screen and (max-width: 500px) { .gallery .row img { width: 300px; height: 300px; } } @media only screen and (max-width: 400px) { .gallery .row img { width: 250px; height: 250px; } } |
2#: Следующий код между тегами <body> и </body> на странице, где должна быть ваша галерея:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 |
<div class="gallery"> <div class="row"> <img src="ССЫЛКА_НА_КАРТИНКУ" onclick="openModal();changeImage($(this))" alt=" Template Image"> <img src="ССЫЛКА_НА_КАРТИНКУ" onclick="openModal();changeImage($(this))" alt=" Template Image"> <img src="ССЫЛКА_НА_КАРТИНКУ" onclick="openModal();changeImage($(this))" alt=" Template Image"> </div> <div class="row"> <img src="ССЫЛКА_НА_КАРТИНКУ" onclick="openModal();changeImage($(this))" alt=" Template Image"> <img src="ССЫЛКА_НА_КАРТИНКУ" onclick="openModal();changeImage($(this))" alt=" Template Image"> <img src="ССЫЛКА_НА_КАРТИНКУ" onclick="openModal();changeImage($(this))" alt=" Template Image"> </div> </div> <div class="lightboxContainer"> <div class="lightbox"> <div class="close" onclick="closeModal()"> ✖ </div <div class="prev" onclick="nextSlide(-1)"> < </div> <div class="activeImage"> <img name="activeImage" src="" alt=""> </div> <div class="next" onclick="nextSlide(1)"> > </div> </div> </div> <script type="text/javascript"> let currentSlide = 0; // Current Slide var currentimg; // Opens Lightbox function openModal() { document.querySelector(".lightboxContainer").style.display = "flex"; document.body.style.overflow = "hidden"; document.querySelector(".gallery").style.filter = "blur(5px)"; } // Closes Lightbox function closeModal() { document.querySelector(".lightboxContainer").style.display = "none"; document.body.style.overflow = "initial"; document.querySelector(".gallery").style.filter = "blur(0)"; } // Sets Current Image to Lightbox when clicked // Returns the Current Slide Index function changeImage(n) { document.activeImage.src = n.attr('src'); currentSlide = n.index(); imgblock = $('.gallery img'); return currentSlide; } // Cycles Through Images // n is either 1 (next slide) or -1 (previous slide) function nextSlide(n) { if (currentSlide < 1 && n == -1) { //IF at first slide AND selecting previous slide currentSlide = imgblock.length - 1; document.activeImage.src = imgblock.eq(currentSlide).attr('src'); return currentSlide; } else if (currentSlide < imgblock.length - 1 && currentSlide >= 0 && n == 1) { //IF at any slide besides the last AND going up currentSlide = currentSlide + 1; document.activeImage.src = imgblock.eq(currentSlide).attr('src'); return currentSlide; } else if (currentSlide == imgblock.length - 1 && n == 1) { //IF at final slide last AND going up currentSlide = 0; document.activeImage.src = imgblock.eq(currentSlide).attr('src'); return currentSlide; } else { //Anything else (going down AND not at first slide) currentSlide = currentSlide - 1; document.activeImage.src = imgblock.eq(currentSlide).attr('src'); return currentSlide; } } </script> |
Изначально эта галерея была на чистом Javascript + CSS, но в ней было несколько косяков и неудобств. Поэтому я немного модифицировал её и часть кода переписал на jQuery