CSS ์์ฑ 13. transition-transform
โ๏ธ ํด๋น ๊ธ์ ํจ์คํธ์บ ํผ์ค - ํ๋ก ํธ์๋ ๊ฐ๋ฐ ๊ฐ์์์ HTML & CSS, SASS(SCSS) Part์ ๋ฐ์์ ๊ฐ์ฌ๋์ ๊ฐ์์๋ฃ๋ฅผ ์ ๋ฆฌํ ๊ฒ์ ๋๋ค.
transition
#
CSS ์์ฑ์ ์์๊ณผ ๋์ ์ง์ (์ ํ ํจ๊ณผ)ํ์ฌ ์ค๊ฐ ๊ฐ์ ์ ๋๋ฉ์ด์ - ๋จ์ถ ์์ฑ
#
์์ฑ ๊ฐ๊ฐ | ์๋ฏธ | ๊ธฐ๋ณธ๊ฐ |
---|---|---|
transition-property | ์ ํ ํจ๊ณผ๋ฅผ ์ฌ์ฉํ ์์ฑ ์ด๋ฆ | all |
transition-duration | ์ ํ ํจ๊ณผ์ ์ง์์๊ฐ ์ค์ | 0s |
transition-timing-function | ํ์ด๋ฐ ํจ์ ์ง์ | ease |
transition-delay | ์ ํ ํจ๊ณผ์ ๋๊ธฐ์๊ฐ ์ค์ | 0s |
#
์์ <div class="box"></div>
.box {width: 100px;height: 100px;background: tomato;margin: 50px;transition: width 1s, background 2s;}.box:hover {width: 300px;background: dodgerblue;}
โ๏ธ transition ์ด ์ผ์ด๋๊ธฐ ์ ๋จ๊ณ์ ์์ฑ์ ์ง์ ํ๋ค.
transition-property
#
์ ํ ํจ๊ณผ๋ฅผ ์ฌ์ฉํ ์์ฑ ์ด๋ฆ์ ์ค์ - ๊ฐ๋ณ ์์ฑ
#
์์ฑ ๊ฐ๊ฐ | ์๋ฏธ | ๊ธฐ๋ณธ๊ฐ |
---|---|---|
all | ๋ชจ๋ ์์ฑ์ ์ ์ฉ | all |
์์ฑ ์ด๋ฆ | ์ ํ ํจ๊ณผ๋ฅผ ์ฌ์ฉํ ์์ฑ ์ด๋ฆ |
transition-duration
#
์ ํ ํจ๊ณผ์ ์ง์์๊ฐ์ ์ค์ - ๊ฐ๋ณ ์์ฑ
#
์์ฑ ๊ฐ๊ฐ | ์๋ฏธ | ๊ธฐ๋ณธ๊ฐ |
---|---|---|
์๊ฐ | ์ ํ ํจ๊ณผ๊ฐ ์ง์๋๋ ์๊ฐ | 0s |
โ๏ธ ms ๋จ์๋ ๊ฐ๋ฅ
transition-timing-function
#
ํ์ด๋ฐ ํจ์(์ ๋๋ฉ์ด์ ์ ํ ํจ๊ณผ๋ฅผ ๊ณ์ฐํ๋ ๋ฐฉ๋ฒ) ์ง์ - ๊ฐ๋ณ ์์ฑ
#
์์ฑ ๊ฐ๊ฐ | ์๋ฏธ | ๊ธฐ๋ณธ๊ฐ | Cubic Bezier ๊ฐ |
---|---|---|---|
ease | ๋น ๋ฅด๊ฒ - ๋๋ฆฌ๊ฒ | ease | cubic-bezier(.25, .1, .25, 1) |
linear | ์ผ์ ํ๊ฒ | cubic-bezier(0, 0, 1, 1) | |
ease-in | ๋๋ฆฌ๊ฒ - ๋น ๋ฅด๊ฒ | cubic-bezier(.42, 0, 1, 1) | |
ease-out | ๋น ๋ฅด๊ฒ - ๋๋ฆฌ๊ฒ | cubic-bezier(0, 0, .58, 1) | |
ease-in-out | ๋๋ฆฌ๊ฒ - ๋น ๋ฅด๊ฒ - ๋๋ฆฌ๊ฒ | cubic-bezier(.42, 0, .58, 1) | |
cubic-bezier(n, n, n, n) | ์์ ๋ง์ ๊ฐ์ ์ ์ ( 0 ~ 1 ) | ||
steps(n) | n ๋ฒ ๋ถํ ๋ ์ ๋๋ฉ์ด์ |
Easing Functions Cheat Sheet
transition-delay
#
์ ํ ํจ๊ณผ๊ฐ ๋ช ์ด ๋ค์ ์์ํ ์ง ๋๊ธฐ์๊ฐ์ ์ค์ - ๊ฐ๋ณ ์์ฑ
#
์์ฑ ๊ฐ๊ฐ | ์๋ฏธ | ๊ธฐ๋ณธ๊ฐ |
---|---|---|
์๊ฐ | ์ ํ ํจ๊ณผ์ ๋๊ธฐ์๊ฐ์ ์ค์ | 0s |
โ๏ธ transition: 2s 3s; ๋ก ์ ๋ ฅํ๋ฉด ์์ ์ค๋ ์๊ฐ์ด duration , ๋ค์ ์ค๋ ์๊ฐ์ด delay ์ด๋ค.
transform
#
์์์ ๋ณํ ํจ๊ณผ(๋ณํ)์ ์ง์ - ๋จ์ถ ์์ฑ
transform
2D ๋ณํ ํจ์#
๊ฐ(๋ณํํจ์) | ์๋ฏธ | ๋จ์ |
---|---|---|
translate(x, y) | ์ด๋(X์ถ, Y์ถ) | ๋จ์ |
translate(x) | ์ด๋(X์ถ) | ๋จ์ |
translate(y) | ์ด๋(Y์ถ) | ๋จ์ |
scale(x, y) | ํฌ๊ธฐ(X์ถ, Y์ถ) | ์์(๋ฐฐ์) |
scaleX(x) | ํฌ๊ธฐ(X์ถ) | ์์(๋ฐฐ์) |
scaleY(y) | ํฌ๊ธฐ(Y์ถ) | ์์(๋ฐฐ์) |
rotate(degree) | ํ์ (๊ฐ๋) | deg |
skew(x-deg, y-deg) | ๊ธฐ์ธ์(X์ถ, Y์ถ) | deg |
skewX(x-deg) | ๊ธฐ์ธ์(X์ถ) | deg |
skewY(y-deg) | ๊ธฐ์ธ์(Y์ถ) | deg |
matrix(n, n, n, n, n, n) | 2์ฐจ์ ๋ณํ ํจ๊ณผ | ์์ |
transform
3D ๋ณํ ํจ์#
๊ฐ(๋ณํํจ์) | ์๋ฏธ | ๋จ์ |
---|---|---|
translate3d(x, y, z) | ์ด๋(X์ถ, Y์ถ, Z์ถ) | ๋จ์ |
translateZ(z) | ์ด๋(Z์ถ) | ๋จ์ |
scale3d(x, y, z) | ํฌ๊ธฐ(X์ถ, Y์ถ, Z์ถ) | ์์(๋ฐฐ์) |
scaleZ(z) | ํฌ๊ธฐ(Z์ถ) | ์์(๋ฐฐ์) |
rotate3d(x, y, z, a) | ํ์ (X๋ฒกํฐ, Y๋ฒกํฐ, Z๋ฒกํฐ, ๊ฐ๋) | ์์, deg |
rotateX(x) | ํ์ (X์ถ) | deg |
rotateY(y) | ํ์ (Y์ถ) | deg |
rotateZ(z) | ํ์ (Z์ถ) | deg |
perspective(n) | ์๊ทผ๋ฒ(๊ฑฐ๋ฆฌ) | ๋จ์ |
matrix3d(n, n, n, n, n, n, n, n, n, n, n, n, n, n, n, n) | 3์ฐจ์ ๋ณํ ํจ๊ณผ | ์์ |
#
์ฌ์ฉ๋ฒtransform: ๋ณํํจ์1 ๋ณํํจ์2 ๋ณํํจ์3 ...;transform: ์๊ทผ๋ฒ ์ด๋ ํฌ๊ธฐ ํ์ ๊ธฐ์ธ์;
.box {transform: rotate(20deg) translate(10px, 0);}
2D ๋ณํ ํจ๊ณผ, 3D ๋ณํ ํจ๊ณผ๊ฐ ์๋ค.
#
2D ์์ <div class="box">123</div>
.box {width: 200px;height: 200px;background: tomato;display: flex;justify-content: center;align-items: center;font-size: 30px;transition: 1s;}.box:hover {transform: translate(30px, 30px);}
โ๏ธ translate(30px, 30px) vs position: relative; left: 30px; top: 30px; : position ์ ์ด๋ ์์น์ ๋ฐฐ์นํด๋๊ณ ์์น๊ฐ ๋ค์ ๋ณํ์ง ์๋ ๊ฒฝ์ฐ์ ์ฌ์ฉํ๊ณ (์ ๋๋ฉ์ด์ ์ ์ต์ ํ๋์ด ์์ง ์๋ค.) translate ๋ ์์น๊ฐ ์์๋ก ๋ณํ ์ ์๋ ๊ฒฝ์ฐ์ ์ฌ์ฉํ๋ค.
#
3D ์์ <img src="https://heropy.blog/css/images/logo.png" alt="HEROPY">
img {width: 300px;border: 1px solid lightgray;transform: perspective(500px) rotateX(45deg);}
โ๏ธ perspective() ๋ transform์ ์์ฑ ๊ฐ ์ค์ ์ ์ผ ์์ ์์ผ ํ๋ค.
transform
๋ณํ ์์ฑ#
์์ฑ | ์๋ฏธ |
---|---|
transform-origin | ์์ ๋ณํ์ ๊ธฐ์ค์ ์ ์ค์ |
transform-style | 3D ๋ณํ ์์์ ์์ ์์๋ 3D ๋ณํ์ ์ฌ์ฉํ ์ง ์ค์ |
perspective | ํ์ ์์๋ฅผ ๊ด์ฐฐํ๋ ์๊ทผ ๊ฑฐ๋ฆฌ๋ฅผ ์ค์ |
perspective-origin | ์๊ทผ ๊ฑฐ๋ฆฌ์ ๊ธฐ์ค์ ์ ์ค์ |
backface-visibility | 3D ๋ณํ์ผ๋ก ํ์ ๋ ์์์ ๋ท๋ฉด ์จ๊น์ ์ค์ |
transform-origin
#
์์ ๋ณํ์ ๊ธฐ์ค์ ์ ์ค์
#
์์ฑ ๊ฐ๊ฐ | ์๋ฏธ | ๊ธฐ๋ณธ๊ฐ |
---|---|---|
X์ถ | left , right , center , % , ๋จ์ | 50% |
Y์ถ | top , bottom , center , % , ๋จ์ | 50% |
Z์ถ | ๋จ์ | 0 |
#
์์ <img src="https://heropy.blog/css/images/logo.png" alt="HEROPY">
img {width: 200px;border: 1px solid lightgray;transition: 1s;transform: rotate(45deg);transform-origin: 100% 100%;}
transform-style
#
3D ๋ณํ ์์์ ์์ ์์๋ 3D ๋ณํ์ ์ฌ์ฉํ ์ง ์ค์
#
์์ฑ ๊ฐ๊ฐ | ์๋ฏธ | ๊ธฐ๋ณธ๊ฐ |
---|---|---|
flat | ์์ ์์์ 3D ๋ณํ์ ์ฌ์ฉํ์ง ์์ | flat |
preserve-3d | ์์ ์์์ 3D ๋ณํ์ ์ฌ์ฉํจ |
#
์์ <div class="perspective"><div class="grand-parent"><div class="parent"><img src="https://heropy.blog/css/images/logo.png" alt="HEROPY"></div></div></div>
.perspective {width: 200px;perspective: 500px;padding: 70px;}.grand-parent{width: 200px;border: 3px solid dodgerblue;transition: 1s;transform: rotateX(-45deg);transform-style: preserve-3d;}.parent {width: 200px;border: 3px solid tomato;transition: 1s;transform: rotateY(45deg);transform-style: preserve-3d;}img {width: 200px;border: 3px solid lightgray;transition: 1s;transform: rotateX(45deg);}
perspective
#
ํ์ ์์๋ฅผ ๊ด์ฐฐํ๋ ์๊ทผ ๊ฑฐ๋ฆฌ๋ฅผ ์ค์
#
์์ฑ ๊ฐ๊ฐ | ์๋ฏธ | ๊ธฐ๋ณธ๊ฐ |
---|---|---|
๋จ์ | px , em , cm ๋ฑ ๋จ์๋ก ์ง์ |
perspective
์์ฑ๊ณผ ํจ์์ ์ฐจ์ด์ #
์์ฑ/ํจ์ | ์ ์ฉ๋์ | ๊ธฐ์ค์ ์ค์ |
---|---|---|
perspective | ๊ด์ฐฐ ๋์์ ๋ถ๋ชจ ์์ | perspective-origin |
transform: perspective() | ๊ด์ฐฐ ๋์ | transform-origin |
perspective-origin
#
์๊ทผ ๊ฑฐ๋ฆฌ์ ๊ธฐ์ค์ ์ ์ค์
#
์์ฑ ๊ฐ๊ฐ | ์๋ฏธ | ๊ธฐ๋ณธ๊ฐ |
---|---|---|
X์ถ | left , right, center, % , ๋จ์ | 0.5 |
Y์ถ | top , bottom , center , % , ๋จ์ | 0.5 |
backface-visibility
#
3D ๋ณํ์ผ๋ก ํ์ ๋ ์์์ ๋ท๋ฉด ์จ๊น์ ์ค์
#
์์ฑ ๊ฐ๊ฐ | ์๋ฏธ | ๊ธฐ๋ณธ๊ฐ |
---|---|---|
visible | ๋ท๋ฉด ์จ๊ธฐ์ง ์์ | visible |
hidden | ๋ท๋ฉด ์จ๊น |
matric(a, b, c, d, e, f)
#
์์์ 2์ฐจ์ ๋ณํ(Transforms) ํจ๊ณผ๋ฅผ ์ง์
scale()
, skew()
, translate()
, rotate()
๋ฅผ ์ง์
matrix-function
โ๏ธ ์์์ ์ผ๋ฐ ๋ณํ(Transforms) ํจ์(2D, 3D)๋ฅผ ์ฌ์ฉํ๋๋ผ๋ ๋ธ๋ผ์ฐ์ ์ ์ํด matrix ํจ์๋ก ๊ณ์ฐ๋์ด ์ ์ฉ๋๋ค. (2D ๋ณํ ํจ์๋ matrix ๋ก, 3D ๋ณํ ํจ์๋ matrix3d ๋ก) ๋ฐ๋ผ์ ์ผ๋ฐ์ ์ธ ๊ฒฝ์ฐ๋ matrix ํจ์๊ฐ ์๋ ์ผ๋ฐ ๋ณํ ํจ์๋ฅผ ์ฌ์ฉํ๋ฉด ๋๋ค.
#
Referenceํจ์คํธ์บ ํผ์ค - ํ๋ก ํธ์๋ ๊ฐ๋ฐ ๊ฐ์ - HTML & CSS, SASS(SCSS) Part by ParkYoungWoong