CSS

13 abr, 2015

CSS: transition pra dar e vender

Publicidade

O CSS3 vem pra ajudar a todos. Para o desenvolvedor, a vida fica mais fácil pois é possível chegar a efeitos, que antes precisavam de uma volta gigantesca, de uma forma bem mais simples; e o usuário que pode ganhar uma experiência melhor e mais rápida.

Transition

Um dos caras que fazem do CSS3 um negócio tão bacana é a propriedade transition. Ao pé da letra e de um jeito bem direto, essa propriedade define como será a transição entre dois estilos.

Dois estilos? Ahn? Admito que não sei se estilo é a palavra correta, mas pra ficar com algo mais concreto, você pode definir, por exemplo, como vai ser a transição de um elemento:

  • na troca de uma classe;
  • nos estados :hover ou :focus.

O que a propriedade transition faz é analisar a diferença de valores da(s) propriedade(s) do elemento entre os dois estados/estilos e faz com que a transição aconteça de forma mais suave (pode ser customizada), e não de forma brusca como estamos acostumados.

See the Pen Simple transition by Raphael Fabeni (@raphaelfabeni) on CodePen.

 

Como faz?

É bem tranquilo! São 4 propriedades que você tem que definir:

  • transition-property => a propriedade que você vai aplicar à transição (se quiser aplicar a todas, você pode passar o valor all);
  • transition-duration => quanto tempo vai demorar a transição;
  • transition-delay => tempo que a transição vai demorar pra se iniciar (pode ser omitido, e seu valor default é 0);
  • transition-timing-function => como a transição vai progredir no tempo. Aceita os valores linear, ease-out, ease-in, ease e uma função personalizada através da cubic-bezier() (essa propriedade também pode ser omitida e seu valor default é ease).

Antes que você pergunte: não, você não precisa escrever uma por uma, você pode optar pelo shortcode transition:

transition: property duration delay timing-function;

 

Dessa maneira, as variações abaixo têm o mesmo efeito:

.classe {
    transition-property: all;
    transition-duration: 1s;
    transition-delay: 0s;
    transition-timing-function: ease;
}

.classe { transition: all 1s; }

 

 

Encadeamento de transições

Pode ser que você queira mais de uma transição em um elemento. Nesse momento, você tem duas opções distintas:

  • passar all para transition-property, assumindo que as transições terão a mesma duração, delay e timing-function;
  • ou passar transições diferentes para cada propriedade, podendo brincar com as propriedades específicas de transition para cada uma.

No exemplo abaixo, o primeiro retângulo tem a transition-property definido como all, o que faz que tanto a transição de largura como a de background tenham as mesmas características de duração, delay e timing-function. Já no segundo retângulo, as transições são encadeadas: a primeira transição que é a de largura ocorre, e só depois de finalizada é que acontece a transição de background. Isso acontece, pois esta última tem um delay de .3 segundos, que é o mesmo tempo de duração da primeira transição.

See the Pen Simple transition (multiple) by Raphael Fabeni (@raphaelfabeni) on CodePen.

 

Dicas e suporte

Em relação ao suporte, segundo o site do Can I Use, funciona a partir do IE10 e, dependendo da versão de algum navegador, você talvez precise dos prefixos.

A princípio, pode parecer algo muito simples, mas com criatividade é possível fazer coisas bem legais e poderosas.

Algum tempo atrás, criei um repositório no GitHub chamado Lab CSS3 com o objetivo de estudar um pouco mais e montar uns exemplos usando CSS3. Tem algumas coisas utilizando transition como este componente de abas e este accordion. Há algumas outras coisas sobre animation e transform, que pretendo abordar nos próximos artigos.

Conferência CSS Brasil

Já que estamos falando de CSS, este ano vai rolar a Conferência CSS Brasil, a primeira conferência nacional focada em CSS. A ideia do evento é compartilhar conhecimento e mostrar o poder do CSS. E aí, bora? #dica: Em parceria com a comunidade css3br do Facebook, tá rolando um cupom de desconto => divulgacss3br. \o/

Gostou? Escrevi alguma groselha? Quer melhorar? Abra uma issue com a hashtag 1postperweek e vamos conversar.

***

Artigo publicado originalmente em: http://www.raphaelfabeni.com.br/css-transition/