Skip to content
TASK ORIENTED
LinkedInGithub

CSS Transition & Transform & Animation

โ€” HTML, CSS โ€” 5 min read

๐Ÿ’ก CSS์˜ Transition, Transform, Animation ์˜ˆ์ œ ์ •๋ฆฌ

๊ฐœ์š” ๐Ÿ›ซ


Interative ํ•œ ์›น ํŽ˜์ด์ง€๋ฅผ ๋งŒ๋“ค๊ธฐ ์œ„ํ•œ ๊ธฐ์ดˆ์ธ CSS Transition, Animation์„ ์ •๋ฆฌํ•ด๋ณด์ž.

์‚ฌ์šฉ์ž์˜ ์ƒํ˜ธ์ž‘์šฉ์— ๋”ฐ๋ผ ํ™”๋ คํ•˜๊ฒŒ ์›€์ง์ด๋Š” ์›น ์‚ฌ์ดํŠธ๋ฅผ ๋งŒ๋“ค๊ธฐ ์œ„ํ•ด์„œ๋Š” Javascript ์ง€์‹์ด ์ƒ๋‹นํžˆ ํ•„์š”ํ•˜์ง€๋งŒ, ๊ธฐ๋ณธ์ ์œผ๋กœ Transition๊ณผ Animation์„ ์•„๋Š” ๊ฒƒ๋งŒ์œผ๋กœ๋„ ์–ด๋А ์ •๋„ ๊ตฌํ˜„์ด ๊ฐ€๋Šฅํ•˜๋‹ค.

์ด๋ฒˆ ํฌ์ŠคํŠธ์—์„œ๋Š” Transition๊ณผ Animation์˜ ์†์„ฑ๋“ค์„ ๋‹ค๋ค„๋ณด๋„๋ก ํ•˜๊ฒ ๋‹ค.

ํ•™์Šต ๋‚ด์šฉ ๐Ÿ“–


Transition

CSS transitions๋Š” ์—ฌ๋Ÿฌ๋ถ„์ด (๋ช…์‹œ์ ์œผ๋กœ ๋ชฉ๋ก์„ ์ž‘์„ฑํ•ด์„œ) ์–ด๋–ค ์†์„ฑ์„ ์›€์ง์ด๊ฒŒ ํ• ์ง€, (๋”œ๋ ˆ์ด๋ฅผ ์„ค์ •ํ•ด์„œ) ์–ธ์ œ ์• ๋‹ˆ๋ฉ”์ด์…˜์ด ์‹œ์ž‘ํ• ์ง€, (์ง€์† ์‹œ๊ฐ„์„ ์„ค์ •ํ•ด์„œ) ํŠธ๋žœ์ง€์…˜์„ ์–ผ๋งˆ๋‚˜ ์ง€์†ํ• ์ง€, ๊ทธ๋ฆฌ๊ณ  (์˜ˆ๋ฅผ ๋“ค๋ฉด, ์„ ํ˜•์ด๊ฑฐ๋‚˜ ์ดˆ๊ธฐ ๋น ๋ฆ„, ์ข…๋ฃŒ ๋А๋ฆผ๊ณผ ๊ฐ™์€ ํƒ€์ด๋ฐ ํ•จ์ˆ˜๋ฅผ ์ •์˜ํ•ด์„œ) ์–ด๋–ป๊ฒŒ ํŠธ๋žœ์ง€์…˜์„ ์‹คํ–‰ํ•˜๋Š”์ง€ ๊ฒฐ์ •ํ•˜๊ฒŒ ํ•ฉ๋‹ˆ๋‹ค.


Transition์˜ ์†์„ฑ

  • property
  • duration
<style>
.transition {
transition-property: width;
transition-duration: 2s;
}
</style>

.property: ํšจ๊ณผ๋ฅผ ์ ์šฉํ•˜๊ณ ์ž ํ•˜๋Š” css ์†์„ฑ .duration: ํšจ๊ณผ๊ฐ€ ๋‚˜ํƒ€๋‚˜๋Š”๋ฐ ๊ฑธ๋ฆฌ๋Š” ์‹œ๊ฐ„


  • timing-function
  • delay
