Hello wizards, I hope you are doing great. Today in this blog you’ll learn how to create the "Filterable Gallery" project using HTML, CSS & JavaScript.
Preview
In the above video, you’ve seen the preview of the "Filterable Gallery" project and I hope now you are able to create this type of project. If not, I have provided all the HTML CSS and JavaScript code below.
Filterable Gallery [Source Code]
To get the following HTML, CSS & JS code for the Filterable Gallery project. You need to create three files one is a HTML file, second one is a CSS file and the another one is JS file. After creating these three files then you can copy-paste the given codes on your document.
Remember, you’ve to create a file with .html extension for HTML code, .css extension for CSS code and .js for JavaScript code.
You can also download all source code files from the given download button.
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <meta http-equiv="X-UA-Compatible" content="IE=edge"> <meta name="viewport" content="width=device-width, initial-scale=1.0"> <title>Filterable Gallery</title> <link rel="stylesheet" href="style.css"> </head> <body> <div class="container"> <h1>Filterable Gallery</h1> <div class="menu"> <button class="btn active" data-name="all">All</button> <button class="btn" data-name="men">Men</button> <button class="btn" data-name="women">Women</button> <button class="btn" data-name="children">Children</button> </div> <div class="items"> <div class="item men"> <img src="images/men1.jpg" alt="men"> </div> <div class="item men"> <img src="images/men2.jpg" alt="men"> </div> <div class="item women"> <img src="images/women1.jpg" alt="men"> </div> <div class="item women"> <img src="images/women2.jpg" alt="men"> </div> <div class="item children"> <img src="images/children1.jpg" alt="men"> </div> <div class="item children"> <img src="images/children2.jpg" alt="men"> </div> </div> </div> <script src="index.js"></script> </body> </html>
@import url("https://fonts.googleapis.com/css2?family=Poppins:wght@100;200;300;400;500;600;700;800;900&display=swap"); * { margin: 0; padding: 0; box-sizing: border-box; font-family: "Poppins", sans-serif; } body { background-color: black; color: white; } .container { max-width: 1200px; margin: 100px auto; text-align: center; padding: 10px; } .container h1 { font-size: 30px; text-transform: uppercase; letter-spacing: 4px; word-spacing: 5px; margin-bottom: 10px; } .container .menu { display: flex; justify-content: center; align-items: center; flex-wrap: wrap; gap: 0 20px; margin-bottom: 25px; } .container .menu .btn { font-size: 15px; font-weight: 500; background-color: transparent; color: white; border: none; padding: 10px 20px; border-bottom: 3px solid transparent; transition: border-bottom 0.5s ease-in-out; cursor: pointer; } .container .menu .btn:hover { border-bottom: 3px solid white; } .container .menu .btn.active { border-bottom: 3px solid white; } .container .items { display: flex; flex-wrap: wrap; gap: 20px; justify-content: center; align-items: center; } .container .items .item { width: 270px; height: 200px; } .container .items .item img { width: 100%; height: 100%; object-fit: cover; border: 3px solid white; border-radius: 10px; }
const btnEl =document.querySelectorAll(".btn"); const itemEls =document.querySelectorAll(".item"); var tempActive = document.querySelector(".active"); btnEl.forEach((btn)=>{ btn.addEventListener("click",(e)=>{ // To add border to button tempActive.classList.remove("active") btn.classList.add("active") tempActive = btn; // To filter the items with item name const name = e.target.dataset.name; itemEls.forEach((itemEl)=>{ if(name==="all"){ itemEl.style.display = "block" }else{ if(itemEl.classList.contains(name)){ itemEl.style.display = "block" }else{ itemEl.style.display = "none"; } } }) }) })