JSFiddle - React, Tailwind, and code Playground
by Vadim
HTML
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<link rel="preconnect" href="https://fonts.gstatic.com">
<link href="https://fonts.googleapis.com/css2?family=Montserrat:wght@600&display=swap" rel="stylesheet">
<link href='css/normalise.css' rel='stylesheet'>
<link href='css/style.css' rel='stylesheet'>
<title>JSpractice</title>
</head>
<body>
<div class="container">
<div class="product_card">
<div class="card_img">
<img src="http://tajemb.kiev.ua/wp-content/themes/bootstrap-basic/img/placeholder.png" alt="" class="img">
</div>
<h2 class='card_title'>Title of Product</h2>
<p class="card_text">Lorem ipsum dolor sit amet consectetur, adipisicing elit. Sit adipisci corporis eaque et soluta odit nulla aut saepe ratione aliquam facilis cumque repellendus atque delectus odio, tempore eveniet optio molestias.</p>
<div class="product_count">
<button class='card_button_minus card_buttons'>-</button>
<form action="#">
<input type="number" class='card_input' min='1' max='99' step='1' value='1'>
</form>
<button class='card_button_plus card_buttons'>+</button>
</div>
</div>
<div class="product_card">
<div class="card_img">
<img src="http://tajemb.kiev.ua/wp-content/themes/bootstrap-basic/img/placeholder.png" alt="" class="img">
</div>
<h2 class='card_title'>Title of Product</h2>
<p class="card_text">Lorem ipsum dolor sit amet consectetur, adipisicing elit. Sit adipisci corporis eaque et soluta odit nulla aut saepe ratione aliquam facilis cumque repellendus atque delectus odio, tempore eveniet optio molestias.</p>
<div class="product_count">
<button class='card_button_minus...
CSS
body{
font-family: 'Montserrat';
background: #222;
color: #fff;
padding-bottom: 500px;
}
button{
cursor: pointer;
}
button:focus{
outline: none;
background: #fff;
color: #222;
}
.card_buttons{
background: #222;
border: none;
color: #fff;
transition: 0.2s;
}
.container{
display: flex;
justify-content: space-between;
max-width: 1170px;
margin: 0 auto;
padding-top: 50px;
flex-wrap: wrap;
}
.product_card{
flex: 0 0 300px;
background-color:darkslategray;
border-radius: 5px;
padding: 10px 15px;
text-align: center;
margin-bottom: 50px;
}
.card_img{
margin-bottom: 20px;
}
.img{
width: 100%;
}
.card_title{
margin-bottom: 10px;
}
.card_text{
font-size: 12px;
line-height: 1.8em;
}
.product_count{
display: flex;
justify-content: center;
align-items: center;
}
.card_input{
max-width: 20px;
text-align: center;
background: #222;
border: none;
margin-top: -5px;
color: #fff;
}
.card_input::-webkit-inner-spin-button{
-webkit-appearance: none;
}
form{
margin: -2px 2px 0 2px;
}
.card_input:focus{
outline: none;
overflow: hidden;
}
JavaScript
'use strict'
let cards = document.querySelectorAll('.product_card');
let btnAdd = document.querySelectorAll('.card_button_plus');
let btnRemove = document.querySelectorAll('.card_button_minus');
let input = document.querySelectorAll('.card_input');
for(let index = 0; index < cards.length; index++){
btnAdd[index].addEventListener('click', () => {
const idx = index;
const count = Number(input[idx].value) || 2;
input[idx].value = count + 1;
});
// btnRemove[index].addEventListener('click', removeNum);
}
console.log(cards.length);