Desativar / desativar transições CSS3 herdadas


117

Portanto, tenho as seguintes transições css anexadas ao elemento a:

a { 
     -webkit-transition:color 0.1s ease-in, background-color 0.1s ease-in ;  
     -moz-transition:color 0.1s ease-in, background-color 0.1s ease-in;  
     -o-transition:color 0.1s ease-in, background-color 0.1s ease-in;  
     transition:color 0.1s ease-in, background-color 0.1s ease-in; 
}

Existe uma maneira de desativar essas transições herdadas em elementos específicos?

a.tags { transition: none; } 

Não parece estar fazendo o trabalho.

Respostas:


166

O uso de transition: noneparece ser suportado (com um ajuste específico para Opera) dado o seguinte HTML:

<a href="#" class="transition">Content</a>
<a href="#" class="transition">Content</a>
<a href="#" class="noTransition">Content</a>
<a href="#" class="transition">Content</a>

... e CSS:

a {
    color: #f90;
    -webkit-transition:color 0.8s ease-in, background-color 0.1s ease-in ;  
    -moz-transition:color 0.8s ease-in, background-color 0.1s ease-in;  
    -o-transition:color 0.8s ease-in, background-color 0.1s ease-in;  
    transition:color 0.8s ease-in, background-color 0.1s ease-in; 
}
a:hover {
    color: #f00;
    -webkit-transition:color 0.8s ease-in, background-color 0.1s ease-in ;  
    -moz-transition:color 0.8s ease-in, background-color 0.1s ease-in;  
    -o-transition:color 0.8s ease-in, background-color 0.1s ease-in;  
    transition:color 0.8s ease-in, background-color 0.1s ease-in; 
}
a.noTransition {
    -moz-transition: none;
    -webkit-transition: none;
    -o-transition: color 0 ease-in;
    transition: none;
}

Demonstração JS Fiddle .

Testado com Chromium 12, Opera 11.xe Firefox 5 no Ubuntu 11.04.

A adaptação específica ao Opera é o uso de -o-transition: color 0 ease-in;que visa a mesma propriedade conforme especificado nas outras transitionregras, mas define o tempo de transição para 0, o que efetivamente impede que a transição seja perceptível. O uso do a.noTransitionseletor é simplesmente fornecer um seletor específico para os elementos sem transições.


Editado para observar que a resposta de @Frédéric Hamidi , usando all(para Opera, pelo menos) é muito mais conciso do que listar cada nome de propriedade individual que você não deseja que tenha transição.

Demo JS Fiddle atualizado, mostrando o uso de allno Opera:,-o-transition: all 0 none após a auto-exclusão da resposta de @Frédéric .


Ahh, eu precisava adicionar as tags específicas do navegador antes da transição. Malvado, saúde!
— Scotty

Obrigado por opera sem informações de transição.
— pedro_sland

5
Opera é realmente chato com essa diferença
— Junior Mayhé

1
por que você não pode fazer algo como: transição: cor nenhuma, cor de fundo 0,1s atenuação;

26

Se quiser desativar uma única propriedade de transição, você pode fazer:

transition: color 0s;

(já que uma transição de zero segundo é o mesmo que nenhuma transição.)


Um defensor do desempenho pode se ofender, mas isso parece legítimo por desabilitar uma única propriedade.
— doublejosh

Não funciona para mim no Chrome agora. Isso apenas desativa todas as transições herdadas.
— Inversão de

Você pode dar um exemplo @Inversion
— Will Madden

@WillMadden, aqui jsfiddle.net/312bu8po tenta o estado inicial e, em seguida, descomente a linha preparada em css - a transição para leftserá removida.
— Inversão

2

Outra maneira de remover todas as transições é com a unsetpalavra-chave:

a.tags {
    transition: unset;
}

No caso de transition, unseté equivalente a initial, visto que transitionnão é uma propriedade herdada:

a.tags {
    transition: initial;
}

Um leitor que conhece unsete initialpode dizer que essas soluções estão corretas imediatamente, sem ter que pensar sobre a sintaxe específica de transition.


não definido e inicial não são bem suportados pelo IE
— allenski

caniuse.com/#feat=css-unset-value - Eu provavelmente escolheria inicial se você precisar de suporte para o IE11.
— Nick Middleweek

0

Você também pode deserdar todas as transições dentro de um elemento contido:

CSS:

.noTrans *{
-moz-transition: none;
-webkit-transition: none;
-o-transition: color 0 ease-in;
transition: none;
}

HTML:

<a href="#">Content</a>
<a href="#">Content</a>
<div class="noTrans">
<a href="#">Content</a>
</div>
<a href="#">Content</a>

2
Hmm, provavelmente eu não aconselharia fazer dessa forma. A regra não se aplica ao elemento ao qual você aplica a classe, apenas aos filhos, e se aplica a todos os filhos, mesmo aqueles que não precisam da aplicação da regra, o que pode levar a problemas de especificidade e escalabilidade mais adiante.
— Scotty

Esta foi uma solução muito útil para mim recentemente remover as transições globalmente de um elemento de mapa do Google, que estavam adicionando estranheza ao comportamento do mapa.
— freeworlder

Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.