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.