How to Create a Stunning Responsive Image Gallery with JavaScript: A Step-by-Step Guide

Learn how to build a beautiful and responsive image gallery using JavaScript. Follow our step-by-step guide with code examples.

Are you ready to add a touch of elegance and interactivity to your website? Building a responsive image gallery using JavaScript is a fantastic way to showcase your pictures and engage your visitors. In this step-by-step guide, we'll walk you through the process of creating a stunning image gallery that adjusts seamlessly to different screen sizes. Don't worry if you're new to programming; we'll explain each step in simple terms that even a 12-year-old can understand. Let's get started!

Step 1: Setting Up the HTML Structure


To begin, we'll create the basic HTML structure for our image gallery. Open your favorite text editor and create a new HTML file named "index.html."

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Responsive Image Gallery</title>
    <link rel="stylesheet" href="styles.css">
</head>
<body>
    <div class="gallery">
        <!-- Images will be dynamically added here -->
    </div>
    <script src="script.js"></script>
</body>
</html>

Step 2: Styling with CSS


Now, let's style our image gallery using CSS. Create a new file named "styles.css" in the same directory as your HTML file.

/* Apply basic styles to the gallery container */
.gallery {
    display: grid;
    grid-template-columns: repeat(auto-fit, minmax(250px, 1fr));
    gap: 10px;
    padding: 20px;
}

/* Style the images */
.gallery img {
    width: 100%;
    height: auto;
    border-radius: 5px;
    box-shadow: 0 2px 4px rgba(0, 0, 0, 0.1);
}

Step 3: Adding JavaScript


Time to make our image gallery interactive! Create a new file named "script.js" and link it in your HTML file.

// Get the gallery container
const galleryContainer = document.querySelector('.gallery');

// List of image URLs
const imageUrls = [
    'image1.jpg',
    'image2.jpg',
    'image3.jpg',
    // Add more image URLs here
];

// Loop through the image URLs and create image elements
imageUrls.forEach(url => {
    const img = document.createElement('img');
    img.src = url;
    img.alt = 'Gallery Image';
    galleryContainer.appendChild(img);
});


Our image gallery looks great, but it's time to make it responsive. We'll use the window object's resize event to update the gallery layout when the screen size changes.

// Function to update gallery layout on window resize
function updateGalleryLayout() {
    const columnWidth = 250; // Adjust this value as needed
    const windowWidth = window.innerWidth;
    const columns = Math.floor(windowWidth / columnWidth);
    galleryContainer.style.gridTemplateColumns = `repeat(${columns}, minmax(${columnWidth}px, 1fr))`;
}

// Call the function on page load and window resize
window.addEventListener('load', updateGalleryLayout);
window.addEventListener('resize', updateGalleryLayout);

Step 5: Adding Lightbox Functionality


A lightbox allows users to view images in a larger size when clicked. Let's implement this feature.

// Function to open lightbox
function openLightbox(imageUrl) {
    const lightbox = document.createElement('div');
    lightbox.className = 'lightbox';
    lightbox.innerHTML = `<img src="${imageUrl}" alt="Gallery Image">`;

    // Close lightbox when clicked
    lightbox.addEventListener('click', () => {
        document.body.removeChild(lightbox);
    });

    document.body.appendChild(lightbox);
}

// Attach click event to each image
const galleryImages = document.querySelectorAll('.gallery img');
galleryImages.forEach(image => {
    image.addEventListener('click', () => {
        openLightbox(image.src);
    });
});

Step 6: Styling the Lightbox


Let's add some CSS to style the lightbox.

/* Style for the lightbox */
.lightbox {
    position: fixed;
    top: 0;
    left: 0;
    width: 100%;
    height: 100%;
    background-color: rgba(0, 0, 0, 0.8);
    display: flex;
    align-items: center;
    justify-content: center;
}

/* Style for the lightbox image */
.lightbox img {
    max-width: 90%;
    max-height: 90%;
    border-radius: 5px;
    box-shadow: 0 4px 8px rgba(0, 0, 0, 0.2);
}

Step 7: The Complete Code


Here's the complete code for your responsive image gallery:

<!-- index.html -->
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Responsive Image Gallery</title>
    <link rel="stylesheet" href="styles.css">
</head>
<body>
    <div class="gallery">
        <!-- Images will be dynamically added here -->
    </div>
    <script src="script.js"></script>
</body>
</html>
/* styles.css */
.gallery {
    display: grid;
    grid-template-columns: repeat(auto-fit, minmax(250px, 1fr));
    gap: 10px;
    padding: 20px;
}

.gallery img {
    width: 100%;
    height: auto;
    border-radius: 5px;
    box-shadow: 0 2px 4px rgba(0, 0, 0, 0.1);
}

.lightbox {
    position: fixed;
    top: 0;
    left: 0;
    width: 100%;
    height: 100%;
    background-color: rgba(0, 0, 0, 0.8);
    display: flex;
    align-items: center;
    justify-content: center;
}

.lightbox img {
    max-width: 90%;
    max-height: 90%;
    border-radius: 5px;
    box-shadow: 0 4px 8px rgba(0, 0, 0, 0.2);
}
// script.js
const galleryContainer = document.querySelector('.gallery');

const imageUrls = [
    'image1.jpg',
    'image2.jpg',
    'image3.jpg',
    // Add more image URLs here
];

function updateGalleryLayout() {
    const columnWidth = 250; // Adjust this value as needed
    const windowWidth = window.innerWidth;
    const columns = Math.floor(windowWidth / columnWidth);
    galleryContainer.style.gridTemplateColumns = `repeat(${columns}, minmax(${columnWidth}px

, 1fr))`;
}

window.addEventListener('load', updateGalleryLayout);
window.addEventListener('resize', updateGalleryLayout);

function openLightbox(imageUrl) {
    const lightbox = document.createElement('div');
    lightbox.className = 'lightbox';
    lightbox.innerHTML = `<img src="${imageUrl}" alt="Gallery Image">`;

    lightbox.addEventListener('click', () => {
        document.body.removeChild(lightbox);
    });

    document.body.appendChild(lightbox);
}

const galleryImages = document.querySelectorAll('.gallery img');
galleryImages.forEach(image => {
    image.addEventListener('click', () => {
        openLightbox(image.src);
    });
});

Congratulations! You've successfully created a responsive image gallery using JavaScript. Now your website's visitors can enjoy a visually pleasing experience on any device. Feel free to explore more about JavaScript and web development concepts to enhance your skills further. Keep practicing and experimenting to create even more exciting features for your websites!

Final Thoughts


Building a responsive image gallery using JavaScript can be a rewarding experience, allowing you to showcase your creativity and engage your website's visitors. By following this step-by-step guide, you've learned the basics of creating an interactive and visually appealing gallery. Remember, practice makes perfect, so keep refining your skills and exploring new techniques to take your web development journey to new heights. Happy coding!

Subscribe to JS Dev Journal

Don’t miss out on the latest issues. Sign up now to get access to the library of members-only issues.
jamie@example.com
Subscribe