I have in my website a slider with articles. He has 9 cells. But I need 9 more cells, and I want them below the first slide. But when I duplicate on index the second slider doesn't work.
<section class="slider">
<div class="card">
<div class="card-content slider-content">
<img src="images/FotosDestaque/IMG1.png" alt="" class="card-img">
<h1 class="card-title">Caixa Cartão Bolo Rei 28x28x7,5</h1>
<div class="card-body">
<p class="card-price">0,53€* / caixa</p>
</div>
<div class="card-footer slider-footer">
<button onclick="window.location.href='catalogo.php'" class="btn btn-success button-slider">Comprar</button>
</div>
</div>
</div>
<div class="card">
<div class="card-content">
<img src="images/FotosDestaque/IMG2.png" alt="" class="card-img">
<h1 class="card-title">Guardanapo Natal PPP 40x40 Nova Era 24 maços </h1>
<div class="card-body">
<p class="card-price">19,93€* / caixa</p>
</div>
<div class="card-footer slider-footer">
<button onclick="window.location.href='catalogo.php'" class="btn btn-success button-slider">Comprar</button>
</div>
</div>
</div>
<div class="card">
<div class="card-content">
<img src="images/FotosDestaque/IMG3.png" alt="" class="card-img">
<h1 class="card-title">Saco plástico alça Natal medida 50x55</h1>
<div class="card-body">
<p class="card-price">2,50€* / Kg</p>
</div>
<div class="card-footer slider-footer">
<button onclick="window.location.href='catalogo.php'" class="btn btn-success button-slider">Comprar</button>
</div>
</div>
</div>
<div class="card">
<div class="card-content">
<img src="images/FotosDestaque/IMG4.png" alt="" class="card-img">
<h1 class="card-title">Saqueta Bolo Rei 26+8x42 c/ 500 sacos</h1>
<div class="card-body">
<p class="card-price">0,11€* / Saco</p>
</div>
<div class="card-footer slider-footer">
<button onclick="window.location.href='catalogo.php'" class="btn btn-success button-slider">Comprar</button>
</div>
</div>
</div>
<div class="card">
<div class="card-content">
<img src="images/FotosDestaque/IMG5.png" alt="" class="card-img">
<h1 class="card-title">Lava Loiça Profissional Fairy 5 Lts Ultra</h1>
<div class="card-body">
<p class="card-price">8,99€* / uni</p>
</div>
<div class="card-footer slider-footer">
<button onclick="window.location.href='catalogo.php'" class="btn btn-success button-slider">Comprar</button>
</div>
</div>
</div>
<div class="card">
<div class="card-content">
<img src="images/FotosDestaque/IMG6.png" alt="" class="card-img">
<h1 class="card-title">Esfregão Saponificado Favir c/6 Unds</h1>
<div class="card-body">
<p class="card-price">0,49€* / uni</p>
</div>
<div class="card-footer slider-footer">
<button onclick="window.location.href='catalogo.php'" class="btn btn-success button-slider">Comprar</button>
</div>
</div>
</div>
<div class="card">
<div class="card-content">
<img src="images/FotosDestaque/IMG8.png" alt="" class="card-img">
<h1 class="card-title">Bloco Sanitário Senses 60 Grs</h1>
<div class="card-body">
<p class="card-price">0,48€* / uni</p>
</div>
<div class="card-footer slider-footer">
<button onclick="window.location.href='catalogo.php'" class="btn btn-success button-slider">Comprar</button>
</div>
</div>
</div>
<div class="card">
<div class="card-content">
<img src="images/FotosDestaque/IMG7.png" alt="" class="card-img">
<h1 class="card-title">Toalha de mão 21x22 Amoos c/2800 fls</h1>
<div class="card-body">
<p class="card-price">10,46€* / caixa</p>
</div>
<div class="card-footer slider-footer">
<button onclick="window.location.href='catalogo.php'" class="btn btn-success button-slider">Comprar</button>
</div>
</div>
</div>
<div class="card">
<div class="card-content">
<img src="images/FotosDestaque/IMG9.png" alt="" class="card-img">
<h1 class="card-title">Tira Nódoas Fun Clorossan Roupa Branca/cor 800grs</h1>
<div class="card-body">
<p class="card-price">10,46€* / caixa</p>
</div>
<div class="card-footer slider-footer">
<button onclick="window.location.href='catalogo.php'" class="btn btn-success button-slider">Comprar</button>
</div>
</div>
</div>
<span class="arrow left">🡠</span>
<span class="arrow right">🡢</span>
</section>
<script src="js/scriptDestaques.js"></script>
This is the index, and when I do copy paste this section the second slider doesn't work.
:root {
--primary: #ffffff;
/* --primary: #fff; */
--secondary: #13533A;
--bg: #0e1523;
/* --bg: #f5f5f5; */
}
* {
margin: 0;
padding: 0;
box-sizing: border-box;
}
body{
/*background-color: var(--bg);*/
overflow-x: hidden;
}
.slider {
/*background-color: var(--bg);*/
padding: 1rem;
height: 100%;
margin: 7rem auto;
display: flex;
/*display: grid;
grid-template-columns: repeat(4, 1fr);
place-items: center;
grid-gap: 2rem;*/
/* font: normal 1rem sans-serif;*/
}
.card {
position: relative;
left: 0;
min-width: 17rem;
height: 23rem;
background-color:var(--primary);
color: #fff;
border-radius: 1rem;
border: .1rem solid transparent;
overflow: hidden;
box-shadow: 0 .2rem .6rem #0003;
transition: .5s ease-in-out;
}
@media screen and (max-width: 768px) {
.card {
min-width: 21rem;
}
}
.card:not(:first-child){
margin-left: 2rem;
border: .1rem solid var(--secondary);
}
.card:first-child{
margin-left: .4rem;
border: .1rem solid var(--secondary);
}
.card:hover {
border: .2rem solid var(--secondary);
transform: scale(1.05);
}
.card .card-top-img{
margin-top: 2rem;
}
.card::before, .card::after {
position: absolute;
/* content: "";
background-color: var(--secondary);
border-radius: 50%;
transition: .5s ease-in-out;*/
z-index: 100;
}
.card::before {
top: -6%;
right: -6%;
width: 9rem;
height: 9rem;
}
.card::after {
bottom: -6%;
left: -6%;
width: 5rem;
height: 5rem;
}
.card:hover::before {
transform: scale(1.8);
}
.card:hover::after {
transform: scale(0);
}
.card-content {
position: absolute;
top:0;
left:0;
width: 100%;
height: 100%;
display: flex;
flex-direction: column;
justify-content: space-between;
align-items: center;
z-index: 200;
}
.card-content img {
margin-top: 2rem;
}
.card-img,
.card-title {
transform: translateY(4rem);
transition: .5s ease-in-out;
color: #13533A;
font-size: 18px;
text-align: center;
}
.card-img {
width: auto;
height: 9.5rem;
}
.card-title {
text-transform: capitalize;
transition-delay: .1s;
color: #13533A;
font-size: 18px;
}
.card-body,
.card-footer {
transform: translateY(10rem);
padding: 0;
transition: .5s ease-in-out;
}
.card-body {
width: 100%;
display: flex;
justify-content: space-around;
align-items: center;
transition-delay: .2s;
}
.card:hover .card-img,
.card:hover .card-title,
.card:hover .card-body,
.card:hover .card-footer {
transform: translateY(0);
}
.card-footer {
transition-delay: .3s;
}
.button-slider {
width: max-content;
padding: 1rem 1rem;
text-wrap: nowrap;
font-size: 0.8rem;
}
.slider-footer {
width: 100%;
display: flex;
justify-content: space-around;
}
.card-body p {
margin-bottom: 0;
color: #111;
}
.card-price {
font: bolder 1.5rem sans-serif;
}
.btn {
padding: 1rem 2rem;
background-color: unset;
border: none;
outline: none;
border-radius: 2rem;
color: #fff;
cursor: pointer;
}
.btn-success {
background-color: var(--secondary);
}
.btn-border {
border: .1rem solid var(--secondary);
}
.arrow{
position: absolute;
/* top: 50%; */
align-self: center;
/* transform: translateY(-50%); */
width: 3rem;
height: 3rem;
background-color: #fff;
color: #000;
border-radius: 50%;
font: 800 1.5rem sans-serif;
text-align: center;
line-height: 3rem;
user-select: none;
cursor: pointer;
z-index: 300;
}
.arrow:active {
background-color: #ddd;
}
.left{
left: 1rem;
}
.right{
right: 1rem;
}
const cards = document.querySelectorAll('.card');
const right_arrow = document.querySelector('.arrow.right');
const left_arrow = document.querySelector('.arrow.left');
let left = 0;
let card_size = 25.4;
let total_card_size = cards.length * card_size - card_size * 4;
if(window.matchMedia('(max-width: 768px)').matches){
card_size = 52;
total_card_size = cards.length * card_size - card_size * 2;
}
if(window.matchMedia('(max-width: 568px)').matches){
card_size = 52;
total_card_size = cards.length * card_size - card_size * 2;
}
left_arrow.onclick = () => {
left -= card_size;
if(left <= 0) left = 0;
moveCards(left);
checkArrowVisibility(left);
}
left_arrow.style.opacity = '0';
right_arrow.onclick = () => {
left += card_size;
if(left >= total_card_size) left = total_card_size;
moveCards(left);
checkArrowVisibility(left);
}
function moveCards(left) {
for(card of cards) {
card.style.left = -left + "%";
}
}
function checkArrowVisibility(pos){
if(pos == 0 ) {
left_arrow.style.opacity = '0';
}else {
left_arrow.style.opacity = '1';
}
if(pos >= total_card_size ) {
right_arrow.style.opacity = '0';
}else {
right_arrow.style.opacity = '1';
}
}
And this is JavaScript.
I have other small thing's on bootstrap too.
I try to copy paste the code on index. I was expecting the code duplicate and work fine.
You can query in element, so group the statements and run it on each section
.
Refe:
document.querySelectorAll('section.slider').forEach(i => {
const cards = i.querySelectorAll('.card');
const right_arrow = i.querySelector('.arrow.right');
const left_arrow = i.querySelector('.arrow.left');
const moveCards = function (left) {
for (card of cards) {
card.style.left = -left + "%";
}
}
const checkArrowVisibility = function (pos) {
if (pos == 0) {
left_arrow.style.opacity = '0';
} else {
left_arrow.style.opacity = '1';
}
if (pos >= total_card_size) {
right_arrow.style.opacity = '0';
} else {
right_arrow.style.opacity = '1';
}
}
let left = 0;
let card_size = 25.4;
let total_card_size = cards.length * card_size - card_size * 4;
if (window.matchMedia('(max-width: 768px)').matches) {
card_size = 52;
total_card_size = cards.length * card_size - card_size * 2;
}
if (window.matchMedia('(max-width: 568px)').matches) {
card_size = 52;
total_card_size = cards.length * card_size - card_size * 2;
}
left_arrow.onclick = () => {
left -= card_size;
if (left <= 0) left = 0;
moveCards(left);
checkArrowVisibility(left);
}
left_arrow.style.opacity = '0';
right_arrow.onclick = () => {
left += card_size;
if (left >= total_card_size) left = total_card_size;
moveCards(left);
checkArrowVisibility(left);
}
})
:root {
--primary: #ffffff;
/* --primary: #fff; */
--secondary: #13533A;
--bg: #0e1523;
/* --bg: #f5f5f5; */
}
* {
margin: 0;
padding: 0;
box-sizing: border-box;
}
body{
/*background-color: var(--bg);*/
overflow-x: hidden;
}
.slider {
/*background-color: var(--bg);*/
padding: 1rem;
height: 100%;
margin: 7rem auto;
display: flex;
/*display: grid;
grid-template-columns: repeat(4, 1fr);
place-items: center;
grid-gap: 2rem;*/
/* font: normal 1rem sans-serif;*/
}
.card {
position: relative;
left: 0;
min-width: 17rem;
height: 23rem;
background-color:var(--primary);
color: #fff;
border-radius: 1rem;
border: .1rem solid transparent;
overflow: hidden;
box-shadow: 0 .2rem .6rem #0003;
transition: .5s ease-in-out;
}
@media screen and (max-width: 768px) {
.card {
min-width: 21rem;
}
}
.card:not(:first-child){
margin-left: 2rem;
border: .1rem solid var(--secondary);
}
.card:first-child{
margin-left: .4rem;
border: .1rem solid var(--secondary);
}
.card:hover {
border: .2rem solid var(--secondary);
transform: scale(1.05);
}
.card .card-top-img{
margin-top: 2rem;
}
.card::before, .card::after {
position: absolute;
/* content: "";
background-color: var(--secondary);
border-radius: 50%;
transition: .5s ease-in-out;*/
z-index: 100;
}
.card::before {
top: -6%;
right: -6%;
width: 9rem;
height: 9rem;
}
.card::after {
bottom: -6%;
left: -6%;
width: 5rem;
height: 5rem;
}
.card:hover::before {
transform: scale(1.8);
}
.card:hover::after {
transform: scale(0);
}
.card-content {
position: absolute;
top:0;
left:0;
width: 100%;
height: 100%;
display: flex;
flex-direction: column;
justify-content: space-between;
align-items: center;
z-index: 200;
}
.card-content img {
margin-top: 2rem;
}
.card-img,
.card-title {
transform: translateY(4rem);
transition: .5s ease-in-out;
color: #13533A;
font-size: 18px;
text-align: center;
}
.card-img {
width: auto;
height: 9.5rem;
}
.card-title {
text-transform: capitalize;
transition-delay: .1s;
color: #13533A;
font-size: 18px;
}
.card-body,
.card-footer {
transform: translateY(10rem);
padding: 0;
transition: .5s ease-in-out;
}
.card-body {
width: 100%;
display: flex;
justify-content: space-around;
align-items: center;
transition-delay: .2s;
}
.card:hover .card-img,
.card:hover .card-title,
.card:hover .card-body,
.card:hover .card-footer {
transform: translateY(0);
}
.card-footer {
transition-delay: .3s;
}
.button-slider {
width: max-content;
padding: 1rem 1rem;
text-wrap: nowrap;
font-size: 0.8rem;
}
.slider-footer {
width: 100%;
display: flex;
justify-content: space-around;
}
.card-body p {
margin-bottom: 0;
color: #111;
}
.card-price {
font: bolder 1.5rem sans-serif;
}
.btn {
padding: 1rem 2rem;
background-color: unset;
border: none;
outline: none;
border-radius: 2rem;
color: #fff;
cursor: pointer;
}
.btn-success {
background-color: var(--secondary);
}
.btn-border {
border: .1rem solid var(--secondary);
}
.arrow{
position: absolute;
/* top: 50%; */
align-self: center;
/* transform: translateY(-50%); */
width: 3rem;
height: 3rem;
background-color: #fff;
color: #000;
border-radius: 50%;
font: 800 1.5rem sans-serif;
text-align: center;
line-height: 3rem;
user-select: none;
cursor: pointer;
z-index: 300;
}
.arrow:active {
background-color: #ddd;
}
.left{
left: 1rem;
}
.right{
right: 1rem;
}
<section class="slider">
<div class="card">
<div class="card-content slider-content">
<img src="images/FotosDestaque/IMG1.png" alt="" class="card-img">
<h1 class="card-title">Caixa Cartão Bolo Rei 28x28x7,5</h1>
<div class="card-body">
<p class="card-price">0,53€* / caixa</p>
</div>
<div class="card-footer slider-footer">
<button onclick="window.location.href='catalogo.php'" class="btn btn-success button-slider">Comprar</button>
</div>
</div>
</div>
<div class="card">
<div class="card-content">
<img src="images/FotosDestaque/IMG2.png" alt="" class="card-img">
<h1 class="card-title">Guardanapo Natal PPP 40x40 Nova Era 24 maços </h1>
<div class="card-body">
<p class="card-price">19,93€* / caixa</p>
</div>
<div class="card-footer slider-footer">
<button onclick="window.location.href='catalogo.php'" class="btn btn-success button-slider">Comprar</button>
</div>
</div>
</div>
<div class="card">
<div class="card-content">
<img src="images/FotosDestaque/IMG3.png" alt="" class="card-img">
<h1 class="card-title">Saco plástico alça Natal medida 50x55</h1>
<div class="card-body">
<p class="card-price">2,50€* / Kg</p>
</div>
<div class="card-footer slider-footer">
<button onclick="window.location.href='catalogo.php'" class="btn btn-success button-slider">Comprar</button>
</div>
</div>
</div>
<div class="card">
<div class="card-content">
<img src="images/FotosDestaque/IMG4.png" alt="" class="card-img">
<h1 class="card-title">Saqueta Bolo Rei 26+8x42 c/ 500 sacos</h1>
<div class="card-body">
<p class="card-price">0,11€* / Saco</p>
</div>
<div class="card-footer slider-footer">
<button onclick="window.location.href='catalogo.php'" class="btn btn-success button-slider">Comprar</button>
</div>
</div>
</div>
<div class="card">
<div class="card-content">
<img src="images/FotosDestaque/IMG5.png" alt="" class="card-img">
<h1 class="card-title">Lava Loiça Profissional Fairy 5 Lts Ultra</h1>
<div class="card-body">
<p class="card-price">8,99€* / uni</p>
</div>
<div class="card-footer slider-footer">
<button onclick="window.location.href='catalogo.php'" class="btn btn-success button-slider">Comprar</button>
</div>
</div>
</div>
<div class="card">
<div class="card-content">
<img src="images/FotosDestaque/IMG6.png" alt="" class="card-img">
<h1 class="card-title">Esfregão Saponificado Favir c/6 Unds</h1>
<div class="card-body">
<p class="card-price">0,49€* / uni</p>
</div>
<div class="card-footer slider-footer">
<button onclick="window.location.href='catalogo.php'" class="btn btn-success button-slider">Comprar</button>
</div>
</div>
</div>
<div class="card">
<div class="card-content">
<img src="images/FotosDestaque/IMG8.png" alt="" class="card-img">
<h1 class="card-title">Bloco Sanitário Senses 60 Grs</h1>
<div class="card-body">
<p class="card-price">0,48€* / uni</p>
</div>
<div class="card-footer slider-footer">
<button onclick="window.location.href='catalogo.php'" class="btn btn-success button-slider">Comprar</button>
</div>
</div>
</div>
<div class="card">
<div class="card-content">
<img src="images/FotosDestaque/IMG7.png" alt="" class="card-img">
<h1 class="card-title">Toalha de mão 21x22 Amoos c/2800 fls</h1>
<div class="card-body">
<p class="card-price">10,46€* / caixa</p>
</div>
<div class="card-footer slider-footer">
<button onclick="window.location.href='catalogo.php'" class="btn btn-success button-slider">Comprar</button>
</div>
</div>
</div>
<div class="card">
<div class="card-content">
<img src="images/FotosDestaque/IMG9.png" alt="" class="card-img">
<h1 class="card-title">Tira Nódoas Fun Clorossan Roupa Branca/cor 800grs</h1>
<div class="card-body">
<p class="card-price">10,46€* / caixa</p>
</div>
<div class="card-footer slider-footer">
<button onclick="window.location.href='catalogo.php'" class="btn btn-success button-slider">Comprar</button>
</div>
</div>
</div>
<span class="arrow left">🡠</span>
<span class="arrow right">🡢</span>
</section>
<section class="slider">
<div class="card">
<div class="card-content slider-content">
<img src="images/FotosDestaque/IMG1.png" alt="" class="card-img">
<h1 class="card-title">Caixa Cartão Bolo Rei 28x28x7,5</h1>
<div class="card-body">
<p class="card-price">0,53€* / caixa</p>
</div>
<div class="card-footer slider-footer">
<button onclick="window.location.href='catalogo.php'" class="btn btn-success button-slider">Comprar</button>
</div>
</div>
</div>
<div class="card">
<div class="card-content">
<img src="images/FotosDestaque/IMG2.png" alt="" class="card-img">
<h1 class="card-title">Guardanapo Natal PPP 40x40 Nova Era 24 maços </h1>
<div class="card-body">
<p class="card-price">19,93€* / caixa</p>
</div>
<div class="card-footer slider-footer">
<button onclick="window.location.href='catalogo.php'" class="btn btn-success button-slider">Comprar</button>
</div>
</div>
</div>
<div class="card">
<div class="card-content">
<img src="images/FotosDestaque/IMG3.png" alt="" class="card-img">
<h1 class="card-title">Saco plástico alça Natal medida 50x55</h1>
<div class="card-body">
<p class="card-price">2,50€* / Kg</p>
</div>
<div class="card-footer slider-footer">
<button onclick="window.location.href='catalogo.php'" class="btn btn-success button-slider">Comprar</button>
</div>
</div>
</div>
<div class="card">
<div class="card-content">
<img src="images/FotosDestaque/IMG4.png" alt="" class="card-img">
<h1 class="card-title">Saqueta Bolo Rei 26+8x42 c/ 500 sacos</h1>
<div class="card-body">
<p class="card-price">0,11€* / Saco</p>
</div>
<div class="card-footer slider-footer">
<button onclick="window.location.href='catalogo.php'" class="btn btn-success button-slider">Comprar</button>
</div>
</div>
</div>
<div class="card">
<div class="card-content">
<img src="images/FotosDestaque/IMG5.png" alt="" class="card-img">
<h1 class="card-title">Lava Loiça Profissional Fairy 5 Lts Ultra</h1>
<div class="card-body">
<p class="card-price">8,99€* / uni</p>
</div>
<div class="card-footer slider-footer">
<button onclick="window.location.href='catalogo.php'" class="btn btn-success button-slider">Comprar</button>
</div>
</div>
</div>
<div class="card">
<div class="card-content">
<img src="images/FotosDestaque/IMG6.png" alt="" class="card-img">
<h1 class="card-title">Esfregão Saponificado Favir c/6 Unds</h1>
<div class="card-body">
<p class="card-price">0,49€* / uni</p>
</div>
<div class="card-footer slider-footer">
<button onclick="window.location.href='catalogo.php'" class="btn btn-success button-slider">Comprar</button>
</div>
</div>
</div>
<div class="card">
<div class="card-content">
<img src="images/FotosDestaque/IMG8.png" alt="" class="card-img">
<h1 class="card-title">Bloco Sanitário Senses 60 Grs</h1>
<div class="card-body">
<p class="card-price">0,48€* / uni</p>
</div>
<div class="card-footer slider-footer">
<button onclick="window.location.href='catalogo.php'" class="btn btn-success button-slider">Comprar</button>
</div>
</div>
</div>
<div class="card">
<div class="card-content">
<img src="images/FotosDestaque/IMG7.png" alt="" class="card-img">
<h1 class="card-title">Toalha de mão 21x22 Amoos c/2800 fls</h1>
<div class="card-body">
<p class="card-price">10,46€* / caixa</p>
</div>
<div class="card-footer slider-footer">
<button onclick="window.location.href='catalogo.php'" class="btn btn-success button-slider">Comprar</button>
</div>
</div>
</div>
<div class="card">
<div class="card-content">
<img src="images/FotosDestaque/IMG9.png" alt="" class="card-img">
<h1 class="card-title">Tira Nódoas Fun Clorossan Roupa Branca/cor 800grs</h1>
<div class="card-body">
<p class="card-price">10,46€* / caixa</p>
</div>
<div class="card-footer slider-footer">
<button onclick="window.location.href='catalogo.php'" class="btn btn-success button-slider">Comprar</button>
</div>
</div>
</div>
<span class="arrow left">🡠</span>
<span class="arrow right">🡢</span>
</section>
<script src="js/scriptDestaques.js"></script>
That's not necessarily the best way, but it ensures your current source can run.