Estamos acostumados a dar algum destaque em elementos da página que usuário pode interagir como links e campos de texto. Geralmente apenas trocamos a cor da letra, background ou o sublinhado do texto. Para isso simplesmente alteramos a propriedade em questão no seletor da pseudo classe :hover e com isso o alteração da propriedade é instantânea. Mas muitas vezes queremos que esta alteração seja mais suave, levando mais tempo para ocorrer e para isso podemos utiliza a propriedade transition.

Para configurarmos a propriedade transition devemos configurar no mínimo duas propriedades transition-property e transition-duration.

Também podemos utilizar as propriedades transition-timing-function e transition-delay que permitem um melhor controle de como a transição ocorre. Vejamos um pouco mais detalhadamente cada propriedade.

transition-property: defina qual propriedade terá o efeito de transição. Ela é obrigatória pois se não for informada nenhuma propriedade não existirá o efeito de transição. Caso quisermos para mais de uma propriedade devemos separa-las por vírgula, ou no caso de queremos colocar o efeito em todas as propriedade utilizamos o valor all.

transition-property: color;

Segue uma lista das propriedade que aceitam o efeito de transição:

  • background-color
  • background-position
  • border-bottom-color
  • border-bottom-width
  • border-left-color
  • border-left-width
  • border-right-color
  • border-right-width
  • border-spacing
  • border-top-color
  • border-top-width
  • bottom
  • clip
  • color
  • font-size
  • font-weight
  • height
  • left
  • letter-spacing
  • line-height
  • margin-bottom
  • margin-left
  • margin-right
  • margin-top
  • max-height
  • max-width
  • min-height
  • min-width
  • opacity
  • outline-color
  • outline-width
  • padding-bottom
  • padding-left
  • padding-right
  • padding-top
  • right
  • text-indent
  • text-shadow
  • top
  • vertical-align
  • visibility
  • width
  • word-spacing
  • z-index

transition-duration: define qual a duração do efeito em segundos, sendo “0” o valor padrão. Lembrando que também é obrigatório pois com o valor de “0” segundos troca é imediada e não haverá efeito nenhum.

transition-duration: 2s;

transition-delay: define quanto tempo irá demorar em segundos para o efeito de transição começar a acontecer. O padrão é 0.

transition-delay: 5s

transition-timing-function: define a curva de transição, ou seja permite que o efeito de transição mude de velocidade enquanto está acontecendo.

Os valores aceitos para esta propriedade são:

  • linear: a transição começa e termina na mesma velocidade. (equivalente a cubic-bezier(0,0,1,1) )
  • ease a transição começa devagar, acelerar e termina lentamente. (equivalente a cubic-bezier(0.25,0.1,0.25,1))
  • ease-in a transição começa devagar. (equivalente a cubic-bezier(0.42,0,1,1))
  • ease-out a transição termina devagar. (equivalente a cubic-bezier(0,0,0.58,1))
  • ease-in-out a transição começa devagar e termina devagar. (equivalent to cubic-bezier(0.42,0,0.58,1))
  • cubic-bezier(n,n,n,n) permite a própria curva. Talvez este site ajude.

Bom a propriedade transition-timing-function é um pouco difícil de entender, então veja um exemplo da diferença de valores

Vejamos agora uns exemplos simples.

<h1 id="e1">Exemplo 1</h1>
h1#e1{
	color:#00C;
	transition-property: color;
	transition-duration:2s;
}
h1#e1:hover{
	color:#C00;
}

Como podemos ver é uma simples troca de cor do texto do titulo, o nosso titulo “e1” terá a cor do texto azul, depois definimos que a propriedade color sofrerá transição quando for alterada, na linha seguinte definimos que esta transição levará ao todo 2 segundo. No seletor hover simplesmente alteramos o valor da propriedade.

<h1 id="e2">Exemplo 2</h1>
#e2{
	background:#F00;
	color:#FFF;
	transition-property: color , background;
	transition-duration:2s;
}
#e2:hover{
	background:#00C;
	color:#000;
}

Este exemplo é praticamente igual ao anterior, a não ser que colocamos o efeito de transição em duas propriedades.

<div id="e3">
	<h1>Um castelo</h1>
</div>
#e3{
	width:300px;
	height:225px;
	background-image: url(castelo.jpg);
	color:#FFF;
}

#e3 h1{
	width:300px;
	height:225px;
	background:rgba(0,0,0,.5);
	opacity: 0;

	transition-property: opacity;
	transition-duration:1s;
}
#e3:hover h1{
	opacity: 1;
}

Este efeito é um pouco mais interessante, quando o mouse passar por cima de nosso div “e3” irá aparecer nosso titulo sobre ele com uma transparência.

Veja os três exemplo funcionando aqui.

Não esquecendo que podemos encurtar um pouco a sintaxe colocando todas as propriedades em uma linha

transition: |property| |duration| |timing-function| |delay|;

Esta propriedade pode ser muito interessante para quem tiver criatividade, como podem ver nos meus exemplos, eu não tenho 🙁