Desactivar / desactivar las transiciones CSS3 heredadas

117

Entonces tengo las siguientes transiciones CSS adjuntas al 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; 
}

¿Hay alguna forma de deshabilitar estas transiciones heredadas en elementos específicos a?

a.tags { transition: none; } 

No parece estar haciendo el trabajo.

Scotty
fuente

Respuestas:

166

El uso de transition: noneparece ser compatible (con un ajuste específico para Opera) dado el siguiente 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>

... y 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;
}

Demostración de JS Fiddle .

Probado con Chromium 12, Opera 11.xy Firefox 5 en Ubuntu 11.04.

La adaptación específica a Opera es el uso de -o-transition: color 0 ease-in;que apunta a la misma propiedad que se especifica en las otras transitionreglas, pero establece el tiempo de transición en 0, lo que efectivamente evita que la transición sea notable. El uso del a.noTransitionselector es simplemente proporcionar un selector específico para los elementos sin transiciones.


Editado para tener en cuenta que la respuesta de @ Frédéric Hamidi , usar all(para Opera, al menos) es mucho más conciso que enumerar cada nombre de propiedad individual que no desea que tenga una transición.

Se actualizó la demostración de JS Fiddle, que muestra el uso de allen Opera:,-o-transition: all 0 none luego de la eliminación automática de la respuesta de @ Frédéric .

David dice reinstalar a Monica
fuente
Ahh, necesitaba agregar las etiquetas específicas del navegador antes de la transición. ¡Malvados, salud!
Scotty
Gracias por la ópera sin información de transición.
pedro_sland
5
La ópera es realmente aburrida con esta diferencia
Junior Mayhé
1
por qué no puedes hacer algo como: transición: color ninguno, color de fondo 0.1s entrada fácil;
26

Si desea deshabilitar una sola propiedad de transición, puede hacer lo siguiente:

transition: color 0s;

(dado que una transición de cero segundos es lo mismo que ninguna transición).

Will Madden
fuente
Un riguroso en el desempeño podría ofenderse, pero esto parece legítimo por deshabilitar una sola propiedad.
doublejosh
Ahora no me funciona en Chrome. Esto simplemente desactiva todas las transiciones heredadas.
Inversión
¿Puede dar un ejemplo @Inversion
Will Madden
@WillMadden, aquí jsfiddle.net/312bu8po pruebe el estado inicial y luego descomente la línea preparada en css - la transición para leftserá eliminada.
Inversión
2

Otra forma de eliminar todas las transiciones es con la unsetpalabra clave:

a.tags {
    transition: unset;
}

En el caso de transition, unsetes equivalente a initial, ya transitionque no es una propiedad heredada:

a.tags {
    transition: initial;
}

Un lector que sepa unsety initialpueda decir que estas soluciones son correctas de inmediato, sin tener que pensar en la sintaxis específica de transition.

Rory O'Kane
fuente
unset & initial no están bien soportados con IE
allenski
caniuse.com/#feat=css-unset-value - Probablemente iría con initial si necesita soporte IE11.
Nick Middleweek
0

También puede desheredar todas las transiciones dentro de un elemento contenedor:

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>
libre mundo
fuente
2
Hmm, probablemente no recomendaría hacerlo de esta manera. La regla no se aplica al elemento al que aplica la clase, solo a los niños, y se aplica a todos los niños, incluso a los que no necesitan la aplicación de la regla, lo que podría generar problemas de especificidad y escalabilidad en el futuro.
Scotty
Esta fue una solución muy útil para mí recientemente para eliminar transiciones globalmente de un elemento del mapa de Google, que agregaban rareza al comportamiento del mapa.
Freeworlder