<div class="product">
<div class="product-img">
<figure><img src="photo-1631233999975-3d559f0526e1.webp" alt=""></figure>
</div>
<div class="product-info">
<h2>The Jessica Gown</h2>
<a class="brand" href="#">Disco & Co.</a>
<p class="price">$2399.95</p>
<small>Or 4 interest-free installments of $599.99 with <a href="#">MeowCatPay</a></small>
<hr />
<div class="color-options">
<p class="preview"><b>Color:</b> White</p>
<ul class="color-list">
<li class="color" style="background: white;">white</li>
<li class="color" style="background: beige;">beige</li>
</ul>
</div>
<div class="size-options">
<p><b>Size:</b></p>
<ul class="size-list">
<li>
<input type="radio" name="selectedSize" id="size-xxs" value="xxs">
<label for="size-xxs">XXS</label>
</li>
<li>
<input type="radio" name="selectedSize" id="size-xs" value="xs">
<label for="size-xs">XS</label>
</li>
<li>
<input type="radio" name="selectedSize" id="size-s" value="s">
<label for="size-s">S</label>
</li>
<li>
<input type="radio" name="selectedSize" id="size-m" value="m">
<label for="size-m">M</label>
</li>
<li>
<input type="radio" name="selectedSize" id="size-l" value="l">
<label for="size-l">L</label>
</li>
<li>
<input type="radio" name="selectedSize" id="size-xl" value="xl">
<label for="size-xl">XL</label>
</li>
<li>
<input type="radio" name="selectedSize" id="size-xxl" value="xxl">
<label for="size-xxl">XXL</label>
</li>
</ul>
<button id="size-guide-btn" popovertarget="size-guide">Size Guide</button>
</div>
<form class="add-to-cart-form">
<label class="quantity-label" for="quantity"><b>Quantity:</b></label>
<input type="number" id="quantity" value="1">
<button class="add-to-cart-btn" type="submit">Add to Cart</button>
</form>
<p>Free Shipping on Orders $150+</p>
<p>Please select a size to check store availability.</p>
</div>
</div>
<div id="size-guide" popover>
<button class="close-btn" popovertarget="size-guide" popovertargetaction="hide">
<span aria-hidden="true">❌</span>
<p class="sr-only">Close</p>
</button>
<h2>Size Guide: Dresses</h2>
<table border="0" cellpadding="2" cellspacing="2">
<thead>
<tr>
<th></th>
<th>XXS</th>
<th>XS</th>
<th>S</th>
<th>M</th>
<th>L</th>
<th>XL</th>
</tr>
</thead>
<tbody>
<tr>
<th scope="row">US Size (Numeric)</th>
<td>00</td>
<td>0<br>2</td>
<td>4<br>6</td>
<td>8<br>10</td>
<td>12<br>14</td>
<td>16</td>
</tr>
<tr>
<th scope="row">Bust</th>
<td>32</td>
<td>33<br>34</td>
<td>35<br>36</td>
<td>37<br>38</td>
<td>39.5<br>41</td>
<td>42.5</td>
</tr>
<tr>
<th scope="row">Natural Waist</th>
<td>24</td>
<td>25<br>26</td>
<td>27<br>28</td>
<td>29<br>30</td>
<td>31.5<br>33</td>
<td>34.5</td>
</tr>
<tr>
<th scope="row">Drop Waist</th>
<td>26</td>
<td>27<br>28</td>
<td>29<br>30</td>
<td>31<br>32</td>
<td>33.5<br>35</td>
<td>36.5</td>
</tr>
<tr>
<th scope="row">Hips</th>
<td>34</td>
<td>35<br>36</td>
<td>37<br>38</td>
<td>39<br>40</td>
<td>41.5<br>43</td>
<td>44.5</td>
</tr>
</tbody>
</table>
<div class="measurements">
<h2>How to take measurements</h2>
<ul class="measurements-guide">
<li><b>Bust:</b> Stand with your arms relaxed at your sides. Place the measuring tape under your arms, at the fullest part of your bust. Keep the tape level across your shoulder blades.</li>
<li><b>Natural Waist:</b> Stand up straight and find the natural crease of your waist. Place the measuring tape around your waist, keeping the tape comfortably loose.</li>
<li><b>Drop Waist:</b> Measure around your body 1 1/2 inches below your natural waist.</li>
<li><b>Hips:</b> Stand with your feet together. Place the measuring tape around the fullest part of your hips</li>
</ul>
</div>
</div>
/* Popover things */
#size-guide::backdrop {
background: rgba(190, 190, 190, 0.5);
}
#size-guide {
padding: 3rem;
border: none;
width: clamp(300px, 80vw, 600px);
max-height: 480px;
}
#size-guide h2 {
margin: 0 0 1rem;
}
.close-btn {
filter: grayscale();
position: absolute;
top: 1rem;
right: 1rem;
background: none;
border: none;
font-size: 1.25rem;
}
/* Animating */
#size-guide {
&:popover-open {
/* 0. BEFORE-OPEN STATE */
/* initial state for what we're animating *in* from,
in this case: goes from lower (y + 20px) to center */
@starting-style {
transform: translateY(20px);
opacity: 0;
}
/* 1. OPEN STATE */
/* state when popover is open, BOTH:
what we're transitioning *in* to
and transitioning *out* from */
transform: translateY(0);
opacity: 1;
}
/* 2. AFTER-OPEN-IS-CLOSED STATE */
/* initial state for what we're animating *out* to ,
in this case: goes from center to (y - 50px) higher */
transform: translateY(-50px);
opacity: 0;
/* enumarate transitioning properties, including display */
transition: transform 0.5s, opacity 0.5s, display 0.5s;
transition-behavior: allow-discrete;
}
/* Style things */
:root {
--blue: #4a9fe0;
--darkblue: #616183;
--gray-bg: #f0f0f0;
--peppermint: #e9f2e1;
--lightgreen: #fdfdf9;
}
table {
border-collapse: collapse;
width: 100%;
}
th,
td {
border: 1px solid #ccc;
padding: 1rem;
text-align: center;
}
th {
background-color: var(--peppermint);
font-weight: 400;
}
td {
background-color: var(--lightgreen);
font-weight: 300;
}
h2 {
margin-bottom: 0;
font-size: 1.6rem;
letter-spacing: 2px;
font-weight: 400;
}
small {
max-width: 25ch;
display: inline-block;
}
.price {
font-size: 1.4rem;
font-weight: 300;
margin-bottom: 0.5rem;
}
hr {
margin: 1rem 0;
border-color: lightgray;
border-top: none;
}
a,
#size-guide-btn {
font-family: "Roboto Mono", monospace;
color: var(--blue);
}
#size-guide-btn {
border: 0;
background: none;
text-decoration: underline;
padding: 0;
cursor: pointer;
}
body {
padding: 1rem;
}
figure {
height: 550px;
min-width: 300px;
margin: 0;
}
img {
width: 100%;
height: 100%;
object-fit: cover;
}
ul {
margin: 0;
padding: 0;
}
li {
list-style: none;
}
.size-list {
display: flex;
flex-wrap: wrap;
gap: 0.5rem;
margin: 0 0 1rem;
}
.size-list label {
background: var(--gray-bg);
padding: 0.5rem 1rem;
display: inline-block;
}
.size-list input {
display: none;
}
.size-list label:hover,
.size-list label:focus {
color: var(--blue);
outline: 1px solid;
}
.size-list li:has(:checked) {
outline: 1px solid;
}
.product {
display: grid;
grid-template-columns: 1fr 1fr;
gap: 1rem;
margin: 0 auto;
max-width: 900px;
}
.color-list {
margin-top: 1rem;
padding: 0;
display: flex;
gap: 0.25rem;
}
.color-list li {
font-size: 0;
width: 1rem;
height: 1rem;
display: inline-block;
border-radius: 50%;
position: relative;
border: 1px solid;
}
.quantity-label {
display: block;
margin: 1rem 0 0.5rem;
}
#quantity {
font-size: 1.3rem;
max-width: 3rem;
margin-bottom: 1rem;
}
.add-to-cart-btn {
border: 1px solid;
font-weight: lighter;
padding: 1rem;
text-transform: uppercase;
letter-spacing: 2.5px;
width: 100%;
background: var(--darkblue);
color: white;
}
.measurements {
margin-top: 2rem;
}
.measurements-guide li {
line-height: 1.5;
list-style: disc;
margin-left: 2rem;
margin-top: 1rem;
}
.sr-only:not(:focus):not(:active) {
clip: rect(0 0 0 0);
clip-path: inset(50%);
height: 1px;
overflow: hidden;
position: absolute;
white-space: nowrap;
width: 1px;
}