2012-05-15 4 views
73

Chciałbym zastosować przejście CSS do wszystkich właściwości oprócz pozycji w tle. starałem się zrobić to w ten sposób:Jak zastosować przejście CSS3 do wszystkich właściwości z wyjątkiem tła?

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

pierwszy ustawić wszystkie właściwości do przejścia, a potem starał się zastąpić wyłącznie przejścia dla właściwości background-position.

Jednak wydaje się, że zresetowano także wszystkie inne właściwości - więc zasadniczo żaden z przejść nie wydaje się już istnieć.

Czy istnieje sposób, aby to zrobić bez wymieniania wszystkich właściwości?

+1

Witam, jestem rzeczywiście patrząc na ten problem. Czy uzyskałeś jakąś akceptowalną odpowiedź? –

+0

Przepraszam, nie sądzę, że to możliwe. Wierzę, że w końcu wyliczyłem wszystkie właściwości osobno na końcu: przejście: szerokość 0,3 s, wysokość 0,3 s, kolor tła 0,3 s, transformacja 0,3 s; – Dine

Odpowiedz

96

Oto rozwiązanie, które działa również na Firefox:

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

zrobiłem mały demo: http://jsfiddle.net/aWzwh/

+2

Z jakiegoś powodu '1ms' nie działało dla mnie, ale' 0' zrobił. – Flimm

+0

@Flimm, z jakiej przeglądarki korzystasz? I co masz na myśli mówiąc "nie działa", nic nie animowałeś? –

+0

Google Chrome nie przyjmuje "0" jako akceptowanego parametru dla przejść, ale 1ms wydaje się robić sztuczkę –

2

Spróbuj:

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

ten pracował dla mnie na coś podobnego ..

+2

to nie działa na chrome – alex

+0

ustalenie pozycji tła na 0 nie jest = usunięcie przejścia z położenia w tle. Czyż nie? –

+0

To nigdy nie zadziała. Ponownie definiując właściwość przejścia, całkowicie zastępujesz poprzednią właściwość przejścia, tak jakby nigdy nie istniała. Nie są skonsolidowane. – animuson

10

Nadzieja nie spóźnić. Osiąga się to za pomocą tylko jednej linii!

-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; 

To działa w przeglądarce Chrome. Musisz rozdzielić właściwości CSS przecinkami.

Oto przykład roboczych: http://jsfiddle.net/H2jet/

+1

To nie działa na Firefoksa. – Bryan

+5

Próbuję tego w Chrome i nie działa to dla mnie. Właściwość przejściowa 'all' wydaje się nadpisywać wszystkie pozostałe bez względu na wszystko. – animuson

+0

@animuson zobacz mój edytowany post, dodałem przykład jsfiddle. W rzeczywistości nie działa jeszcze w Mozilli, ale jest w Chrome –

3

Spróbuj tego ...

* { 
    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; 
}