15.6. Punkt transformacji: transform-origin
Co to jest punkt transformacji?
W poprzednich lekcjach widzieliśmy, jak funkcje scale()
, rotate()
i skew()
modyfikują element. Domyślnie te transformacje odbywają się względem **środka elementu**. Właściwość transform-origin
pozwala nam **zmienić ten punkt odniesienia**, czyli punkt, wokół którego lub od którego transformacja jest stosowana.
Zmiana transform-origin
może drastycznie zmienić wizualny efekt transformacji, nawet jeśli sama funkcja transformacji pozostaje taka sama.
Składnia transform-origin
Właściwość transform-origin
przyjmuje jedną, dwie lub trzy wartości, które definiują położenie punktu transformacji na osiach X, Y i Z.
Wartości 2D (X, Y)
Najczęściej używa się dwóch wartości do zdefiniowania punktu w płaszczyźnie 2D:
transform-origin: [wartość-X] [wartość-Y];
wartość-X
: Określa pozycję w poziomie. Może to być:- Słowo kluczowe:
left
,center
(domyślne),right
. - Wartość długości: np.
50px
,2em
(od lewej krawędzi). - Wartość procentowa: np.
25%
,100%
(od lewej krawędzi,50%
to środek).
- Słowo kluczowe:
wartość-Y
: Określa pozycję w pionie. Może to być:- Słowo kluczowe:
top
,center
(domyślne),bottom
. - Wartość długości: np.
10px
(od górnej krawędzi). - Wartość procentowa: np.
0%
(góra),75%
(od górnej krawędzi).
- Słowo kluczowe:
Skrócone zapisy:
- Jedna wartość: Jeśli podasz tylko jedną wartość, będzie ona traktowana jako
wartość-X
, awartość-Y
przyjmie domyślniecenter
. Wyjątkiem są słowa kluczowetop
ibottom
, które zostaną potraktowane jakowartość-Y
, awartość-X
będziecenter
. - Domyślna wartość: Jeśli nie podasz
transform-origin
, domyślną wartością jestcenter center
(lub50% 50%
).
Przykłady 2D:
.element1 {
/* Domyślnie - środek */
transform-origin: center center; /* lub 50% 50% */
transform: rotate(45deg);
}
.element2 {
/* Lewy górny róg */
transform-origin: left top; /* lub 0% 0% */
transform: rotate(45deg);
}
.element3 {
/* Środek dolnej krawędzi */
transform-origin: bottom; /* lub center bottom lub 50% 100% */
transform: scaleY(1.5);
}
.element4 {
/* Punkt 75% od lewej, 20px od góry */
transform-origin: 75% 20px;
transform: scale(0.8);
}
Wartości 3D (X, Y, Z)
Można również podać trzecią wartość, aby zdefiniować pozycję punktu transformacji na osi Z. Jest to istotne przy transformacjach 3D.
transform-origin: [wartość-X] [wartość-Y] [wartość-Z];
wartość-Z
: Określa pozycję wzdłuż osi Z. Jest to wartość długości (np.px
,em
). Wartość domyślna to0
. Ujemne wartości przesuwają punkt "dalej" od obserwatora, dodatnie "bliżej".
Przykład 3D:
.parent {
perspective: 600px;
}
.element {
/* Punkt transformacji przesunięty o 100px "do przodu" */
transform-origin: center center -100px;
transform: rotateY(60deg);
}
W tym przykładzie element będzie się obracał wokół osi Y, ale punkt obrotu będzie znajdował się 100px "za" elementem (dalej od widza), co wpłynie na efekt perspektywy.
Wpływ transform-origin
na różne transformacje
rotate()
: Określa punkt, wokół którego odbywa się obrót.scale()
: Określa punkt, który pozostaje nieruchomy podczas skalowania; element rozszerza się lub kurczy względem tego punktu.skew()
: Określa punkt, który pozostaje nieruchomy podczas pochylania.translate()
: Właściwośćtransform-origin
**nie ma wpływu** na działanie funkcjitranslate()
. Przesunięcie jest zawsze względne do pierwotnej pozycji elementu, niezależnie od punktu transformacji.
FAQ - Najczęściej zadawane pytania
Jakie są domyślne wartości transform-origin
?
Domyślną wartością jest center center 0
, co odpowiada 50% 50% 0
. Oznacza to środek elementu w płaszczyźnie 2D, bez przesunięcia w osi Z.
Czy mogę animować transform-origin
?
Tak, właściwość transform-origin
może być animowana za pomocą transition
lub @keyframes
. Animowanie punktu transformacji w połączeniu z samą transformacją może tworzyć ciekawe i złożone efekty wizualne.
Czy wartości procentowe dla transform-origin
odnoszą się do rodzica?
Nie, podobnie jak w przypadku translate()
, wartości procentowe dla transform-origin
odnoszą się do **wymiarów samego transformowanego elementu**. transform-origin: 100% 0;
oznacza prawy górny róg samego elementu.
Kiedy zmiana transform-origin
jest najbardziej zauważalna?
Zmiana transform-origin
ma największy wpływ na transformacje rotate()
i scale()
. Przy rotate()
zmienia oś obrotu, a przy scale()
punkt, od którego element się rozszerza/kurczy. Wpływ na skew()
jest subtelniejszy, a na translate()
nie ma wpływu.