<style>
.transition {
transition-timing-function: linear;
transition-delay: 1s;
}
</style>

.timing-function: ํšจ๊ณผ์˜ ์†๋„ (linear๋Š” โ€˜์ผ์ •ํ•˜๊ฒŒโ€™๋ผ๋Š” ์˜๋ฏธ) .delay: ํŠน์ • ์กฐ๊ฑด ํ•˜์—์„œ ํšจ๊ณผ ๋ฐœ๋™ (1s๋Š” โ€˜1์ดˆ ํ›„โ€™๋ผ๋Š” ์˜๋ฏธ)

  • hover
<style>
.transition:hover { width: 300px; }
</style>
  • css์—์„œ ๋ฏธ๋ฆฌ ๋งŒ๋“ค์–ด ๋†“์€ ํด๋ž˜์Šค๋กœ,ย ๋งˆ์šฐ์Šค๋ฅผ ์˜ฌ๋ ธ์„ ๋•Œ๋ผ๋Š” ์กฐ๊ฑด
  • Note:ย **.transition:hover**๋ฅผ ๋„์–ด์“ฐ๊ธฐ ์—†์ด ์ž‘์„ฑํ•ด์•ผ ํ•จ

์ข…ํ•ฉ ์˜ˆ์‹œ

<style>
.transition {
transition: width 2s linear 1s;
}
.transition:hover { width: 300px; }
</style>
  • ๋งˆ์šฐ์Šค๋ฅผ ์˜ฌ๋ฆฌ๋ฉดย 1์ดˆ ํ›„์— width ๊ฐ’์ดย 300px๋กœ,ย 2์ดˆ ๋™์•ˆ ์†๋„ ์ผ์ •ํ•˜๊ฒŒ ๋ณ€ํ•˜๋Š” ์• ๋‹ˆ๋งค์ด์…˜ ํšจ๊ณผ ๋ฐœ๋™

Transform

CSS ์†์„ฑ์„ ๋ณ€๊ฒฝํ•  ๋•Œ ์• ๋‹ˆ๋ฉ”์ด์…˜ ์†๋„๋ฅผ ์กฐ์ ˆํ•  ์ˆ˜ ์žˆ๊ฒŒ ํ•œ๋‹ค.

CSS์˜ ์†์„ฑ ๋ณ€ํ™”๊ฐ€ ์ง€์ •ํ•œ ์„ค์ •์—๋”ฐ๋ผ ์ผ์–ด๋‚  ์ˆ˜ ์žˆ๊ฒŒ ๋งŒ๋“ค์–ด ์ค€๋‹ค.

์˜ˆ์ œ

<style>
.transition {
transfrom: rotate(45deg);/* ํšŒ์ „ */transform: scale(2,3);/* ํ™•๋Œ€ ์ถ•์†Œ */
}
</style>
  • .rotate(angle): ์ž…๋ ฅํ•œ ๊ฐ๋„๋งŒํผ ํšŒ์ „ํ•˜๋ฉฐ, ์Œ์ˆ˜๋„ ์ž…๋ ฅ ๊ฐ€๋Šฅ
  • .scale(x, y): ์ˆซ์ž๋Š” ๋น„์œจ์˜ ์˜๋ฏธํ•˜๋ฉฐ width๋ฅผ x๋ฐฐ, height๋ฅผ y๋ฐฐ ๋งŒํผ ํ™•๋Œ€

Point IIskew, translate

<style>
.transition {
transform: skew(10deg, 20deg);/* ๊ฐ๋„ ๋ณ€๊ฒฝ */transform: translate(100px; 200px);/* ์œ„์น˜ ๋ณ€๊ฒฝ */
}
</style>
  • .skew(x, y): x์ถ•, y์ถ•์„ ๊ธฐ์ค€์œผ๋กœ ์ž…๋ ฅํ•œ ๊ฐ๋„๋งŒํผ ๋น„ํ‹‚
  • .translate(x, y): ์„ ํƒํ•œ ์˜ค๋ธŒ์ ํŠธ์˜ ์ขŒํ‘œ ๋ณ€๊ฒฝ

Point IIIprefix ์ ‘๋‘์‚ฌ

