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.

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 .


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).


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.


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>

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

Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.