<div class="container">
<article class="card">
<div class="card-image">
<img src="https://i.ibb.co/09nx6Jt/converse.webp" alt="Converse sneakers" />
</div>
<div class="card-details">
<h2 class="title">Converse Sneakers</h2>
<span class="description">High Top (Lemon Yellow)</span>
<span class="price">$60</span>
</div>
<div class="card-colors">
<span class="screen-reader-only">Colors available</span>
<button aria-label="Yellow" class="color-btn">
<div class="color-container">
<div class="color-first yellow"></div>
<div class="color-second white"></div>
</div>
</button>
<button aria-label="Red" class="color-btn">
<div class="color-container">
<div class="color-first red"></div>
<div class="color-second white"></div>
</div>
</button>
<button aria-label="Blue" class="color-btn">
<div class="color-container">
<div class="color-first blue"></div>
<div class="color-second white"></div>
</div>
</button>
<button aria-label="Black" class="color-btn">
<div class="color-container">
<div class="color-first black"></div>
<div class="color-second white"></div>
</div>
</button>
</div>
<div class="card-add">
<button class="add-btn">
<p class="add-text">Add to Cart</p>
<svg class="plus-icon" xmlns="http://www.w3.org/2000/svg" fill="none" viewBox="0 0 24 24" stroke="currentColor">
<path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M12 6v6m0 0v6m0-6h6m-6 0H6" />
</svg>
</button>
</div>
</article>
</div>
@import url("https://fonts.googleapis.com/css2?family=Montserrat:wght@300;400;600;700&display=swap");
/* Reset */
*,
*::before,
*::after {
margin: 0;
padding: 0;
box-sizing: border-box;
}
/* Variables */
:root {
--app-bg-color: hsl(220, 13%, 91%);
--card-bg-color: hsl(0, 0%, 100%);
--text-color: hsl(215, 28%, 17%);
--border: 1px solid hsl(220, 13%, 91%);
}
/* Container */
.container {
height: 100vh;
display: grid;
place-content: center;
padding: 1rem;
font-family: "Montserrat", sans-serif;
background-color: var(--app-bg-color);
color: var(--text-color);
}
/* Card */
.card {
max-width: 24rem;
background-color: var(--card-bg-color);
border-radius: 0.25rem;
box-shadow: 0 10px 15px -3px hsla(0, 0%, 0%, 10%),
0 4px 6px -2px hsla(0, 0%, 0%, 5%);
overflow: hidden; /* for the image covering our border */
}
.card-image img {
display: block;
height: 100%;
width: 100%;
object-fit: cover;
}
.card-details {
display: flex;
flex-direction: column;
gap: 0.5rem;
margin-top: 1rem;
padding: 0 1rem;
}
.title {
font-size: 1.125rem;
font-weight: 600;
}
.description {
font-weight: 400;
}
.price {
font-weight: 600;
}
.card-colors {
display: flex;
gap: 1rem;
margin-top: 1rem;
padding: 0 1rem;
}
.color-btn {
padding: 0.125rem;
background: none;
border: var(--border);
border-radius: 50%;
cursor: pointer;
}
.color-container {
height: 1.5rem;
width: 1.5rem;
transform: rotate(-45deg);
border-radius: inherit;
overflow: hidden;
}
.color-first {
height: 50%;
}
.color-second {
height: 50%;
}
.card-add {
margin-top: 1rem;
padding: 1rem;
border-top: var(--border);
}
.add-btn {
width: 100%;
display: flex;
justify-content: space-between;
align-items: center;
font-family: inherit;
font-weight: 700;
color: inherit;
background: none;
border: none;
cursor: pointer;
}
.add-btn:hover {
text-decoration: underline;
}
.add-text {
font-size: 1rem;
}
.plus-icon {
height: 1.5rem;
width: 1.5rem;
}
/* Utils */
.screen-reader-only {
position: absolute;
width: 1px;
height: 1px;
clip: rect(0, 0, 0, 0);
overflow: hidden;
}
.yellow {
background-color: hsl(38, 92%, 50%);
}
.red {
background-color: hsl(0, 84%, 60%);
}
.blue {
background-color: hsl(217, 91%, 60%);
}
.black {
background-color: hsl(215, 28%, 17%);
}
.white {
background-color: hsl(0, 0%, 100%);
}
/* Media */
@media (prefers-color-scheme: dark) {
:root {
--app-bg-color: hsl(215, 28%, 17%);
--card-bg-color: hsl(217, 19%, 27%);
--text-color: hsl(0, 0%, 100%);
--border: 1px solid hsl(220, 9%, 46%);
}
}
@media (min-width: 640px) {
.container {
padding: 0;
}
}
This Pen doesn't use any external CSS resources.
This Pen doesn't use any external JavaScript resources.