16.1. Wprowadzenie do Przejść CSS (Transitions)
Czym są Przejścia CSS?
Przejścia CSS (CSS Transitions) pozwalają na **płynną animację zmiany wartości właściwości CSS** w określonym czasie. Zamiast natychmiastowej zmiany (np. koloru tła przy najechaniu myszą), przejście powoduje stopniową zmianę wartości od stanu początkowego do końcowego.
Dzięki przejściom możemy tworzyć bardziej eleganckie, subtelne i angażujące interfejsy użytkownika, dodając animacje do interakcji takich jak najechanie myszą (:hover
), uzyskanie fokusu (:focus
) czy zmiana klasy elementu za pomocą JavaScript.
Podstawowa koncepcja
Aby zdefiniować przejście, musimy określić co najmniej dwie rzeczy:
- Która właściwość CSS ma być animowana? (np.
background-color
,width
,opacity
,transform
) - Jak długo ma trwać animacja (przejście)? (czas trwania)
Przeglądarka automatycznie obliczy pośrednie stany właściwości między wartością początkową a końcową i wyświetli je w czasie, tworząc płynną animację.
Przykład bez przejścia:
.button {
background-color: blue;
padding: 10px 20px;
color: white;
}
.button:hover {
background-color: red; /* Natychmiastowa zmiana koloru */
}
Przykład z przejściem:
.button {
background-color: blue;
padding: 10px 20px;
color: white;
/* Definicja przejścia */
transition-property: background-color; /* Co animować */
transition-duration: 0.5s; /* Jak długo */
}
.button:hover {
background-color: red; /* Zmiana wyzwoli płynne przejście */
}
W drugim przykładzie, po najechaniu myszą na przycisk, kolor tła będzie płynnie zmieniał się z niebieskiego na czerwony przez pół sekundy.
Ważne: Przejście definiujemy na **elemencie w jego stanie bazowym**, a nie w stanie docelowym (np. :hover
). Przejście określa, jak element ma reagować na *każdą* zmianę zdefiniowanej właściwości.
Kluczowe właściwości przejść
Do kontrolowania przejść służą cztery główne właściwości CSS:
transition-property
: Określa, które właściwości CSS mają być animowane podczas przejścia.transition-duration
: Określa czas trwania przejścia (np. w sekundachs
lub milisekundachms
).transition-timing-function
: Określa krzywą przyspieszenia przejścia (jak szybko animacja przebiega w czasie, np.ease
,linear
,ease-in-out
).transition-delay
: Określa opóźnienie przed rozpoczęciem przejścia.
Istnieje również właściwość skrócona transition
, która pozwala zdefiniować wszystkie te aspekty w jednej deklaracji. Te właściwości zostaną szczegółowo omówione w kolejnych lekcjach tego rozdziału.
FAQ - Najczęściej zadawane pytania
Czy wszystkie właściwości CSS można animować za pomocą przejść?
Nie, tylko właściwości, które mają **definiowalny stan pośredni**, mogą być animowane. Należą do nich głównie właściwości liczbowe (np. width
, opacity
, font-size
), kolory (color
, background-color
) oraz transformacje (transform
). Właściwości takie jak display
czy font-family
nie mogą być płynnie animowane.
Kiedy przeglądarka uruchamia przejście?
Przejście jest uruchamiane, gdy obliczona wartość właściwości zdefiniowanej w transition-property
**zmienia się**. Może to być spowodowane zmianą stanu (np. :hover
, :focus
), dodaniem/usunięciem klasy przez JavaScript, lub bezpośrednią zmianą stylu przez JavaScript.
Czy przejścia działają w obie strony?
Tak. Jeśli zdefiniujesz przejście na elemencie bazowym, będzie ono działać zarówno przy zmianie do stanu docelowego (np. wejście w :hover
), jak i przy powrocie do stanu bazowego (np. opuszczenie :hover
). Przeglądarka animuje zmianę wartości w obu kierunkach.
Czy przejścia obciążają wydajność?
Proste przejścia na właściwościach takich jak opacity
czy transform
są zazwyczaj bardzo wydajne, ponieważ przeglądarki często mogą je akcelerować sprzętowo (GPU). Animowanie właściwości wpływających na layout (np. width
, height
, margin
) może być bardziej kosztowne, ponieważ wymaga przeliczenia układu strony.