HTML
Copy
<div><span class="mb-4 block text-[.72rem] tracking-[.12em] text-[#5c574f] uppercase">One card, three containers (container queries)</span>
<div class="grid grid-cols-[220px_minmax(0,460px)_1fr] items-start gap-5 max-sm:grid-cols-1">
<div><span class="mb-2 block text-[.72rem] font-semibold text-[#5c574f]">Narrow column</span>
<div class="@container"><article class="grid grid-cols-1 overflow-hidden rounded-[18px] border border-[#e6e1d8] bg-white @min-[360px]:grid-cols-[140px_1fr] @min-[620px]:grid-cols-[260px_1fr]">
<div class="relative aspect-square overflow-hidden bg-[#ece8e1] @min-[360px]:aspect-auto @min-[360px]:min-h-[160px]"><img class="block size-full object-cover @min-[360px]:absolute @min-[360px]:inset-0" src="https://images.unsplash.com/photo-1617897903246-719242758050?auto=format&fit=crop&w=600&q=70" alt="Glass dropper bottle of golden oil on a round wooden board with eucalyptus" width="600" height="600" loading="lazy"></div>
<div class="flex flex-col gap-1.5 p-4 @min-[620px]:gap-2 @min-[620px]:px-[26px] @min-[620px]:py-6">
<p class="text-[.7rem] font-bold tracking-[.12em] text-[#3f6b4f] uppercase">Skincare · 30 ml</p>
<h3 class="text-base leading-[1.3] font-bold @min-[620px]:text-[1.3rem]"><a href="#" class="underline-offset-3 hover:underline focus-visible:outline-3 focus-visible:outline-offset-2 focus-visible:outline-[#2563eb]">Rosehip Face Oil</a></h3>
<p class="flex items-center gap-1.5 text-[.8rem] text-[#5c574f]"><span class="bg-[linear-gradient(90deg,#b45309_92%,#d6d3d1_0)] bg-clip-text text-[.9rem] leading-none tracking-[1px] text-transparent" aria-hidden="true">★★★★★</span><span class="sr-only">Rated 4.6 out of 5, 391 reviews</span><span aria-hidden="true">4.6 (391)</span></p>
<p class="hidden text-[.85rem] text-[#5c574f] @min-[360px]:block">Cold-pressed rosehip and jojoba for dry skin. Absorbs in a minute, no fragrance.</p>
<ul class="mt-1 hidden flex-wrap gap-1.5 @min-[620px]:flex"><li class="rounded-full bg-[#ece8e1] px-2.5 py-[3px] text-xs font-semibold">Vegan</li><li class="rounded-full bg-[#ece8e1] px-2.5 py-[3px] text-xs font-semibold">Refillable glass</li><li class="rounded-full bg-[#ece8e1] px-2.5 py-[3px] text-xs font-semibold">Made in small batches</li></ul>
<div class="mt-1.5 flex flex-wrap items-center justify-between gap-2.5"><p class="text-[1.15rem] font-extrabold @min-[620px]:text-[1.4rem]">$26</p><button type="button" class="flex-auto cursor-pointer rounded-[10px] bg-[#1f1d1a] px-4 py-2.5 text-[.88rem] font-bold text-white transition-colors duration-150 hover:bg-[#3f6b4f] focus-visible:outline-3 focus-visible:outline-offset-2 focus-visible:outline-[#2563eb] @min-[360px]:flex-none @min-[620px]:px-[22px] @min-[620px]:py-3 motion-reduce:transition-none">Add<span class="sr-only"> Rosehip Face Oil</span> to cart</button></div>
</div>
</article></div></div>
<div><span class="mb-2 block text-[.72rem] font-semibold text-[#5c574f]">Medium column</span>
<div class="@container"><article class="grid grid-cols-1 overflow-hidden rounded-[18px] border border-[#e6e1d8] bg-white @min-[360px]:grid-cols-[140px_1fr] @min-[620px]:grid-cols-[260px_1fr]">
<div class="relative aspect-square overflow-hidden bg-[#ece8e1] @min-[360px]:aspect-auto @min-[360px]:min-h-[160px]"><img class="block size-full object-cover @min-[360px]:absolute @min-[360px]:inset-0" src="https://images.unsplash.com/photo-1617897903246-719242758050?auto=format&fit=crop&w=600&q=70" alt="Glass dropper bottle of golden oil on a round wooden board with eucalyptus" width="600" height="600" loading="lazy"></div>
<div class="flex flex-col gap-1.5 p-4 @min-[620px]:gap-2 @min-[620px]:px-[26px] @min-[620px]:py-6">
<p class="text-[.7rem] font-bold tracking-[.12em] text-[#3f6b4f] uppercase">Skincare · 30 ml</p>
<h3 class="text-base leading-[1.3] font-bold @min-[620px]:text-[1.3rem]"><a href="#" class="underline-offset-3 hover:underline focus-visible:outline-3 focus-visible:outline-offset-2 focus-visible:outline-[#2563eb]">Rosehip Face Oil</a></h3>
<p class="flex items-center gap-1.5 text-[.8rem] text-[#5c574f]"><span class="bg-[linear-gradient(90deg,#b45309_92%,#d6d3d1_0)] bg-clip-text text-[.9rem] leading-none tracking-[1px] text-transparent" aria-hidden="true">★★★★★</span><span class="sr-only">Rated 4.6 out of 5, 391 reviews</span><span aria-hidden="true">4.6 (391)</span></p>
<p class="hidden text-[.85rem] text-[#5c574f] @min-[360px]:block">Cold-pressed rosehip and jojoba for dry skin. Absorbs in a minute, no fragrance.</p>
<ul class="mt-1 hidden flex-wrap gap-1.5 @min-[620px]:flex"><li class="rounded-full bg-[#ece8e1] px-2.5 py-[3px] text-xs font-semibold">Vegan</li><li class="rounded-full bg-[#ece8e1] px-2.5 py-[3px] text-xs font-semibold">Refillable glass</li><li class="rounded-full bg-[#ece8e1] px-2.5 py-[3px] text-xs font-semibold">Made in small batches</li></ul>
<div class="mt-1.5 flex flex-wrap items-center justify-between gap-2.5"><p class="text-[1.15rem] font-extrabold @min-[620px]:text-[1.4rem]">$26</p><button type="button" class="flex-auto cursor-pointer rounded-[10px] bg-[#1f1d1a] px-4 py-2.5 text-[.88rem] font-bold text-white transition-colors duration-150 hover:bg-[#3f6b4f] focus-visible:outline-3 focus-visible:outline-offset-2 focus-visible:outline-[#2563eb] @min-[360px]:flex-none @min-[620px]:px-[22px] @min-[620px]:py-3 motion-reduce:transition-none">Add<span class="sr-only"> Rosehip Face Oil</span> to cart</button></div>
</div>
</article></div></div>
<div class="col-span-full"><span class="mb-2 block text-[.72rem] font-semibold text-[#5c574f]">Full width</span>
<div class="@container"><article class="grid grid-cols-1 overflow-hidden rounded-[18px] border border-[#e6e1d8] bg-white @min-[360px]:grid-cols-[140px_1fr] @min-[620px]:grid-cols-[260px_1fr]">
<div class="relative aspect-square overflow-hidden bg-[#ece8e1] @min-[360px]:aspect-auto @min-[360px]:min-h-[160px]"><img class="block size-full object-cover @min-[360px]:absolute @min-[360px]:inset-0" src="https://images.unsplash.com/photo-1617897903246-719242758050?auto=format&fit=crop&w=600&q=70" alt="Glass dropper bottle of golden oil on a round wooden board with eucalyptus" width="600" height="600" loading="lazy"></div>
<div class="flex flex-col gap-1.5 p-4 @min-[620px]:gap-2 @min-[620px]:px-[26px] @min-[620px]:py-6">
<p class="text-[.7rem] font-bold tracking-[.12em] text-[#3f6b4f] uppercase">Skincare · 30 ml</p>
<h3 class="text-base leading-[1.3] font-bold @min-[620px]:text-[1.3rem]"><a href="#" class="underline-offset-3 hover:underline focus-visible:outline-3 focus-visible:outline-offset-2 focus-visible:outline-[#2563eb]">Rosehip Face Oil</a></h3>
<p class="flex items-center gap-1.5 text-[.8rem] text-[#5c574f]"><span class="bg-[linear-gradient(90deg,#b45309_92%,#d6d3d1_0)] bg-clip-text text-[.9rem] leading-none tracking-[1px] text-transparent" aria-hidden="true">★★★★★</span><span class="sr-only">Rated 4.6 out of 5, 391 reviews</span><span aria-hidden="true">4.6 (391)</span></p>
<p class="hidden text-[.85rem] text-[#5c574f] @min-[360px]:block">Cold-pressed rosehip and jojoba for dry skin. Absorbs in a minute, no fragrance.</p>
<ul class="mt-1 hidden flex-wrap gap-1.5 @min-[620px]:flex"><li class="rounded-full bg-[#ece8e1] px-2.5 py-[3px] text-xs font-semibold">Vegan</li><li class="rounded-full bg-[#ece8e1] px-2.5 py-[3px] text-xs font-semibold">Refillable glass</li><li class="rounded-full bg-[#ece8e1] px-2.5 py-[3px] text-xs font-semibold">Made in small batches</li></ul>
<div class="mt-1.5 flex flex-wrap items-center justify-between gap-2.5"><p class="text-[1.15rem] font-extrabold @min-[620px]:text-[1.4rem]">$26</p><button type="button" class="flex-auto cursor-pointer rounded-[10px] bg-[#1f1d1a] px-4 py-2.5 text-[.88rem] font-bold text-white transition-colors duration-150 hover:bg-[#3f6b4f] focus-visible:outline-3 focus-visible:outline-offset-2 focus-visible:outline-[#2563eb] @min-[360px]:flex-none @min-[620px]:px-[22px] @min-[620px]:py-3 motion-reduce:transition-none">Add<span class="sr-only"> Rosehip Face Oil</span> to cart</button></div>
</div>
</article></div></div>
</div></div>
<div><span class="mb-4 block text-[.72rem] tracking-[.12em] text-[#5c574f] uppercase">Variant picker with :has() and a popover size guide</span>
<div class="@container"><article class="group/mb grid grid-cols-1 overflow-hidden rounded-[22px] border-2 border-(--mb-accent) bg-white transition-colors duration-300 [--mb-accent:#3f6b4f] has-[input[value=clay]:checked]:[--mb-accent:#b4532a] has-[input[value=clay]:checked]:[--mb-tint:hue-rotate(240deg)_saturate(1.4)] has-[input[value=ocean]:checked]:[--mb-accent:#1d5f8a] has-[input[value=ocean]:checked]:[--mb-tint:hue-rotate(60deg)] has-[input[value=charcoal]:checked]:[--mb-accent:#3f3f46] has-[input[value=charcoal]:checked]:[--mb-tint:saturate(0)_brightness(.6)] motion-reduce:transition-none @min-[560px]:grid-cols-[minmax(0,1fr)_minmax(0,1.1fr)]">
<div class="relative aspect-square overflow-hidden bg-[#ece8e1] @min-[560px]:aspect-auto @min-[560px]:min-h-[380px]"><img class="block size-full object-cover [filter:var(--mb-tint,none)] transition-[filter] duration-400 motion-reduce:transition-none @min-[560px]:absolute @min-[560px]:inset-0" src="https://images.unsplash.com/photo-1602143407151-7111542de6e8?auto=format&fit=crop&w=700&q=70" alt="Matte insulated steel water bottle standing on a pale surface" width="700" height="700" loading="lazy"></div>
<div class="flex flex-col gap-3 p-[22px] @min-[560px]:px-[30px] @min-[560px]:py-7">
<p class="text-[.7rem] font-bold tracking-[.12em] text-(--mb-accent) uppercase transition-colors duration-300 motion-reduce:transition-none">Everyday carry</p>
<h3 class="text-[1.35rem] leading-[1.3] font-bold"><a href="#" class="underline-offset-3 hover:underline focus-visible:outline-3 focus-visible:outline-offset-2 focus-visible:outline-[#2563eb]">Insulated Steel Bottle</a></h3>
<p class="flex items-center gap-1.5 text-[.8rem] text-[#5c574f]"><span class="bg-[linear-gradient(90deg,#b45309_92%,#d6d3d1_0)] bg-clip-text text-[.9rem] leading-none tracking-[1px] text-transparent" aria-hidden="true">★★★★★</span><span class="sr-only">Rated 4.6 out of 5, 1,284 reviews</span><span aria-hidden="true">4.6 (1,284)</span></p>
<fieldset class="min-w-0"><legend class="mb-2 flex gap-1.5 text-xs font-bold tracking-[.08em] text-[#5c574f] uppercase">Colour: <span class="text-[#1f1d1a]"><span data-colour="sage" class="hidden opacity-100 transition-opacity duration-300 group-has-[input[value=sage]:checked]/mb:inline starting:opacity-0 motion-reduce:transition-none">Sage</span><span data-colour="clay" class="hidden opacity-100 transition-opacity duration-300 group-has-[input[value=clay]:checked]/mb:inline starting:opacity-0 motion-reduce:transition-none">Clay</span><span data-colour="ocean" class="hidden opacity-100 transition-opacity duration-300 group-has-[input[value=ocean]:checked]/mb:inline starting:opacity-0 motion-reduce:transition-none">Ocean</span><span data-colour="charcoal" class="hidden opacity-100 transition-opacity duration-300 group-has-[input[value=charcoal]:checked]/mb:inline starting:opacity-0 motion-reduce:transition-none">Charcoal</span></span></legend>
<div class="flex flex-wrap gap-2">
<label class="group/o cursor-pointer"><input class="sr-only" type="radio" name="mb-colour" value="sage" checked><i class="block size-[30px] rounded-full bg-[#5f7f6a] shadow-[inset_0_0_0_1px_rgba(0,0,0,.25)] group-has-checked/o:shadow-[inset_0_0_0_1px_rgba(0,0,0,.25),0_0_0_2px_#fff,0_0_0_4px_var(--mb-accent)] group-has-focus-visible/o:outline-3 group-has-focus-visible/o:outline-offset-3 group-has-focus-visible/o:outline-[#2563eb]"></i><span class="sr-only">Sage</span></label>
<label class="group/o cursor-pointer"><input class="sr-only" type="radio" name="mb-colour" value="clay"><i class="block size-[30px] rounded-full bg-[#b4532a] shadow-[inset_0_0_0_1px_rgba(0,0,0,.25)] group-has-checked/o:shadow-[inset_0_0_0_1px_rgba(0,0,0,.25),0_0_0_2px_#fff,0_0_0_4px_var(--mb-accent)] group-has-focus-visible/o:outline-3 group-has-focus-visible/o:outline-offset-3 group-has-focus-visible/o:outline-[#2563eb]"></i><span class="sr-only">Clay</span></label>
<label class="group/o cursor-pointer"><input class="sr-only" type="radio" name="mb-colour" value="ocean"><i class="block size-[30px] rounded-full bg-[#1d5f8a] shadow-[inset_0_0_0_1px_rgba(0,0,0,.25)] group-has-checked/o:shadow-[inset_0_0_0_1px_rgba(0,0,0,.25),0_0_0_2px_#fff,0_0_0_4px_var(--mb-accent)] group-has-focus-visible/o:outline-3 group-has-focus-visible/o:outline-offset-3 group-has-focus-visible/o:outline-[#2563eb]"></i><span class="sr-only">Ocean</span></label>
<label class="group/o cursor-pointer"><input class="sr-only" type="radio" name="mb-colour" value="charcoal"><i class="block size-[30px] rounded-full bg-[#3f3f46] shadow-[inset_0_0_0_1px_rgba(0,0,0,.25)] group-has-checked/o:shadow-[inset_0_0_0_1px_rgba(0,0,0,.25),0_0_0_2px_#fff,0_0_0_4px_var(--mb-accent)] group-has-focus-visible/o:outline-3 group-has-focus-visible/o:outline-offset-3 group-has-focus-visible/o:outline-[#2563eb]"></i><span class="sr-only">Charcoal</span></label>
</div>
</fieldset>
<fieldset class="min-w-0"><legend class="mb-2 flex gap-1.5 text-xs font-bold tracking-[.08em] text-[#5c574f] uppercase">Size</legend>
<div class="flex flex-wrap gap-2">
<label class="group/o cursor-pointer"><input class="sr-only" type="radio" name="mb-size" value="500"><span class="block rounded-[10px] border-[1.5px] border-[#9c958a] px-3.5 py-2 text-[.85rem] font-bold transition-colors duration-200 group-has-checked/o:border-(--mb-accent) group-has-checked/o:bg-(--mb-accent) group-has-checked/o:text-white group-has-focus-visible/o:outline-3 group-has-focus-visible/o:outline-offset-3 group-has-focus-visible/o:outline-[#2563eb] motion-reduce:transition-none">500 ml</span></label>
<label class="group/o cursor-pointer"><input class="sr-only" type="radio" name="mb-size" value="750" checked><span class="block rounded-[10px] border-[1.5px] border-[#9c958a] px-3.5 py-2 text-[.85rem] font-bold transition-colors duration-200 group-has-checked/o:border-(--mb-accent) group-has-checked/o:bg-(--mb-accent) group-has-checked/o:text-white group-has-focus-visible/o:outline-3 group-has-focus-visible/o:outline-offset-3 group-has-focus-visible/o:outline-[#2563eb] motion-reduce:transition-none">750 ml</span></label>
<label class="group/o cursor-pointer"><input class="sr-only" type="radio" name="mb-size" value="1000"><span class="block rounded-[10px] border-[1.5px] border-[#9c958a] px-3.5 py-2 text-[.85rem] font-bold transition-colors duration-200 group-has-checked/o:border-(--mb-accent) group-has-checked/o:bg-(--mb-accent) group-has-checked/o:text-white group-has-focus-visible/o:outline-3 group-has-focus-visible/o:outline-offset-3 group-has-focus-visible/o:outline-[#2563eb] motion-reduce:transition-none">1 litre</span></label>
</div>
</fieldset>
<div class="flex flex-wrap items-center gap-x-3.5 gap-y-2.5">
<p class="text-[1.5rem] font-extrabold"><span data-size="500" class="hidden group-has-[input[value='500']:checked]/mb:inline">$29</span><span data-size="750" class="hidden group-has-[input[value='750']:checked]/mb:inline">$34</span><span data-size="1000" class="hidden group-has-[input[value='1000']:checked]/mb:inline">$39</span></p>
<button type="button" class="cursor-pointer text-[.85rem] font-semibold underline underline-offset-3 focus-visible:outline-3 focus-visible:outline-offset-2 focus-visible:outline-[#2563eb]" popovertarget="mb-guide">Size guide</button>
</div>
<button type="button" class="cursor-pointer rounded-[10px] bg-(--mb-accent) px-4 py-2.5 text-[.88rem] font-bold text-white transition-colors duration-300 hover:bg-[#1f1d1a] focus-visible:outline-3 focus-visible:outline-offset-2 focus-visible:outline-[#2563eb] motion-reduce:transition-none">Add<span class="sr-only"> Insulated Steel Bottle</span> to cart</button>
</div>
</article></div>
<div class="m-auto w-[min(360px,calc(100%-32px))] translate-y-2 scale-97 rounded-[18px] bg-white p-[22px] text-[#1f1d1a] opacity-0 shadow-[0_30px_70px_-20px_rgba(31,29,26,.45)] transition-[opacity,translate,scale,overlay,display] transition-discrete duration-[220ms] backdrop:bg-[rgba(31,29,26,.35)] open:translate-y-0 open:scale-100 open:opacity-100 starting:open:translate-y-2 starting:open:scale-97 starting:open:opacity-0 motion-reduce:transition-none" id="mb-guide" popover role="dialog" aria-labelledby="mb-guide-title">
<h4 id="mb-guide-title" class="mb-3 text-[1.05rem] font-bold">Which size?</h4>
<table class="w-full border-collapse text-[.85rem]">
<thead><tr><th scope="col" class="border-b border-[#e6e1d8] px-1 py-2 text-left font-bold">Size</th><th scope="col" class="border-b border-[#e6e1d8] px-1 py-2 text-left font-bold">Good for</th><th scope="col" class="border-b border-[#e6e1d8] px-1 py-2 text-left font-bold">Cold / hot</th></tr></thead>
<tbody>
<tr><th scope="row" class="border-b border-[#e6e1d8] px-1 py-2 text-left font-bold">500 ml</th><td class="border-b border-[#e6e1d8] px-1 py-2 text-[#5c574f]">Commute, school bag</td><td class="border-b border-[#e6e1d8] px-1 py-2 text-[#5c574f]">24 h / 12 h</td></tr>
<tr><th scope="row" class="border-b border-[#e6e1d8] px-1 py-2 text-left font-bold">750 ml</th><td class="border-b border-[#e6e1d8] px-1 py-2 text-[#5c574f]">Desk, gym, cycling</td><td class="border-b border-[#e6e1d8] px-1 py-2 text-[#5c574f]">24 h / 12 h</td></tr>
<tr><th scope="row" class="border-b border-[#e6e1d8] px-1 py-2 text-left font-bold">1 litre</th><td class="border-b border-[#e6e1d8] px-1 py-2 text-[#5c574f]">Hikes, long days out</td><td class="border-b border-[#e6e1d8] px-1 py-2 text-[#5c574f]">36 h / 18 h</td></tr>
</tbody>
</table>
<button type="button" class="absolute top-3.5 right-3.5 grid size-8 cursor-pointer place-items-center rounded-full bg-[#ece8e1] focus-visible:outline-3 focus-visible:outline-offset-2 focus-visible:outline-[#2563eb]" popovertarget="mb-guide" popovertargetaction="hide" aria-label="Close size guide"><svg class="size-4 fill-none stroke-current stroke-[2.2] [stroke-linecap:round]" viewBox="0 0 24 24" aria-hidden="true"><path d="M6 6l12 12M18 6L6 18"/></svg></button>
</div></div>