Właściwość transform umożliwia stosowanie wielu przekształceń w określonej kolejności, ale wszelkie zmiany w pojedynczym przekształceniu wymagają ponownego określenia całego łańcucha przekształceń. Utrudnia to animowanie lub przechodzenie pojedynczego przekształcenia.
Poszczególne właściwości przekształcenia CSS (translate, rotate i scale) umożliwiają stosowanie przekształceń niezależnie od właściwości transform. Dzięki temu łatwiej jest zastąpić pojedyncze przekształcenie, na przykład w przypadku :hover.
Najważniejsze szczegóły implementacji
Właściwości poszczególnych przekształceń są zawsze stosowane w ustalonej kolejności, niezależnie od ich kolejności w kodzie CSS:
translaterotatescaletransform(zastosowano ostatnio)
Jeśli potrzebujesz innej kolejności (np. skalowanie przed obracaniem), musisz nadal używać funkcji właściwości transform.
Funkcje przekształcania nie zastępują poszczególnych właściwości przekształcania. Innymi słowy, scale: 2; transform: scale(3); najpierw zostanie przeskalowany 2-krotnie, a następnie 3-krotnie, co da łącznie 6-krotne powiększenie.
Zapobieganie nieoczekiwanym zmianom w kontekstach stosu i blokach zawierających
Właściwość transform i poszczególne właściwości przekształcenia wpływają na układ i renderowanie strony oraz mogą powodować nieoczekiwane działanie indeksu Z lub pozycjonowania kotwicy. OBOWIĄZKOWE: jeśli element może mieć zastosowane przekształcenie w ramach zmiany stanu, np. :hover, przejścia lub animacji, zastosuj przekształcenie tożsamości do elementu podstawowego. Dzięki temu kontekst stosu i zawartość elementu nie zmieniają się po zastosowaniu przekształcenia.
.element{
/* MANDATORY: Apply identity transformations for properties that will
change on state changes (like :hover). This prevents unexpected layout
or z-index shifts caused by creating a new stacking context only on hover. */
translate: 0px;
rotate: 0deg;
scale: 1;
}
.element:hover{
translate: 10px 10px;
rotate: 20deg;
scale: 0.8;
}
Niezależne animacje i przejścia
Główną zaletą jest możliwość definiowania nakładających się animacji lub przejść, które są kierowane na różne właściwości bez konfliktów.
.card {
/* Define independent animations that don't overwrite each other */
animation: float 3s infinite ease-in-out;
/* Transition only the scale property for hover states */
transition: scale 0.3s ease;
/* Establish the base scale to prevent a sudden stacking context shift when transitioning on hover. */
scale: 1;
}
.card:hover {
/* Only the scale changes; the 'float' animation (translate) continues uninterrupted */
scale: 1.05;
}
@keyframes float {
0%, 100% { translate: 0 0; }
50% { translate: 0 -10px; }
}
Strategie zastępcze
W przypadku przeglądarek, które nie obsługują poszczególnych właściwości przekształcenia, użyj tradycyjnej właściwości transform. Pamiętaj, że jeśli chcesz zmodyfikować jedną część w innym stanie, musisz ponownie zadeklarować cały stos przekształceń.
.element {
/* Base transform */
transform: translate(100px, 0) rotate(45deg);
/* Specify the identity for the scale property. */
scale: 1;
}
@supports not (translate: 0px) {
.element:hover {
/* Fallback: Must repeat translate and rotate even if only scale changes */
transform: translate(100px, 0) rotate(45deg) scale(1.1);
}
}
@supports (translate: 0px) {
.element:hover {
/* Modern: Only declare the change */
scale: 1.1;
}
}