Come applico la transizione CSS3 a tutte le proprietà eccetto background-position?


109

Vorrei applicare una transizione CSS a tutte le proprietà tranne la posizione dello sfondo. Ho provato a farlo in questo modo:

.csstransitions a {
    -webkit-transition: all 0.3s ease;                  
    -moz-transition: all 0.3s ease;                 
    -o-transition: all 0.3s ease;   
    -ms-transition: all 0.3s ease;          
    transition: all 0.3s ease;
}

.csstransitions a {
    -webkit-transition: background-position 0s ease 0s;                 
    -moz-transition: background-position 0s ease 0s;                
    -o-transition: background-position 0s ease 0s;  
    -ms-transition: background-position 0s ease 0s;         
    transition: background-position 0s ease 0s;
}

Per prima cosa ho impostato tutte le proprietà sulla transizione e poi ho provato a sovrascrivere solo la transizione per la proprietà background-position.

Tuttavia, questo sembra ripristinare anche tutte le altre proprietà, quindi praticamente nessuna delle transizioni sembra più accadere.

C'è un modo per farlo senza elencare tutte le proprietà?


1
Ciao, sto effettivamente cercando questo problema. Hai ricevuto una risposta accettabile?
Milche Patern

Risposte:


144

Ecco una soluzione che funziona anche su Firefox:

transition: all 0.3s ease, background-position 1ms;

Ho fatto una piccola demo: http://jsfiddle.net/aWzwh/


3
Per qualche motivo 1msnon ha funzionato per me, ma 0ha funzionato.
Flimm

@Flimm, quale browser stai utilizzando? E cosa intendi con "non ha funzionato", non ha animato nulla?
Felix Edelmann

1
Per me 1msnon ha funzionato, ma 1ms noneha funzionato! @ericsoco 0mso anche 0slavori.
BCoder

3
Le unità di tempo DEVONO avere un'unità. Quindi 0 non funziona come 4 non funzionerà, ma 4 funzionerà proprio come funzioneranno gli 0.
ESR

2
L'ho cercato per così tanto tempo, grazie, @FelixEdelmann !!
tatsu

17

Spero di non essere in ritardo. Si ottiene utilizzando una sola riga!

-webkit-transition: all 0.2s ease-in-out, width 0, height 0, top 0, left 0;
-moz-transition: all 0.2s ease-in-out, width 0, height 0, top 0, left 0;
-o-transition: all 0.2s ease-in-out, width 0, height 0, top 0, left 0;
transition: all 0.2s ease-in-out, width 0, height 0, top 0, left 0; 

Funziona su Chrome. Devi separare le proprietà CSS con una virgola.

Ecco un esempio funzionante: http://jsfiddle.net/H2jet/


6
Lo sto provando su Chrome e non sembra funzionare per me. La allproprietà di transizione sembra prevalere su tutte le altre, qualunque cosa accada.
animuson

2
Interessante. Immagino di non averlo testato con altre proprietà. Quando ho provato color 0ha funzionato, ma di certo non funziona background-position 0. Anche background 0produce nessun risultato per me ... Ecco un jsFiddle ho truccato dal menu Gaming.SE. Ad essere onesti, ho provato solo background-positioninizialmente perché è quello che la domanda menziona specificamente ed è quella che stavo cercando di cambiare me stesso.
animuson

2
Per me funzionava su Chrome. Funziona ancora in IE11 ma a partire da questa settimana la proprietà all ora ha la precedenza su qualsiasi altra cosa sulla linea.
cirri

1
Come ha detto @cirrus, Chrome non rispetta più una durata di 0 secondi, ma puoi farlo funzionare dando invece una durata molto breve, come.1ms
GetFree

1
Funziona sia su Chrome che su Firefox se viene fornita una durata diversa da zero secondi.
Naisheel Verdhan

4

Prova questo...

* {
    transition: all .2s linear;
    -webkit-transition: all .2s linear;
    -moz-transition: all .2s linear;
    -o-transition: all .2s linear;
}
a {
    -webkit-transition: background-position 1ms linear;
    -moz-transition: background-position 1ms linear;
    -o-transition: background-position 1ms linear;
    transition: background-position 1ms linear;
}

"prova questo" le risposte di solo codice non sono le migliori. Meglio una spiegazione di quello che stai facendo.
random_user_name


2

Per chiunque cerchi una scorciatoia, per aggiungere la transizione per tutte le proprietà ad eccezione di una proprietà specifica con ritardo , sii consapevole delle differenze anche tra i browser moderni.

Una semplice demo qui sotto mostra la differenza. Controlla il codice completo

div:hover {
  width: 500px;
  height: 500px;
  border-radius: 0;
  transition: all 2s, border-radius 2s 4s;
}

Chrome "combinerà" le due animazioni (che è come mi aspetto), come di seguito:

inserisci qui la descrizione dell'immagine

Mentre Safari lo "separa" (cosa che potrebbe non essere prevista):

inserisci qui la descrizione dell'immagine

Un modo più compatibile è che assegni la transizione specifica a una proprietà specifica, se hai un ritardo per una di esse.


Infatti. Questa è una visione critica. Dato che è inutile dover specificare ogni proprietà individualmente piuttosto che all, è utile sapere che è l'unico modo per ottenere il comportamento desiderato attraverso i browser.
random_user_name

1

Provare:

-webkit-transition: all .2s linear, background-position 0;

Questo ha funzionato per me su qualcosa di simile ..


fissare background-position a 0 non è = rimuovere la transizione da background-position. Non è vero?
Milche Patern

1
Questo non potrà mai funzionare. Ridefinendo in seguito la proprietà di transizione, si sostituisce completamente la proprietà di transizione precedente, come se non fosse mai esistita. Non si consolidano.
animuson
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.