Efeitos com CSS transition
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 🙁