Skip to content

group-*

A gente já sabe que controlar o estado de um elemento, por exemplo, usando a variante hover é muito fácil com o TailwindCSS.

Mas e se quisermos controlar o estado de um elemento baseado em outro elemento? Nesse caso precisamos recorrer ao group-* ou ao peer-* ou ao in-*.

Exercício

Neste exercício, você irá aprimorar um card de produto adicionando interatividade ao passar o mouse sobre a imagem. O objetivo é criar um efeito de zoom na imagem e exibir um botão “Adicione ao Carrinho” que deverá aparecer centralizado acima da imagem. Se quiser, use animações para deixar tudo mais suave.

Código Inicial

<!doctype html>
<html lang="en">
<head>
<meta charset="UTF-8" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
<title>Exercício 02</title>
<link href="../tailwind.css" rel="stylesheet" />
</head>
<body class="flex min-h-screen items-center justify-center bg-gray-100 p-4">
<div class="w-full max-w-sm overflow-hidden rounded-lg bg-white shadow-lg">
<div class="">
<img
src="./product.jpg"
alt="Relógio"
class="h-auto w-full object-cover"
/>
</div>
<footer class="p-4">
<h3 class="text-xl font-semibold text-gray-800">Relógio Coder</h3>
<p class="mt-2 text-lg font-bold text-gray-600">R$ 99,99</p>
<p class="mt-2 text-sm text-gray-500">
Este é um relógio muito especial que traz snippets de código
diretamente no seu pulso!
</p>
</footer>
</div>
</body>
</html>

Código Final

<!doctype html>
<html lang="en">
<head>
<meta charset="UTF-8" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
<title>Exercício 02</title>
<link href="../tailwind.css" rel="stylesheet" />
</head>
<body class="flex min-h-screen items-center justify-center bg-gray-100 p-4">
<div
class="group w-full max-w-sm overflow-hidden rounded-lg bg-white shadow-lg"
>
<div class="relative overflow-hidden">
<img
src="./product.jpg"
alt="Relógio"
class="h-auto w-full object-cover transition-transform group-hover:scale-125"
/>
<div
class="absolute inset-0 flex items-center justify-center bg-gray-300/90 opacity-0 transition-all group-hover:opacity-100"
>
<button
class="invisible h-fit w-fit translate-y-10 cursor-pointer rounded-full bg-black px-4 py-2 text-white opacity-0 transition-all group-hover:visible group-hover:translate-0 group-hover:opacity-100"
>
Adicione ao Carrinho
</button>
</div>
</div>
<footer class="p-4">
<h3 class="text-xl font-semibold text-gray-800">Relógio Coder</h3>
<p class="mt-2 text-lg font-bold text-gray-600">R$ 99,99</p>
<p class="mt-2 text-sm text-gray-500">
Este é um relógio muito especial que traz snippets de código
diretamente no seu pulso!
</p>
</footer>
</div>
</body>
</html>

Nomeando grupos

Imagine agora que você precisa usar mais de um grupo diferente no seu código - o Tailwind não tem como saber com qual grupo você está trabalhando. Isso é possível de ser resolvido nomeando os grupos

A sintaxe de grupos nomeados é group/nome, em que nome pode ser qualquer identificador. Para usar uma variante de hover do grupo, a sintaxe é: group-hover/nome:*

A variante in-*

A variante in-* tem o funcionamento igual ao do group. A única diferença é que ela funciona com o estado do(s) elemento(s) pai. Não dá para