Horje
Design a Responsive Product Card using HTML, CSS & JavaScript

We’ll create a responsive product card using HTML, CSS, and JavaScript. A product card is a basic UI element used in e-commerce websites to show product details in a simple format. We’re creating a one-size-fits-all product card for online use. It’s designed to work well on any screen size so it will be fully responsive.

Output preview:

ProductCardHTML

final output

Prerequisites

Approach

  • HTML Structure:
    • First, we create an HTML structure for the product card including the product image, product title, and product price.
    • Plan how to place everything on the­ card.
  • CSS Styling:
    • After se­tting up the HTML, we move­ on to the next step. Ne­xt up, we style the product card with CSS. This is all about de­ciding on the look. Colors, fonts, space, borders, and alignment.
    • Responsive Design: Use­ CSS media queries. This makes sure­ the product card fits well on all device­s like desktops, tablets, or mobile­s as pe­r screen width.
    • Use CSS FLEXBOX : Learn to use­ CSS Flexbox. It makes a card layout flexible­ and adjusts itself based on the space­ available. Make sure­ it’s flexible. This helps adjust with space­.
  • JavaScript Interactivity:
    • If nee­ded, we can make the­ product card interactive with JavaScript. This may add hover e­ffects.
    • Event Handling : In JavaScript, use­ special tools called eve­nt listeners. They can make a card look diffe­rent when we hover ove­r it.
HTML
<!DOCTYPE html>
<html lang="en">

<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width,
                                initial-scale=1.0">
    <title>PRODUCT CARD</title>
    <link rel="stylesheet" href="style.css">
</head>

<body>
    <div class="container">
        <div class="product-wrapper">
            <div class="product">
                <div class="img">
                    <img
                        src=
"https://media.geeksforgeeks.org/img-practice/prod/courses/261/Web/Content/dsa-web_1705410455.webp">
                </div>
                <div class="info">
                    <div class="details">
                        <h1>DSA - Python</h1>
                        <p>₹3998 <del>₹3999</del></p>
                    </div>
                    <div class="buy-btn">
                        <button>DETAILS</button>
                    </div>
                </div>
            </div>
        </div>
        <div class="product-wrapper">
            <div class="product">
                <div class="img">
                    <img
                        src=
"https://media.geeksforgeeks.org/img-practice/prod/courses/439/Web/Content/bootstrap-graphic_1705401384.webp">
                </div>
                <div class="info">
                    <div class="details">
                        <h1>Bootstrap</h1>
                        <p>₹499 <del>₹999</del></p>
                    </div>
                    <div class="buy-btn">
                        <button>DETAILS</button>
                    </div>
                </div>
            </div>
        </div>
        <div class="product-wrapper">
            <div class="product">
                <div class="img">
                    <img
                        src=
"https://media.geeksforgeeks.org/img-practice/prod/courses/270/Web/Content/Java-Programming_1705409391.webp">
                </div>
                <div class="info">
                    <div class="details">
                        <h1>Java Programming</h1>
                        <p>₹1999 <del>₹3999</del></p>
                    </div>
                    <div class="buy-btn">
                        <button>DETAILS</button>
                    </div>
                </div>
            </div>
        </div>
        <div class="product-wrapper">
            <div class="product">
                <div class="img">
                    <img
                        src=
"https://media.geeksforgeeks.org/img-practice/prod/courses/554/Web/Content/ds-applied_1705409158.webp">
                </div>
                <div class="info">
                    <div class="details">
                        <h1>Data Science</h1>
                        <p>₹21999 <del>₹29999</del></p>
                    </div>
                    <div class="buy-btn">
                        <button>DETAILS</button>
                    </div>
                </div>
            </div>
        </div>
    </div>
    <script src="./script.js"></script>
</body>

</html>
CSS
/* style.css */
* {
    margin: 0;
    padding: 0;
    box-sizing: border-box;
    font-family: sans-serif;
}

body {
    background: #e3e3e3;
}

.container {
    width: 100%;
    min-height: 100vh;
    padding: 20px;
    display: flex;
    align-items: center;
    justify-content: space-between;
    flex-wrap: wrap;
    gap: 20px;
}

del {
    color: red;
}

.product-wrapper {
    width: calc(25% - 20px);
    background: white;
    overflow: hidden;
    border-radius: 10px 10px 10px 10px;
    transform: scale(0.95);
}

.product {
    width: 100%;
    background: #e8c8fb;
}

.product .img {
    height: 80%;
    width: 100%;
}

.product .img img {
    height: 100%;
    width: 100%;
    transition: all 0.5s;
    object-fit: contain;
}

.product .info {
    width: 100%;
    height: 20%;
    transition: transform 0.5s;
    display: flex;
}

.info .details {
    height: 100%;
    width: 65%;
    padding: 20px;
}

h1 {
    font-size: 15px;
}

.buy-btn {
    display: flex;
    justify-content: center;
    align-items: center;
    width: 35%;
}

.buy-btn button {
    cursor: pointer;
    padding: 10px 20px;
    border: 1px solid #3d0686;
    background: #5f00dd;
    color: #fff;
    box-shadow: 0 19px 38px rgba(0, 0, 0, 0.30),
        0 15px 12px rgba(0, 0, 0, 0.22);
    border-radius: 25px;
}

@media screen and (max-width:1200px) {
    .product-wrapper {
        width: calc(33.33% - 20px);
    }

    .container {
        align-content: start;
    }
}

@media screen and (max-width:950px) {
    .product-wrapper {
        width: calc(50% - 20px);
    }
}

@media screen and (max-width:600px) {
    .product-wrapper {
        width: 100%;
    }
}

@media screen and (max-width:350px) {
    .product-wrapper {
        height: auto;
    }

    .info .details {
        width: 100%;
    }

    .info {
        flex-direction: column;
    }

    .buy-btn {
        width: 100%;
        padding-bottom: 10px;
    }
}
JavaScript
// Script.js
document.addEventListener("DOMContentLoaded", function () {
    const images = document.querySelectorAll("img");
    images.forEach(image => {
        image.addEventListener("mouseenter",
            function () {
                this.style.transform = "scale(1.1) translateY(-15px)";
                this.style.boxShadow = "5px 20px 30px rgba(0, 0, 0, 0.2)";
            });
        image.addEventListener("mouseleave",
            function () {
                this.style.transform = "scale(1) translateY(0)";
                this.style.boxShadow = "none";
            });
    });
});

Output:




Reffered: https://www.geeksforgeeks.org


JavaScript

Related
How to Create an Interface with Optional Property ? How to Create an Interface with Optional Property ?
How to Iterate Through Mapped Type Record with Generic Value ? How to Iterate Through Mapped Type Record with Generic Value ?
JavaScript Program to Calculate the Average of All the Elements Present in an Array JavaScript Program to Calculate the Average of All the Elements Present in an Array
JavaScript Program to Print Reverse Floyd Pattern Triangle Pyramid JavaScript Program to Print Reverse Floyd Pattern Triangle Pyramid
JavaScript Program to Find the Sum of Natural Numbers using Recursion JavaScript Program to Find the Sum of Natural Numbers using Recursion

Type:
Geek
Category:
Coding
Sub Category:
Tutorial
Uploaded by:
Admin
Views:
13