Conceito e Aplicação em UI
Expliquem com palavras simples o que o efeito faz e mostrem onde ele é usado no dia a dia (botões, cards, menus, feedbacks visuais, avatares, modais).
Cada um dos 8 squads da turma será responsável por pesquisar, construir exemplos práticos em código e apresentar para a sala um dos 8 tópicos sobre Efeitos CSS em Elementos da Unidade Curricular de Linguagem de Marcação. O objetivo é dominar a sintaxe, entender quando aplicar cada efeito em interfaces reais e compartilhar boas práticas com os colegas.
Independentemente do tema atribuído, todos os 8 squads devem estruturar sua apresentação cobrindo os 6 pilares abaixo:
Expliquem com palavras simples o que o efeito faz e mostrem onde ele é usado no dia a dia (botões, cards, menus, feedbacks visuais, avatares, modais).
Apresentem a sintaxe completa no CSS, propriedades individuais, forma abreviada (shorthand), unidades aceitas e valores mais comuns.
Construam um exemplo funcional em HTML + CSS (e JS apenas se necessário para gatilho) para demonstrar ao vivo o código e o resultado no navegador.
Destaquem armadilhas comuns, impacto no layout/performance, compatibilidade e cuidados de acessibilidade (contraste, redução de movimento).
Apresentação objetiva de 5 a 8 minutos por squad, com participação ativa de todos os integrantes e tempo breve para dúvidas da turma.
Projetem o código ampliado no editor e no navegador para que até quem está no fundo da sala consiga ler sem esforço cada propriedade CSS.
O que será observado durante a apresentação de cada squad em sala:
Explicação objetiva para quem nunca usou o recurso, sem apenas ler documentação.
Domínio das propriedades, unidades, valores e diferenças entre sintaxes.
Código limpo, projetado em tamanho grande e legível para toda a sala, funcionando ao vivo e demonstrando o desafio proposto.
Atenção às boas práticas visuais, organização dos slides/demo e divisão de fala.
Filtre pelo tema do seu squad para focar na pesquisa ou navegue por todos os tópicos. Use as prévias interativas para visualizar o comportamento de cada efeito.
Permite suavizar a mudança gradual entre dois estados de um elemento (por exemplo, do
estado normal para :hover ou :focus) ao longo de um tempo definido.
transition-property,
transition-duration (em s ou ms),
transition-timing-function e transition-delay.
linear,
ease, ease-in, ease-out,
ease-in-out e como funciona cubic-bezier().
transition e animar propriedades diferentes com tempos distintos
separadas por vírgula.
:hover, :focus,
:active e troca de classe via JS; por que propriedades como
display: none não interpolam da forma tradicional.
transition: all
indiscriminadamente (pode animar mudanças indesejadas e custar performance). Prefiram
transições curtas entre 150ms e 350ms para micro-interações de UI.
:hover e no
:focus-visible, comparando um elemento sem transition e outro
com transition configurada.
Permite criar sequências completas de animação com múltiplos estágios intermediários
usando @keyframes, podendo rodar automaticamente e em loop sem depender de
um evento de hover.
@keyframes: definição de etapas com
from/to ou porcentagens (0%, 50%,
100%).
animation-name,
animation-duration, animation-timing-function,
animation-delay e animation-iteration-count (ex.:
infinite).
animation-direction
(normal, reverse, alternate),
animation-fill-mode (forwards, backwards,
both) e animation-play-state (paused/running).
@media (prefers-reduced-motion: reduce). Além disso, evitem animar propriedades
que recalculam layout (como width ou top).
@keyframes (ex.: um indicador de carregamento, badge pulsante ou
entrada de card) demonstrando o efeito de animation-fill-mode: forwards ou
alternate.
Gira um elemento em torno de um ponto de origem (pivô) no plano 2D ou em eixos 3D, sem alterar o espaço que ele ocupa no fluxo do documento.
transform: rotate(...) e a propriedade individual moderna
rotate: 45deg (e por que ela facilita combinar transformações).
deg), voltas
(turn, ex: 0.5turn), radianos (rad) e gradianos
(grad), incluindo valores negativos (sentido anti-horário).
rotate() / rotateZ() vs
rotateX(), rotateY() e como perspective cria
profundidade real.
transform-origin (padrão
center vs cantos como top left ou coordenadas em
%).
transform (ex.: translate + rotate), a ordem das
funções altera o resultado final! Já em rotações 3D (cartões que viram), lembrem-se de
investigar backface-visibility: hidden.
180deg suavemente ou um card interativo com efeito 3D (flip card)
mostrando frente e verso ao passar o mouse.
Redimensiona visualmente um elemento proporcionalmente ou em eixos independentes (X e Y), sem recalcular nem deslocar os elementos vizinhos no layout.
transform: scale(n) vs propriedade
independente scale; uso de 1 valor (uniforme) e 2 valores
(scale(x, y)), além de scaleX() e scaleY().
1 (tamanho original), maior que
1 (amplia), entre 0 e 1 (reduz), 0
(desaparece) e valores negativos (espelham/invertem o elemento!).
width/height: por que
aumentar um botão com scale(1.08) no hover é melhor do que alterar
width ou font-size.
scale() em uma imagem dentro
de um container com overflow: hidden.
scale
podem sobrepor elementos vizinhos ou deixar imagens/textos borrados em alguns cenários.
Em botões, um crescimento sutil (1.03 a 1.08) já dá excelente
feedback tátil.
scale(1.12) sem vazar das bordas do card (overflow: hidden).
Desloca um elemento nos eixos horizontal (X), vertical (Y) ou profundidade (Z) a partir da sua posição original, mantendo o espaço original reservado no layout.
transform: translate(x, y),
translateX(), translateY(), translateZ() e a
propriedade independente translate: x y.
%): ao usar
translate(50%, -50%), a porcentagem é calculada sobre o tamanho do
próprio elemento, e não do elemento pai!
top: 50%; left: 50%; transform: translate(-50%, -50%), gavetas laterais
(drawers), notificações toast e elevação de cards (translateY(-6px)).
translate gera animações mais fluidas que animar margin ou
top/left.
translateY(-6px) + sombra, ou demonstrem a
centralização perfeita de um badge/modal com translate(-50%, -50%).
Gera transições suaves (ou faixas nítidas) entre duas ou mais cores diretamente via CSS, sem precisar exportar imagens pesadas do Figma ou Photoshop.
background-image (ou shorthand background) e não a
background-color.
linear-gradient() (direções como
to right e ângulos em deg), radial-gradient()
(circle, ellipse, at posição) e
conic-gradient() (ótimo para gráficos de pizza e anéis de progresso).
rgba()
ou transparent.
background-clip: text.
background-color sólida de reserva antes ou junto com o gradiente e
verifiquem o contraste de textos sobre todas as pontas da transição de cores. Além
disso, gradientes CSS não são diretamente animáveis com transition de forma
simples (pesquisem o truque de animar background-position!).
background-clip: text ou um gráfico circular feito com
conic-gradient().
Controla o nível de transparência de um elemento inteiro (e de todo o seu conteúdo
interno), indo de totalmente invisível (0) a totalmente opaco (1).
0 (0%) até 1 (100%),
aceitando decimais como 0.5 ou porcentagens (50%).
opacity vs canal alfa na cor (rgba() / hsla()):
a diferença crucial! opacity deixa o elemento e todos os filhos
transparentes; já rgb(37 99 235 / 0.4) deixa apenas o fundo translúcido,
mantendo o texto 100% nítido.
opacity: 0 vs visibility: hidden vs display: none:
um elemento com opacity: 0 ainda ocupa espaço na página e ainda pode ser
clicado (a menos que se use pointer-events: none)!
opacity com
transition para exibir tooltips, modais ou legendas ao passar o mouse.
opacity: 0 para "esconder" um menu fechado se ele continuar clicável
por cima de outros links.
opacity: 0.4 contra outro usando
rgba() apenas no fundo, e mostrem uma legenda com efeito fade-in
sobre uma imagem.
Arredonda os cantos da caixa de um elemento, permitindo criar desde cantos sutis em cards e botões em pílula até círculos perfeitos e formas orgânicas assimétricas.
top-left, top-right,
bottom-right, bottom-left) e propriedades individuais.
px/rem vs %: por que
border-radius: 50% cria um círculo em elementos quadrados, mas vira uma
elipse em retângulos (e por que usar 9999px para botões formato pílula).
/): raios horizontais /
raios verticais (ex.: 30% 70% 70% 30% / 30% 30% 70% 70%) para criar
formas orgânicas (blobs).
overflow: hidden no container.
raio interno = raio externo - padding.
50%), um botão/badge
em pílula (9999px) e um card ou forma orgânica usando cantos assimétricos.