<style>
.transition {
-webkit-transform: translate(100px, 200px);/* ํฌ๋กฌ, ์‚ฌํŒŒ๋ฆฌ */
-mox-transform: translate(100px, 200px);/* ํŒŒ์ด์–ดํญ์Šค */
-ms-transform: translate(100px, 200px ;/* ์ต์Šคํ”Œ๋กœ๋Ÿฌ 9.0 */
-o-transform: translate(100px, 200px);/* ์˜คํŽ˜๋ผ */
}
</style>
  • Transform์€ CSS์˜ ์ตœ์‹  ๋ฒ„์ „์—์„œ๋งŒ ์‹คํ–‰ ๊ฐ€๋Šฅํ•œ ํ‚ค์›Œ๋“œ์ด์ง€๋งŒ, prefix๋ฅผ ์ถ”๊ฐ€ํ•˜๋ฉด ํ•˜์œ„ ๋ฒ„์ „์˜ ๋ธŒ๋ผ์šฐ์ €์—์„œ๋„ ์‹คํ–‰ ๊ฐ€๋Šฅ

Animation

CSS Selector์˜ ์ข…๋ฅ˜๋ฅผ ์•Œ์•„๋ณด๊ณ  ์˜ˆ์ œ๋ฅผ ํ†ตํ•ด ์–ด๋–ป๊ฒŒ ์ ์šฉ๋˜๋Š”์ง€ ํ™•์ธํ•ด๋ณด๊ฒ ๋‹ค.


์˜ˆ์ œ

.animation {
animation-name: changeWidth;/* ์• ๋‹ˆ๋งค์ด์…˜ ์ด๋ฆ„ */animation-duration: 3s;
animation-timing-function: linear;
animation-delay: 1s;
animation-iteration-count: 6;
animation-direction: alternate;
}
@keyframes changeWidth {
from { width: 300px; }
to {width: 600px; ]
}
  • .iteration-count: ์• ๋‹ˆ๋ฉ”์ด์…˜ ๋ฐ˜๋ณต ํšŸ์ˆ˜
  • .direction: ์• ๋‹ˆ๋งค์ด์…˜ ์ง„ํ–‰ ๋ฐฉํ–ฅ
    1. alternate: from โ†’ to โ†’ from
    2. normal: from โ†’ to, from โ†’ to
    3. reverse: to โ†’ from, to โ†’ from

4. ์• ๋‹ˆ๋ฉ”์ด์…˜ ์‘์šฉ

Point ITransform & Animation

.box1 {
animation: rotation 1500ms linear infinite alternate;
}
@keyframes rotation {
from { transform: rotate(-10deg); }
to { transform: rotate(10deg); }
}
  • ์• ๋‹ˆ๋ฉ”์ด์…˜ ์ฝ”๋“œ๋ฅผ ํ•œ ์ค„๋กœ ์ž‘์„ฑ์‹œ, ๋จผ์ € ๋‚˜์˜ค๋Š” ์ˆซ์ž๊ฐ€ย **.duration**์ด๊ณ , ๋‚˜์ค‘์— ๋‚˜์˜ค๋Š” ์ˆซ์ž๊ฐ€ย .delay

Point IIprefix ์ž‘์„ฑ์‹œ ์œ ์˜์‚ฌํ•ญ

.box1 {
-webkit-animation: rotation 3s linear 1s 6 alternate;
}
@-webkit-keyframes rotation {
from {-webkit-transform: rotate(-10deg); }
to {-webkit-transform: rotate(10deg); }
}
  • prefix๊ฐ€ ๊ฐ™์€ ์• ๋‹ˆ๋ฉ”์ด์…˜๋ผ๋ฆฌ ์—ฐ๋™

Review ๐Ÿ’ก

CSS์˜ transition & transform & animation์„ ์ž˜ ์‚ฌ์šฉํ•˜๋ฉด ๋งŽ์€ ๋ฐฉ์‹์˜ ์ด๋ฏธ์ง€๋‚˜ UI๋ฅผ ๊ตฌํ˜„ํ•  ์ˆ˜ ์žˆ์„ ๊ฒƒ ๊ฐ™๋‹ค.

ยฉ 2024 by TASK ORIENTED. All rights reserved.
Theme by LekoArts