CSS Transform ์์ฑ์ HTML ์์๋ฅผ ๋ณํ์ํค๋ ๋ฐ ์ฌ์ฉ๋ฉ๋๋ค. ์ด๋ฅผ ํตํด ์์์ ์์น, ํฌ๊ธฐ, ํ์ , ๊ธฐ์ธ๊ธฐ๋ฅผ ์กฐ์ ํ ์ ์์ต๋๋ค. Transform ์์ฑ์ 2D ๋ฐ 3D ๋ณํ ๋ชจ๋๋ฅผ ์ง์ํ๋ฉฐ, ๋ค์ํ ์๊ฐ์ ํจ๊ณผ๋ฅผ ์ ๊ณตํ์ฌ ์น ํ์ด์ง์ ์ญ๋์ฑ์ ๋ํด์ค๋๋ค.
โฃ ๋ชฉ์ฐจ
Transform๊ณผ ๊ด๋ จ์๋ css์ ์ ํํจ๊ณผ์ ์ ๋๋ฉ์ด์
์ ๋ด์ฉ๋ ํ์ธํด ์ฃผ์ธ์๐
๐ปcss์์ ์์์ ์ ์ฉ๋ ์คํ์ผ์ ์์ฑ๊ฐ์ ๋ค๋ฅธ ๊ฐ์ผ๋ก ๋ณํ๊ฒ ํ๋ ์ ํํจ๊ณผ๐ป
๐ป์ ํํจ๊ณผ๋ฅผ ์์ฐ์ค๋ฝ๊ฒ ๋ฐ๊ฟ์ฃผ๋ css ์ ๋๋ฉ์ด์ ๐ป
CSS Transform ์์ฑ์ด๋?๐ค
CSS Transform์ด๋?
CSS Transform์ HTML ์์๋ฅผ ์ด๋, ํ์ , ํฌ๊ธฐ ์กฐ์ , ๊ธฐ์ธ์ ๋ฑ์ ํตํด ๋ณํํ ์ ์๊ฒ ํด์ฃผ๋ CSS ์์ฑ์ ๋๋ค. ์ด๋ฅผ ํตํด ์ ์ ์ธ ์น ํ์ด์ง์ ๋์ ์ธ ํจ๊ณผ๋ฅผ ์ถ๊ฐํ ์ ์์ต๋๋ค.
CSS Transform์ ๊ธฐ๋ณธ ๋ฌธ๋ฒ
๊ธฐ๋ณธ์ ์ธ transform ๋ฌธ๋ฒ๊ณผ ๊ฐ ๋ณํ ํจ์์ ์ฌ์ฉ๋ฒ์ ๋ค์๊ณผ ๊ฐ์ต๋๋ค.
selector {
transform: transform-function(value);
}
์ฌ๊ธฐ์ transform-function์๋ ๋ค์ํ ๋ณํ ํจ์๊ฐ ์ฌ ์ ์์ผ๋ฉฐ, ์ด ํจ์๋ค์ ํ์์ ๋ฐ๋ผ ์กฐํฉํด์ ์ฌ์ฉํ ์๋ ์์ต๋๋ค.
์ฃผ์ ๋ณํ ํจ์
- translate(): ์์๋ฅผ x์ถ, y์ถ ๋ฐฉํฅ์ผ๋ก ์ด๋์ํต๋๋ค.
- translateX(): ์์๋ฅผ x์ถ ๋ฐฉํฅ์ผ๋ก๋ง ์ด๋์ํต๋๋ค.
- translateY(): ์์๋ฅผ y์ถ ๋ฐฉํฅ์ผ๋ก๋ง ์ด๋์ํต๋๋ค.
- scale(): ์์์ ํฌ๊ธฐ๋ฅผ x์ถ, y์ถ ๋ฐฉํฅ์ผ๋ก ์กฐ์ ํฉ๋๋ค.
- scaleX(): ์์์ x์ถ ํฌ๊ธฐ๋ง ์กฐ์ ํฉ๋๋ค.
- scaleY(): ์์์ y์ถ ํฌ๊ธฐ๋ง ์กฐ์ ํฉ๋๋ค.
- rotate(): ์์๋ฅผ ํ์ ์ํต๋๋ค. ๋จ์๋ ๋(degree)๋ฅผ ์ฌ์ฉํฉ๋๋ค.
- skew(): ์์๋ฅผ x์ถ, y์ถ ๋ฐฉํฅ์ผ๋ก ๊ธฐ์ธ์ ๋๋ค.
- skewX(): ์์๋ฅผ x์ถ ๋ฐฉํฅ์ผ๋ก๋ง ๊ธฐ์ธ์ ๋๋ค.
- skewY(): ์์๋ฅผ y์ถ ๋ฐฉํฅ์ผ๋ก๋ง ๊ธฐ์ธ์ ๋๋ค.
Transform์ ์ฃผ์ ๊ธฐ๋ฅ๐ง
Translate ↔๏ธ
Translate ํจ์๋ ์์๋ฅผ X์ถ ๋๋ Y์ถ์ผ๋ก ์ด๋์ํค๋ ๋ฐ ์ฌ์ฉ๋ฉ๋๋ค. translate์๋ 2D ๋ณํ์ ์ํ translate, translateX, translateY, translateZ, translate3d ๋ฑ์ ํจ์๊ฐ ์์ต๋๋ค.
1. translate
translate ํจ์๋ ์์๋ฅผ X์ถ๊ณผ Y์ถ์ ๊ธฐ์ค์ผ๋ก ์ด๋์ํต๋๋ค. ๊ตฌ๋ฌธ์ ๋ค์๊ณผ ๊ฐ์ต๋๋ค.
transform: translate(x, y);
- x: ์์๋ฅผ X์ถ์ ๋ฐ๋ผ ์ด๋์ํค๋ ๊ฑฐ๋ฆฌ์ ๋๋ค. ํฝ์ (px), ํผ์ผํธ(%) ๋ฑ์ ์ฌ์ฉํ ์ ์์ต๋๋ค.
- y: ์์๋ฅผ Y์ถ์ ๋ฐ๋ผ ์ด๋์ํค๋ ๊ฑฐ๋ฆฌ์ ๋๋ค. ๋ง์ฐฌ๊ฐ์ง๋ก ํฝ์ (px), ํผ์ผํธ(%) ๋ฑ์ ์ฌ์ฉํ ์ ์์ต๋๋ค.
- ์ธ์๋ฅผ ์์๋ก ์ง์ : x์ถ์ ์ค๋ฅธ์ชฝ, y์ถ์ ์๋์ชฝ์ผ๋ก ์ด๋
- ์ธ์๋ฅผ ์์๋ก ์ง์ : x์ถ์ ์ผ์ชฝ, y์ถ์ ์์ชฝ์ผ๋ก ์ด๋
์์
.example {
transform: translate(50px, 100px);
}
์ ์์์์๋. example ์์๊ฐ X์ถ์ผ๋ก 50px, Y์ถ์ผ๋ก 100px ์ด๋ํฉ๋๋ค.
2. translateX
translateX ํจ์๋ ์์๋ฅผ X์ถ์ ๋ฐ๋ผ ์ด๋์ํต๋๋ค. ๊ตฌ๋ฌธ์ ๋ค์๊ณผ ๊ฐ์ต๋๋ค.
transform: translateX(x);
์์
.example {
transform: translateX(50px);
}
์ ์์์์๋. example ์์๊ฐ X์ถ์ผ๋ก 50px ์ด๋ํฉ๋๋ค.
3. translateY
translateY ํจ์๋ ์์๋ฅผ Y์ถ์ ๋ฐ๋ผ ์ด๋์ํต๋๋ค. ๊ตฌ๋ฌธ์ ๋ค์๊ณผ ๊ฐ์ต๋๋ค.
transform: translateY(y);
์์
.example {
transform: translateY(100px);
}
์ ์์์์๋. example ์์๊ฐ Y์ถ์ผ๋ก 100px ์ด๋ํฉ๋๋ค.
4. translateZ
translateZ ํจ์๋ 3D ๊ณต๊ฐ์์ ์์๋ฅผ Z ์ถ์ ๋ฐ๋ผ ์ด๋์ํต๋๋ค. ๊ตฌ๋ฌธ์ ๋ค์๊ณผ ๊ฐ์ต๋๋ค.
transform: translateZ(z);
์์
.example {
transform: translateZ(200px);
}
์ ์์์์๋. example ์์๊ฐ Z ์ถ์ผ๋ก 200px ์ด๋ํฉ๋๋ค.
5. translate3d
translate3d ํจ์๋ ์์๋ฅผ X์ถ, Y์ถ ๋ฐ Z ์ถ์ ๋ฐ๋ผ 3์ฐจ์์ผ๋ก ์ด๋์ํต๋๋ค. ๊ตฌ๋ฌธ์ ๋ค์๊ณผ ๊ฐ์ต๋๋ค.
transform: translate3d(x, y, z);
์์
.example {
transform: translate3d(50px, 100px, 200px);
}
์ ์์์์๋. example ์์๊ฐ X์ถ์ผ๋ก 50px, Y์ถ์ผ๋ก 100px, Z ์ถ์ผ๋ก 200px ์ด๋ํฉ๋๋ค.
์ข ํฉ ์์
.example {
width: 100px;
height: 100px;
background-color: blue;
transform: translate(50px, 100px);
}
.example-x {
transform: translateX(50px);
}
.example-y {
transform: translateY(100px);
}
.example-z {
transform: translateZ(200px);
}
.example-3d {
transform: translate3d(50px, 100px, 200px);
}
Rotate ๐
rotate ํจ์๋ ์์๋ฅผ ํ์ ์ํค๋ ๋ฐ ์ฌ์ฉ๋ฉ๋๋ค. rotate ํจ์๋ ์์๋ฅผ 2D ํ๋ฉด ์์์ ์๊ณ ๋ฐฉํฅ ๋๋ ๋ฐ์๊ณ ๋ฐฉํฅ์ผ๋ก ํ์ ์ํต๋๋ค. ์ด ํ์ ์ ๊ธฐ๋ณธ์ ์ผ๋ก ์ค์ฌ์ ์ ๊ธฐ์ค์ผ๋ก ์ด๋ฃจ์ด์ง์ง๋ง, transform-origin ์์ฑ์ ์ฌ์ฉํ์ฌ ํ์ ์ค์ฌ์ ์ ๋ณ๊ฒฝํ ์ ์์ต๋๋ค.
3D ๊ณต๊ฐ์์ ์์๋ฅผ ํ์ ์ํค๊ธฐ ์ํด rotateX, rotateY, rotateZ ํจ์๋ฅผ ์ฌ์ฉํ ์ ์์ต๋๋ค.
1. rotate
rotate ํจ์๋ ์์๋ฅผ 2D ํ๋ฉด์์ ์ง์ ํ ๊ฐ๋๋งํผ ํ์ ์ํต๋๋ค. ์์ ๊ฐ์ ์ฌ์ฉํ๋ฉด ์๊ณ ๋ฐฉํฅ(์ค๋ฅธ์ชฝ)์ผ๋ก ํ์ ํ๊ณ , ์์ ๊ฐ์ ์ฌ์ฉํ๋ฉด ๋ฐ์๊ณ ๋ฐฉํฅ(์ผ์ชฝ)์ผ๋ก ํ์ ํฉ๋๋ค. ๊ตฌ๋ฌธ์ ๋ค์๊ณผ ๊ฐ์ต๋๋ค.
transform: rotate(angle);
- angle: ์์๋ฅผ ํ์ ์ํฌ ๊ฐ๋์
๋๋ค. ๋จ์๋ก๋ deg(๋), grad(๊ทธ๋ผ๋์ธํธ), rad(๋ผ๋์), turn(ํด) ๋ฑ์ด ์์ต๋๋ค.
- deg: ๋ ๋จ์ (360 deg๋ ํ ๋ฐํด ํ์ )
- grad: ๊ทธ๋ผ๋์ธํธ (400 grad๋ ํ ๋ฐํด ํ์ )
- rad: ๋ผ๋์ (2π rad๋ ํ ๋ฐํด ํ์ )
- turn: ํด (1 turn์ ํ ๋ฐํด ํ์ )
์์
.example {
transform: rotate(45deg); /* 45๋ ์๊ณ ๋ฐฉํฅ ํ์ */
}
์ ์์์์๋. example ์์๊ฐ 45๋ ์๊ณ ๋ฐฉํฅ์ผ๋ก ํ์ ํฉ๋๋ค.
2. rotateX
์์๋ฅผ X์ถ์ ๊ธฐ์ค์ผ๋ก ํ์ ์ํต๋๋ค. ๊ตฌ๋ฌธ์ ๋ค์๊ณผ ๊ฐ์ต๋๋ค.
transform: rotateX(angle);
์์
.example {
transform: rotateX(45deg); /* X์ถ์ ๊ธฐ์ค์ผ๋ก 45๋ ํ์ */
}
3. rotateY
์์๋ฅผ Y์ถ์ ๊ธฐ์ค์ผ๋ก ํ์ ์ํต๋๋ค. ๊ตฌ๋ฌธ์ ๋ค์๊ณผ ๊ฐ์ต๋๋ค.
transform: rotateY(angle);
์์
.example {
transform: rotateY(45deg); /* Y์ถ์ ๊ธฐ์ค์ผ๋ก 45๋ ํ์ */
}
4. rotateZ
์์๋ฅผ Z ์ถ์ ๊ธฐ์ค์ผ๋ก ํ์ ์ํต๋๋ค. rotate ํจ์์ ๋์ผํ๊ฒ ๋์ํฉ๋๋ค. ๊ตฌ๋ฌธ์ ๋ค์๊ณผ ๊ฐ์ต๋๋ค.
transform: rotateZ(angle);
์์
.example {
transform: rotateZ(45deg); /* Z์ถ์ ๊ธฐ์ค์ผ๋ก 45๋ ํ์ */
}
5. rotate3d
3D ๊ณต๊ฐ์์ ์์๋ฅผ ์์์ ์ถ์ ๊ธฐ์ค์ผ๋ก ํ์ ์ํฌ ๋ ์ฌ์ฉ๋ฉ๋๋ค. ๊ตฌ๋ฌธ์ ๋ค์๊ณผ ๊ฐ์ต๋๋ค.
transform: rotate3d(x, y, z, angle);
- x, y, z: ํ์ ์ถ์ ๋ฒกํฐ๋ฅผ ์ ์ํ๋ ๊ฐ์ ๋๋ค. ์๋ฅผ ๋ค์ด (1, 0, 0)์ X์ถ์, (0, 1, 0)์ Y์ถ์, (0, 0, 1)์ Z ์ถ์ ์๋ฏธํฉ๋๋ค.
- angle: ํ์ ๊ฐ๋์ ๋๋ค.
์์
.example {
transform: rotate3d(1, 1, 0, 45deg); /* X์ถ๊ณผ Y์ถ์ด ๊ฒฐํฉ๋ ์ถ์ ๊ธฐ์ค์ผ๋ก 45๋ ํ์ */
}
์ข
ํฉ ์์
.example {
width: 100px;
height: 100px;
background-color: blue;
transform: rotate(45deg);
}
.example-x {
transform: rotateX(45deg);
}
.example-y {
transform: rotateY(45deg);
}
.example-z {
transform: rotateZ(45deg);
}
.example-3d {
transform: rotate3d(1, 1, 0, 45deg);
}
.example-origin {
transform: rotate(45deg);
transform-origin: bottom right;
}
Scale๐
scale ํจ์๋ ์์์ ํฌ๊ธฐ๋ฅผ ๋ณ๊ฒฝํ๋ ๋ฐ ์ฌ์ฉ๋ฉ๋๋ค. ์ด ํจ์๋ ์์์ ๊ฐ๋ก, ์ธ๋ก ํฌ๊ธฐ๋ฅผ ๋น์จ์ ๋ฐ๋ผ ๋๋ฆฌ๊ฑฐ๋ ์ค์ด๋ ๊ธฐ๋ฅ์ ํฉ๋๋ค.
1. scale
scale ํจ์๋ ์์์ ํฌ๊ธฐ๋ฅผ X์ถ๊ณผ Y์ถ์ ๊ธฐ์ค์ผ๋ก ๋์์ ๋ณ๊ฒฝํฉ๋๋ค. ๊ตฌ๋ฌธ์ ๋ค์๊ณผ ๊ฐ์ต๋๋ค.
transform: scale(x, y);
- x: ์์์ ๊ฐ๋ก ํฌ๊ธฐ๋ฅผ ๋ณ๊ฒฝํ๋ ๋น์จ์ ๋๋ค.
- y: ์์์ ์ธ๋ก ํฌ๊ธฐ๋ฅผ ๋ณ๊ฒฝํ๋ ๋น์จ์ ๋๋ค. ์๋ตํ๋ฉด x์ ๋์ผํ ๊ฐ์ด ์ ์ฉ๋ฉ๋๋ค.
์์
.example {
transform: scale(1.5, 2); /* ๊ฐ๋ก 1.5๋ฐฐ, ์ธ๋ก 2๋ฐฐ */
}
์ ์์์์๋. example ์์๊ฐ ๊ฐ๋ก๋ก 1.5๋ฐฐ, ์ธ๋ก๋ก 2๋ฐฐ ์ปค์ง๋๋ค.
2.scaleX
scaleX ํจ์๋ ์์์ ๊ฐ๋ก ํฌ๊ธฐ๋ง ๋ณ๊ฒฝํฉ๋๋ค. ๊ตฌ๋ฌธ์ ๋ค์๊ณผ ๊ฐ์ต๋๋ค.
transform: scaleX(x);
์์
.example {
transform: scaleX(1.5); /* ๊ฐ๋ก 1.5๋ฐฐ */
}
์ ์์์์๋. example ์์์ ๊ฐ๋ก ํฌ๊ธฐ๋ง 1.5๋ฐฐ ์ปค์ง๋๋ค.
3.scaleY
scaleY ํจ์๋ ์์์ ์ธ๋ก ํฌ๊ธฐ๋ง ๋ณ๊ฒฝํฉ๋๋ค. ๊ตฌ๋ฌธ์ ๋ค์๊ณผ ๊ฐ์ต๋๋ค.
transform: scaleY(y);
์์
.example {
transform: scaleY(2); /* ์ธ๋ก 2๋ฐฐ */
}
์ ์์์์๋. example ์์์ ์ธ๋ก ํฌ๊ธฐ๋ง 2๋ฐฐ ์ปค์ง๋๋ค.
4.scaleZ
scaleZ ํจ์๋ 3D ๊ณต๊ฐ์์ ์์์ ๊น์ด(Z ์ถ)๋ฅผ ๋ณ๊ฒฝํฉ๋๋ค. ๊ตฌ๋ฌธ์ ๋ค์๊ณผ ๊ฐ์ต๋๋ค.
transform: scaleZ(z);
์์
.example {
transform: scaleZ(1.2); /* ๊น์ด 1.2๋ฐฐ */
}
์ ์์์์๋. example ์์์ ๊น์ด(Z ์ถ)๊ฐ 1.2๋ฐฐ ์ปค์ง๋๋ค.
5.scale3d
scale3d ํจ์๋ ์์์ X, Y, Z์ถ ํฌ๊ธฐ๋ฅผ ๋ชจ๋ ๋ณ๊ฒฝํฉ๋๋ค. ๊ตฌ๋ฌธ์ ๋ค์๊ณผ ๊ฐ์ต๋๋ค.
transform: scale3d(x, y, z);
์์
.example {
transform: scale3d(1.5, 2, 1.2); /* ๊ฐ๋ก 1.5๋ฐฐ, ์ธ๋ก 2๋ฐฐ, ๊น์ด 1.2๋ฐฐ */
}
์ ์์์์๋. example ์์๊ฐ ๊ฐ๋ก๋ก 1.5๋ฐฐ, ์ธ๋ก๋ก 2๋ฐฐ, ๊น์ด๋ก 1.2๋ฐฐ ์ปค์ง๋๋ค.
์ข
ํฉ ์์
.example {
width: 100px;
height: 100px;
background-color: blue;
transform: scale(1.5, 2);
}
.example-x {
transform: scaleX(1.5);
}
.example-y {
transform: scaleY(2);
}
.example-z {
transform: scaleZ(1.2);
}
.example-3d {
transform: scale3d(1.5, 2, 1.2);
}
Skew ๐
skew ํจ์๋ ์์๋ฅผ ๊ธฐ์ธ์ด๋ ๋ฐ ์ฌ์ฉ๋ฉ๋๋ค. ์ด ํจ์๋ ์์๋ฅผ X์ถ๊ณผ Y์ถ์ ๊ธฐ์ค์ผ๋ก ๊ธฐ์ธ์ฌ ๋น๋ค์ด์ง๊ฒ ๋ณํํฉ๋๋ค.
1.skew
skew ํจ์๋ ์์๋ฅผ X์ถ๊ณผ Y์ถ์ ๊ธฐ์ค์ผ๋ก ๋์์ ๊ธฐ์ธ์ ๋๋ค. ๊ตฌ๋ฌธ์ ๋ค์๊ณผ ๊ฐ์ต๋๋ค.
transform: skew(x-angle, y-angle);
- x-angle: ์์๋ฅผ X์ถ์ ๊ธฐ์ค์ผ๋ก ๊ธฐ์ธ์ด๋ ๊ฐ๋์ ๋๋ค.
- y-angle: ์์๋ฅผ Y์ถ์ ๊ธฐ์ค์ผ๋ก ๊ธฐ์ธ์ด๋ ๊ฐ๋์ ๋๋ค. ์๋ตํ๋ฉด 0์ด ๊ธฐ๋ณธ๊ฐ์ผ๋ก ์ ์ฉ๋ฉ๋๋ค.
์์
.example {
transform: skew(30deg, 20deg); /* X์ถ์ ๊ธฐ์ค์ผ๋ก 30๋, Y์ถ์ ๊ธฐ์ค์ผ๋ก 20๋ ๊ธฐ์ธ์ */
}
์ ์์์์๋ .example ์์๊ฐ X์ถ์ ๊ธฐ์ค์ผ๋ก 30๋, Y์ถ์ ๊ธฐ์ค์ผ๋ก 20๋ ๊ธฐ์ธ์ด์ง๋๋ค.
2.skewX
skewX ํจ์๋ ์์๋ฅผ X์ถ์ ๊ธฐ์ค์ผ๋ก๋ง ๊ธฐ์ธ์ ๋๋ค. ๊ตฌ๋ฌธ์ ๋ค์๊ณผ ๊ฐ์ต๋๋ค.
transform: skewX(x-angle);
์์
.example {
transform: skewX(30deg); /* X์ถ์ ๊ธฐ์ค์ผ๋ก 30๋ ๊ธฐ์ธ์ */
}
์ ์์์์๋ .example ์์๊ฐ X์ถ์ ๊ธฐ์ค์ผ๋ก 30๋ ๊ธฐ์ธ์ด์ง๋๋ค.
3.skewY
skewY ํจ์๋ ์์๋ฅผ Y์ถ์ ๊ธฐ์ค์ผ๋ก๋ง ๊ธฐ์ธ์ ๋๋ค. ๊ตฌ๋ฌธ์ ๋ค์๊ณผ ๊ฐ์ต๋๋ค.
transform: skewY(y-angle);
์์
.example {
transform: skewY(20deg); /* Y์ถ์ ๊ธฐ์ค์ผ๋ก 20๋ ๊ธฐ์ธ์ */
}
์ ์์์์๋ .example ์์๊ฐ Y์ถ์ ๊ธฐ์ค์ผ๋ก 20๋ ๊ธฐ์ธ์ด์ง๋๋ค.
์ข
ํฉ ์์
.example {
width: 100px;
height: 100px;
background-color: blue;
transform: skew(30deg, 20deg);
}
.example-x {
transform: skewX(30deg);
}
.example-y {
transform: skewY(20deg);
}
Transform ์์ฑ์ ๊ณ ๊ธ ์ฌ์ฉ๋ฒ ๐ก
๋ค์ค ๋ณํ ํจ๊ณผ ๊ฒฐํฉํ๊ธฐ โ
์ฌ๋ฌ ๋ณํ ํจ๊ณผ๋ฅผ ํ๋์ ์์์ ๋์์ ์ ์ฉํ ์ ์์ต๋๋ค.
.element {
transform: translate(50px, 50px) rotate(45deg) scale(1.5);
}
์์
<div class="box">Box</div>
<style>
.box {
width: 100px;
height: 100px;
background-color: orange;
transform: translate(50px, 50px) rotate(45deg) scale(1.5);
}
</style>
transform-origin ์์ฑ์ผ๋ก ๋ณํ ๊ธฐ์ค์ ์ค์ ํ๊ธฐ ๐ฏ
transform-origin ์์ฑ์ CSS์์ transform ์์ฑ๊ณผ ํจ๊ป ์ฌ์ฉ๋๋ฉฐ, ๋ณํ์ด ์ ์ฉ๋ ๋ ๊ธฐ์ค์ด ๋๋ ์์ ์ ์ค์ ํฉ๋๋ค. ๊ธฐ๋ณธ์ ์ผ๋ก, ๋ณํ์ ์์์ ์ค์ฌ์ ๊ธฐ์ค์ผ๋ก ์ด๋ฃจ์ด์ง์ง๋ง, transform-origin์ ์ฌ์ฉํ๋ฉด ์ด๋ฅผ ๋ณ๊ฒฝํ ์ ์์ต๋๋ค.
transform-origin: x y z;
- x: X์ถ ๋ฐฉํฅ์ ๊ธฐ์ค์ ์ ๋๋ค. ๊ธฐ๋ณธ๊ฐ์ 50%๋ก, ์์์ ๊ฐ๋ก ์ค์ฌ์ ์๋ฏธํฉ๋๋ค. ๋จ์๋ก๋ px, %, left, center, right ๋ฑ์ ์ฌ์ฉํ ์ ์์ต๋๋ค.
- y: Y์ถ ๋ฐฉํฅ์ ๊ธฐ์ค์ ์ ๋๋ค. ๊ธฐ๋ณธ๊ฐ์ 50%๋ก, ์์์ ์ธ๋ก ์ค์ฌ์ ์๋ฏธํฉ๋๋ค. ๋จ์๋ก๋ px, %, top, center, bottom ๋ฑ์ ์ฌ์ฉํ ์ ์์ต๋๋ค.
- z: Z ์ถ ๋ฐฉํฅ์ ๊ธฐ์ค์ ์ ๋๋ค. ๊ธฐ๋ณธ๊ฐ์ 0์ผ๋ก, 3D ๋ณํ์ ๊ฒฝ์ฐ์ ์ฌ์ฉ๋ฉ๋๋ค. ๋จ์๋ก๋ px, % ๋ฑ์ ์ฌ์ฉํ ์ ์์ต๋๋ค.
๊ธฐ๋ณธ ์์
.example {
width: 100px;
height: 100px;
background-color: blue;
transform: rotate(45deg);
transform-origin: top left; /* ๋ณํ์ ๊ธฐ์ค์ ์ ์ผ์ชฝ ์๋จ ๋ชจ์๋ฆฌ๋ก ์ค์ */
}
์ ์์์์๋. example ์์๊ฐ ์ผ์ชฝ ์๋จ ๋ชจ์๋ฆฌ๋ฅผ ๊ธฐ์ค์ผ๋ก 45๋ ํ์ ํฉ๋๋ค.
X์ถ๊ณผ Y์ถ์ ํผ์ผํธ๋ก ์ค์
.example {
width: 100px;
height: 100px;
background-color: blue;
transform: rotate(45deg);
transform-origin: 75% 25%; /* ๋ณํ์ ๊ธฐ์ค์ ์ ์์์ ๊ฐ๋ก 75%, ์ธ๋ก 25% ์ง์ ์ผ๋ก ์ค์ */
}
์ ์์์์๋. example ์์๊ฐ ๊ฐ๋ก 75%, ์ธ๋ก 25% ์ง์ ์ ๊ธฐ์ค์ผ๋ก 45๋ ํ์ ํฉ๋๋ค.
X, Y, Z ์ถ ์ค์
.example {
width: 100px;
height: 100px;
background-color: blue;
transform: rotate3d(1, 1, 1, 45deg);
transform-origin: 50% 50% 100px; /* ๋ณํ์ ๊ธฐ์ค์ ์ Z์ถ 100px๋ก ์ค์ */
}
์ ์์์์๋. example ์์๊ฐ X, Y, Z ์ถ์ ๊ธฐ์ค์ผ๋ก 45๋ ํ์ ํ๋ฉฐ, ๊ธฐ์ค์ ์ Z ์ถ์ผ๋ก 100px ๋จ์ด์ง ์ง์ ์ ๋๋ค.
์ข
ํฉ ์์
.example-center {
width: 100px;
height: 100px;
background-color: blue;
transform: rotate(45deg);
transform-origin: center; /* ๊ธฐ๋ณธ๊ฐ, ์์์ ์ค์ฌ์ ๊ธฐ์ค์ผ๋ก ํ์ */
}
.example-top-left {
transform: rotate(45deg);
transform-origin: top left; /* ์ผ์ชฝ ์๋จ ๋ชจ์๋ฆฌ๋ฅผ ๊ธฐ์ค์ผ๋ก ํ์ */
}
.example-percentage {
transform: rotate(45deg);
transform-origin: 75% 25%; /* ๊ฐ๋ก 75%, ์ธ๋ก 25% ์ง์ ์ ๊ธฐ์ค์ผ๋ก ํ์ */
}
.example-3d {
transform: rotate3d(1, 1, 1, 45deg);
transform-origin: 50% 50% 100px; /* Z์ถ์ผ๋ก 100px ๋จ์ด์ง ์ง์ ์ ๊ธฐ์ค์ผ๋ก ํ์ */
}
3D ๋ณํ ํจ๊ณผ๐
3D ๋ณํ ํจ๊ณผ๋ CSS์ transform ์์ฑ์ ์ฌ์ฉํ์ฌ ์์๋ฅผ 3์ฐจ์ ๊ณต๊ฐ์์ ๋ณํ์ํค๋ ๊ธฐ๋ฅ์ ๋งํฉ๋๋ค. ์ด๋ฅผ ํตํด ์์๋ฅผ ํ์ , ์ด๋, ํฌ๊ธฐ ์กฐ์ ๋ฑ์ ํ ์ ์์ผ๋ฉฐ, ์ฌ์ฉ์์๊ฒ ์ ์ฒด์ ์ธ ์๊ฐ์ ํจ๊ณผ๋ฅผ ์ ๊ณตํ ์ ์์ต๋๋ค.
rotate3d
rotate3d(x, y, z, angle): ์ง์ ๋ ์ถ์ ์ค์ฌ์ผ๋ก ์์๋ฅผ ํ์ ์ํต๋๋ค. x, y, z๋ ํ์ ์ถ์ ๋ํ๋ด๋ฉฐ, angle์ ํ์ ๊ฐ๋๋ฅผ ๋ํ๋ ๋๋ค.
transform: rotate3d(1, 1, 1, 45deg);
translate3d
translate3d(x, y, z): X, Y, Z ์ถ์ ๋ฐ๋ผ ์์๋ฅผ ์ด๋์ํต๋๋ค. x, y, z๋ ๊ฐ๊ฐ X์ถ, Y์ถ, Z ์ถ ๋ฐฉํฅ์ผ๋ก ์ด๋ํ๋ ๊ฑฐ๋ฆฌ๋ฅผ ๋ํ๋ ๋๋ค.
transform: translate3d(100px, -50px, 200px);
scale3d
scale3d(x, y, z): X, Y, Z ์ถ์ ๋ฐ๋ผ ์์์ ํฌ๊ธฐ๋ฅผ ๋ณ๊ฒฝํฉ๋๋ค. x, y, z๋ ๊ฐ๊ฐ X์ถ, Y์ถ, Z ์ถ ๋ฐฉํฅ์ผ๋ก ํฌ๊ธฐ๋ฅผ ์กฐ์ ํ๋ ๋น์จ์ ๋ํ๋ ๋๋ค.
transform: scale3d(2, 1.5, 0.5);
perspective
perspective: 3D ๋ณํ ํจ๊ณผ๋ฅผ ๋ ๊น์ด๊ฐ ์๊ฒ ๋ง๋ค๊ธฐ ์ํด ์์ ์ ์ค์ ํฉ๋๋ค. ํด๋น ์์์ ์์ ์์๋ค์๊ฒ ์ํฅ์ ๋ฏธ์นฉ๋๋ค.
transform: perspective(1000px);
์ข
ํฉ ์์
.example {
width: 100px;
height: 100px;
background-color: blue;
transform: rotate3d(1, 1, 1, 45deg) translate3d(100px, -50px, 200px) scale3d(2, 1.5, 0.5);
}
์ ์์ ์์๋. example ์์๋ฅผ X, Y, Z ์ถ์ ๊ธฐ์ค์ผ๋ก ํ์ ์ํค๊ณ , ์ด๋์ํค๋ฉฐ, ํฌ๊ธฐ๋ฅผ ๋ณ๊ฒฝ์ํต๋๋ค. ์ด๋ฅผ ํตํด ์ ์ฒด์ ์ธ ๋ณํ ํจ๊ณผ๋ฅผ ๋ง๋ค์ด ๋ ๋๋ค.
์ค์ ์์ ์ ์ฝ๋ ์ค๋ํซ๐ป
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<style>
.container {
display: flex;
justify-content: space-around;
align-items: center;
height: 100vh;
}
.box {
width: 100px;
height: 100px;
background-color: red;
transition: transform 0.5s;
}
.box:hover {
transform: translate(50px, 50px) rotate(45deg) scale(1.5);
}
</style>
</head>
<body>
<div class="container">
<div class="box">Hover me!</div>
</div>
</body>
</html>
์์ ์์ ์์๋ ๋ง์ฐ์ค๋ฅผ ์์ ์์ ์ฌ๋ ธ์ ๋, ์์๊ฐ ์ด๋, ํ์ , ํ๋๋๋ ํจ๊ณผ๋ฅผ ๊ตฌํํ์ต๋๋ค.
Transform ์์ฑ์ ์ฅ์ ๊ณผ ์ฃผ์์ฌํญโ ๏ธ
Transform ์์ฑ์ ์ฃผ์ ์ฅ์ ์ ๋ค์๊ณผ ๊ฐ์ต๋๋ค:
- ๋ธ๋ผ์ฐ์ ํธํ์ฑ: ๋๋ถ๋ถ์ ์ต์ ๋ธ๋ผ์ฐ์ ์์ ์ง์๋ฉ๋๋ค.
- ์ฑ๋ฅ ์ต์ ํ: GPU๋ฅผ ํ์ฉํ์ฌ ์ฑ๋ฅ์ด ํฅ์๋ฉ๋๋ค.
์ฌ์ฉ ์ ์ฃผ์ํ ์ :
- ๊ณผ๋ํ ์ฌ์ฉ ์์ : ์ง๋์น๊ฒ ๋ง์ ๋ณํ ํจ๊ณผ๋ ์ฑ๋ฅ ์ ํ๋ฅผ ์ด๋ํ ์ ์์ต๋๋ค.
- ํธํ์ฑ ๋ฌธ์ : ์ค๋๋ ๋ธ๋ผ์ฐ์ ์์๋ ์ผ๋ถ ๊ธฐ๋ฅ์ด ์ ๋๋ก ์๋ํ์ง ์์ ์ ์์ต๋๋ค.
ํต์ฌ ๋ด์ฉ๐