Disattiva / disattiva le transizioni CSS3 ereditate


117

Quindi ho le seguenti transizioni CSS allegate all'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; 
}

C'è un modo per disabilitare queste transizioni ereditate su elementi a specifici?

a.tags { transition: none; } 

Non sembra stia facendo il lavoro.

Risposte:


166

L'uso di transition: nonesembra essere supportato (con una regolazione specifica per Opera) dato il seguente 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;
}

Demo di JS Fiddle .

Testato con Chromium 12, Opera 11.xe Firefox 5 su Ubuntu 11.04.

L'adattamento specifico a Opera è il cui utilizzo -o-transition: color 0 ease-in;mira alla stessa proprietà specificata nelle altre transitionregole, ma imposta il tempo di transizione a 0, il che impedisce di fatto che la transizione sia evidente. L'uso del a.noTransitionselettore è semplicemente quello di fornire un selettore specifico per gli elementi senza transizioni.


Modificato per notare che la risposta di @ Frédéric Hamidi , usando all(per Opera, almeno) è molto più conciso che elencare ogni singolo nome di proprietà che non vuoi che abbia la transizione.

Demo aggiornata di JS Fiddle, che mostra l'uso di allin Opera:,-o-transition: all 0 none dopo l'autoeliminazione della risposta di @ Frédéric .


Ahh, avevo bisogno di aggiungere i tag specifici del browser prima della transizione. Malvagio, acclamazioni!
Scotty

Grazie per l'opera nessuna informazione di transizione.
pedro_sland

5
L'opera è davvero noiosa con questa differenza
Junior Mayhé

1
perché non puoi fare qualcosa come: transizione: colore nessuno, colore di sfondo 0.1s facilità in;

26

Se vuoi disabilitare una singola proprietà di transizione, puoi fare:

transition: color 0s;

(poiché una transizione di zero secondi equivale a nessuna transizione.)


Un responsabile delle prestazioni potrebbe offendersi, ma questo sembra legittimo per disabilitare una singola proprietà.
doublejosh

Adesso non funziona per me in Chrome. Questo disabilita solo tutte le transizioni ereditate.
Inversion

Puoi fare un esempio @Inversion
Will Madden

@ WillMadden, qui jsfiddle.net/312bu8po prova lo stato iniziale e quindi decommenta la riga preparata in css - la transizione per leftverrà rimossa.
Inversion

2

Un altro modo per rimuovere tutte le transizioni è con la unsetparola chiave:

a.tags {
    transition: unset;
}

Nel caso di transition, unsetè equivalente a initial, poiché transitionnon è una proprietà ereditata:

a.tags {
    transition: initial;
}

Un lettore che conosce unsete initialpuò dire che queste soluzioni sono corrette immediatamente, senza dover pensare alla sintassi specifica di transition.


non impostato e iniziale non sono ben supportati con IE
allenski

caniuse.com/#feat=css-unset-value - Probabilmente andrei con l'iniziale se hai bisogno del supporto di IE11.
Nick Middleweek

0

Puoi anche diseredare tutte le transizioni all'interno di un elemento contenitore:

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, probabilmente non consiglierei di farlo in questo modo. La regola non si applica all'elemento a cui si applica la classe, solo ai bambini, e si applica a tutti i bambini, anche a quelli che non necessitano dell'applicazione della regola, il che potrebbe portare a problemi di specificità e scalabilità più avanti.
Scotty

Questa è stata una soluzione molto utile per me di recente per rimuovere le transizioni a livello globale da un elemento della mappa di Google, che aggiungevano stranezze al comportamento della mappa.
freeworlder

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.