//DOM Elements
const getCardsElm = document.getElementById("cards");
const data = {
"img": "https://placehold.it/400",
"brand": "Some brand",
"url": "somelink.com",
"service": "Google Analytics, Facebook Pixel",
"social": [
{
"link": "https://facebook.com",
"name": "Facebook"
},
{
"link": "https://instagram.com",
"name": "Instagram"
}
]
}
let filledArray = [...new Array(10)].map(()=> data);
const setupCards = (array) => {
let html = '';
array.forEach(({ img, url, brand, service, social }) => {
let socialLinks = '';
social.map(({ link, name }, idx, social) => {
socialLinks += `<a key=${name} href=${link} target="_blank" rel="noopener noreferrer">
${social.length + 1 !== idx && idx !== 0 ? `, ${name}` : name}
</a>`
})
// For Each
// social.forEach(({ link, name }, idx, social) => {
// socialLinks += `<a key=${name} href=${link} target="_blank" rel="noopener noreferrer">
// ${social.length + 1 !== idx && idx !== 0 ? `, ${name}` : name}
// </a>`
// })
const card = `
<div class="card">
<div class="card-inner">
<div class="card-front">
<img src=${img} alt="logo">
</div>
<div class="card-back">
<h3>${brand}</h3>
<p><strong>Website:</strong> <a href="https://${url}" target="_blank" rel="noopener noreferrer">${url}</a></p>
<p><strong>Social:</strong> ${socialLinks}</p>
<p><strong>Services:</strong> ${service}</p>
</div>
</div>
</div>
`;
html += card
})
getCardsElm.innerHTML = html;
}
setupCards(filledArray);
*, *::before, *::after {
margin: 0;
padding: 0;
box-sizing: border-box;
}
.cards {
display: flex;
flex-wrap: wrap;
justify-content: center;
align-items: center;
}
.card {
cursor: pointer;
background-color: transparent;
height: 300px;
width: 300px;
margin: 10px;
perspective: 1000px;
}
.card h1 {
font-size: 25px;
border-bottom: 1px #fff solid;
padding-bottom: 10px;
margin-bottom: 10px;
}
.card img {
width: 100%;
height: 300px;
object-fit: cover;
}
.card-inner {
position: relative;
width: 100%;
height: 100%;
transition: transform 0.8s;
transform-style: preserve-3d;
}
.card:hover .card-inner {
transform: rotateY(180deg);
}
.card-front,
.card-back {
position: absolute;
width: 100%;
height: 100%;
-webkit-backface-visibility: hidden;
backface-visibility: hidden;
}
.card-back {
background-color: #333;
color: white;
padding: 20px;
transform: rotateY(180deg);
}
.card li {
list-style: none;
padding-bottom: 10px;
}
<h3>working example with reactjs <a href="https://tech-solutions.vercel.app/#portfolio">link</a></h3>
<div class="cards" id="cards"></div>