๐Ÿš„

ch3 - 1. transition & transform

Index


1. Transition

1.1 Transition์ด๋ž€?

์ด๋ฒˆ ์žฅ์—์„œ๋Š” transition์— ๋Œ€ํ•ด์„œ ์•Œ์•„๋ณด๋„๋ก ํ•˜๊ฒ ์Šต๋‹ˆ๋‹ค. transition์ด๋ž€ CSS ์†์„ฑ๊ฐ’์ด ๋ณ€ํ•  ๋•Œ, ๊ฐ’์˜ ๋ณ€ํ™”๊ฐ€ ์ผ์ • ์‹œ๊ฐ„์— ๊ฑธ์ณ ์ผ์–ด๋‚˜๋„๋ก ํ•˜๋Š” ๊ฒƒ์„ ๋งํ•ฉ๋‹ˆ๋‹ค. ์—ฌ๋Ÿฌ ์†์„ฑ๋“ค์€ ์ฐจ๊ทผ์ฐจ๊ทผ ์‚ดํŽด๋ณด๋„๋ก ํ•˜๊ณ  ๊ฐ€๋ฒผ์šด ์˜ˆ์ œ๋ฅผ ํ†ตํ•ด transition์ด ๋ฌด์—‡์ธ์ง€ ๊ฒฝํ—˜ํ•ด ๋ณด๋„๋ก ํ•˜์ฃ .
notion imagenotion image
<!DOCTYPE html> <html> <head> <title>Transition Test</title> <style> div{ width: 100px; height: 100px; background-color: red; } div:hover{ width: 300px; height: 300px; background-color: blue; } </style> </head> <body> <div>hello world</div> </body> </html>
๊ฐ€๋กœ, ์„ธ๋กœ 100px์— ๋นจ๊ฐ• ๋ฐฐ๊ฒฝ์ƒ‰์„ ๊ฐ€์ง„ div๊ฐ€ ํ•˜๋‚˜ ์žˆ์Šต๋‹ˆ๋‹ค. div์— ๋งˆ์šฐ์Šค๋ฅผ ์˜ฎ๊ธฐ๊ฒŒ ๋˜๋ฉด ๊ฐ€๋กœ, ์„ธ๋กœ 300px์— ํŒŒ๋ž‘ ๋ฐฐ๊ฒฝ์ƒ‰์„ ๊ฐ€์ง„ div๋กœ ๋ณ€ํ•˜๊ฒŒ ๋˜๋Š” ๊ฑธ ํ™•์ธํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
์—ฌ๊ธฐ์„œ style์— ์ฝ”๋“œ ํ•œ ์ค„๋งŒ ์ถ”๊ฐ€ํ•ด๋ณผ๊นŒ์š”? ์ง€๊ธˆ์€ ์ด ์ฝ”๋“œ๊ฐ€ ๋ฌด์—‡์„ ์˜๋ฏธํ•˜๋Š”์ง€ ๋ชจ๋ฅด์…”๋„ ๋ฉ๋‹ˆ๋‹ค.
transition: all 2s;
๊ทธ ๊ฒฐ๊ณผ,
์ฆ‰์‹œ ๋ณ€๊ฒฝ๋˜๋ฉด ์†์„ฑ๊ฐ’๋“ค์ด ์‹œ๊ฐ„์„ ๋‘๊ณ  ์ฒœ์ฒœํžˆ ๋ฐ”๋€Œ๋Š” ๊ฑธ ํ™•์ธํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์• ๋‹ˆ๋ฉ”์ด์…˜์ฒ˜๋Ÿผ ๋ง์ด์ฃ . ์ด๊ฒƒ์ด ๋ฐ”๋กœ transition์˜ ๋งˆ๋ฒ•์ž…๋‹ˆ๋‹ค. transition์— ๋Œ€ํ•ด ํ•จ๊ป˜ ๋” ์•Œ์•„๋ณด๋„๋ก ํ•ฉ์‹œ๋‹ค.
notion imagenotion image

1.2 Transition์˜ ์†์„ฑ๋“ค

1.2.1 transition - delay

  • delay๋ž€? delay๊ฐ€ ๋ฌด์Šจ ๋œป์ธ๊ฐ€์š”? ๋งž์Šต๋‹ˆ๋‹ค. ํ•œ๊ตญ์–ด๋กœ ๋ฒˆ์—ญํ•˜๋ฉด '์ง€์—ฐ'์ด๋ผ๋Š” ๋œป์ž…๋‹ˆ๋‹ค. ๋ง ๊ทธ๋Œ€๋กœ transition ์ด ์ผ์–ด๋‚  ๋•Œ ์–ผ๋งˆ๋งŒํผ ๊ธฐ๋‹ค๋ ธ๋‹ค๊ฐ€ ์‹คํ–‰ํ• ์ง€ ๊ฒฐ์ •ํ•ด์ฃผ๋Š” ์†์„ฑ์ž…๋‹ˆ๋‹ค.
  • delay์˜ ๊ฐ’ delay๋Š” transition์ด ์ผ์–ด๋‚˜๊ธฐ ์ „๊นŒ์ง€ ์–ผ๋งˆ๋‚˜ ๊ธฐ๋‹ค๋ฆด์ง€ ์ง€์ •ํ•ด ์ฃผ๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค. ๊ทธ๋ ‡๊ธฐ ๋•Œ๋ฌธ์— ์†์„ฑ๊ฐ’์œผ๋กœ๋Š” ์‹œ๊ฐ„์ด ๋“ค์–ด๊ฐ€๊ฒŒ ๋ฉ๋‹ˆ๋‹ค. ์ดˆ ๋‹จ์œ„๋ฅผ ๋‚˜ํƒ€๋‚ด๋Š” s๋‚˜ ๋ฐ€๋ฆฌ ์ดˆ๋ฅผ ๋‚˜ํƒ€๋‚ด๋Š” ms๋กœ ๋‚˜ํƒ€๋ƒ…๋‹ˆ๋‹ค. ์ง€์ •ํ•ด ์ฃผ์ง€ ์•Š์„ ์‹œ์—๋Š” 0s์„ ์˜๋ฏธํ•˜๋ฉฐ ์ง€์—ฐ ์—†์ด ๋ฐ”๋กœ transition์ด ์ผ์–ด๋‚ฉ๋‹ˆ๋‹ค.
    • delay์˜ ๊ฐ’์œผ๋กœ ์Œ์ˆ˜ ๊ฐ’๋„ ์ง€์ •ํ•ด์ค„ ์ˆ˜ ์žˆ๋‚˜์š”?
      ์˜์™ธ๋กœ ์Œ์ˆ˜๊ฐ’์œผ๋กœ ์ง€์ •์ด ๊ฐ€๋Šฅํ•ฉ๋‹ˆ๋‹ค. ์Œ์ˆ˜๊ฐ’์„ ์ง€์ •ํ•  ๊ฒฝ์šฐ์—๋Š” ์ง€์—ฐ ์—†์ด ๋ฐ”๋กœ transition์ด ์‹คํ–‰๋˜๋ฉฐ ์ง€์ •ํ•ด์ค€ ์Œ์ˆ˜๊ฐ’์˜ ์ ˆ๋Œ€๊ฐ’ ์‹œ๊ฐ„๋งŒํผ ๊ธฐ๋‹ค๋ ธ๋‹ค๊ฐ€ ์‹œ์ž‘ํ•˜๊ฒŒ ๋ฉ๋‹ˆ๋‹ค.
  • delay ์˜ˆ์‹œ ๋งˆ์šฐ์Šค๋ฅผ ์˜ฌ๋ ธ์„ ๋•Œ ๋ฐฐ๊ฒฝ์„ ๋ฐ”๊ฟ”์ฃผ๋Š” ์˜ˆ์ œ์ž…๋‹ˆ๋‹ค. ์„ธ ๊ฐœ์˜ div์— ๋Œ€ํ•ด์„œ delay ๊ฐ’์„ ๋‹ค๋ฅด๊ฒŒ ์ง€์ •ํ•ด์ฃผ์—ˆ์Šต๋‹ˆ๋‹ค. ์ฐจ์ด๋ฅผ ์ง์ ‘ ํ™•์ธํ•ด ๋ณด๋„๋ก ํ•ฉ์‹œ๋‹ค.
<!DOCTYPE html> <html> <head> <title>Transition Test</title> <style> body{ display: flex; } div{ width: 100px; height: 100px; background: red; font: bold; color: white; margin-right: 10px; display: flex; justify-content: center; align-items: center; } .first{ transition-delay: 0s; } .second{ transition-delay: 1s; } .third{ transition-delay: 2s; } div:hover{ background: blue; } </style> </head> <body> <div class="first">0์ดˆ</div> <div class="second">1์ดˆ</div> <div class="third">2์ดˆ</div> </body> </html>
notion imagenotion image

1.2.2 transition - duration

  • duration ์ด๋ž€? ์ด๋ฒˆ์—๋„ ๋œป์„ ์•Œ์•„๋ณผ๊นŒ์š”? duration์€ ํ•œ๊ตญ์–ด๋กœ '์ง€์†'์ด๋ผ๋Š” ๋œป์ž…๋‹ˆ๋‹ค. transition์ด ์ผ์–ด๋‚˜๋Š” ์ง€์†์‹œ๊ฐ„์„ ์„ค์ •ํ•ด ์ค„ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์œ„์—์„œ delay๋งŒ ์‚ฌ์šฉํ•˜์˜€์„ ๊ฒฝ์šฐ์—๋Š” ์ง€์—ฐ์‹œ๊ฐ„ ํ›„์— CSS ์†์„ฑ๊ฐ’์ด ๊ฐ‘์ž๊ธฐ ํ™• ๋ณ€ํ•ด ์• ๋‹ˆ๋ฉ”์ด์…˜๊ณผ ๊ฐ™์€ ํšจ๊ณผ๋ฅผ ๊ฐ€์ ธ์˜ฌ ์ˆ˜ ์—†์—ˆ์Šต๋‹ˆ๋‹ค. duration์„ ์‚ฌ์šฉํ•œ ํ›„ ๋ณ€ํ™”๋ฅผ ์•Œ์•„๋ณด๋„๋ก ํ•ฉ์‹œ๋‹ค.
  • duration์˜ ๊ฐ’ transition์ด ์–ผ๋งˆ๋งŒํผ์˜ ์‹œ๊ฐ„ ๋™์•ˆ ๋ณ€ํ• ์ง€ ์ง€์ •ํ•ด ์ฃผ์–ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. ๊ทธ๋ ‡๊ฒŒ ๋•Œ๋ฌธ์— delay์™€ ์œ ์‚ฌํ•˜๊ฒŒ ์‹œ๊ฐ„์„ ์†์„ฑ๊ฐ’์œผ๋กœ ๊ฐ–์Šต๋‹ˆ๋‹ค. ์ดˆ ๋‹จ์œ„๋ฅผ ๋‚˜ํƒ€๋‚ด๋Š” s ๋‚˜ ๋ฐ€๋ฆฌ ์ดˆ๋ฅผ ๋‚˜ํƒ€๋‚ด๋Š” ms๋กœ์„œ ๋‚˜ํƒ€๋ƒ…๋‹ˆ๋‹ค. ์ง€์ •ํ•ด ์ฃผ์ง€ ์•Š์„ ์‹œ์—๋Š” 0s๋ฅผ ์˜๋ฏธํ•˜๋ฉฐ transition์˜ ํšจ๊ณผ๊ฐ€ ๋‚˜ํƒ€๋‚˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.
  • duration ์˜ˆ์‹œ ๋งˆ์ฐฌ๊ฐ€์ง€๋กœ ๋งˆ์šฐ์Šค๋ฅผ ์˜ฌ๋ ธ์„ ๋•Œ ๋ฐฐ๊ฒฝ์„ ๋ฐ”๊ฟ”์ฃผ๋Š” ์˜ˆ์‹œ์ž…๋‹ˆ๋‹ค. duration๊ฐ’์— ๋”ฐ๋ผ์„œ ์„œ์„œํžˆ ํšจ๊ณผ๊ฐ€ ๋‚˜ํƒ€๋‚˜๋Š” ๊ฒƒ์„ ํ™•์ธํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
<!DOCTYPE html> <html> <head> <title>Transition Test</title> <style> body{ display: flex; } div{ width: 100px; height: 100px; background: red; font: bold; color: white; margin-right: 10px; display: flex; justify-content: center; align-items: center; } .first{ transition-duration: 0s; } .second{ transition-duration: 1s; } .third{ transition-duration: 2s; } div:hover{ background: blue; } </style> </head> <body> <div class="first">0์ดˆ</div> <div class="second">1์ดˆ</div> <div class="third">2์ดˆ</div> </body> </html>
notion imagenotion image

1.2.3 transition - property

  • property๋ž€? property๋ž€ ํ•œ๊ตญ์–ด๋กœ '์†์„ฑ'์ด๋ผ๋Š” ๋œป์ž…๋‹ˆ๋‹ค. ๋”ฐ๋ผ์„œ transition-property๋ž€ ์–ด๋–ค ์†์„ฑ์— transitionํšจ๊ณผ๋ฅผ ์ค„์ง€ ์„ค์ •ํ•˜๋Š” ๊ฒƒ์„ ๋งํ•ฉ๋‹ˆ๋‹ค. transition-property๋ฅผ ํ†ตํ•ด ๋” ํ™”๋ คํ•œ ์• ๋‹ˆ๋ฉ”์ด์…˜ ํšจ๊ณผ๋ฅผ ์ค„ ์ˆ˜ ์žˆ๊ฒ ์ฃ ?
  • property์˜ ๊ฐ’ ์†์„ฑ๊ฐ’์œผ๋กœ๋Š” all, none, property, initial, inherit์ด ์žˆ์Šต๋‹ˆ๋‹ค. all์€ ๊ธฐ๋ณธ๊ฐ’์œผ๋กœ ๋ชจ๋“  ์†์„ฑ์— transitionํšจ๊ณผ๊ฐ€ ๋‚˜ํƒ€๋‚˜๊ฒŒ ํ•˜๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค. none์€ ์†์„ฑ๋“ค์ด transitionํšจ๊ณผ๋ฅผ ๋ฐ›์ง€ ๋ชปํ•˜๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค. property๋Š” transitionํšจ๊ณผ๋ฅผ ์ ์šฉํ•˜๊ณ  ์‹ถ์€ css ์†์„ฑ์„ ์„ค์ •ํ•˜๋ฉด ์ง€์ •๋œ ์†์„ฑ์— transition์ด ๋‚˜ํƒ€๋‚ฉ๋‹ˆ๋‹ค. ํ•˜๋‚˜ ์ด์ƒ์˜ ์†์„ฑ์— ์ ์šฉํ•˜๊ณ  ์‹ถ์„ ๋•Œ๋Š” ์‰ผํ‘œ๋กœ ๋‚˜์—ดํ•ฉ๋‹ˆ๋‹ค. initial์€ ์†์„ฑ์˜ ๊ธฐ๋ณธ๊ฐ’์œผ๋กœ ์„ค์ •ํ•ด์ฃผ๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค. inherit์€ ๋ถ€๋ชจ ์š”์†Œ์˜ ์†์„ฑ๊ฐ’์„ ์ƒ์†๋ฐ›์Šต๋‹ˆ๋‹ค.
  • property ์˜ˆ์ œ (๊ฐ„๋‹จํ•˜๊ฒŒ all, none, property์— ํ•ด๋‹นํ•˜๋Š” ์˜ˆ์ œ๋ฅผ ์•Œ์•„๋ด…์‹œ๋‹ค.)
    • all์˜ˆ์ œ
      <!DOCTYPE html> <html> <head> <title>transition-property all์˜ˆ์ œ</title> <style> div { width: 100px; height: 100px; background-color: red; -webkit-transition-property: all; /* safari */ -webkit-transition-duration: 2s; /* safari */ transition-property: all; transition-duration: 2s; text-align: center; color: white; font-size: 20px; font-weight: bold; line-height: 100px; } div:hover { background-color: blue; width: 200px; height: 200px; line-height: 200px; } </style> </head> <body> <div>all</div> </body> </html>
      notion imagenotion image
      none์˜ˆ์ œ
      <!DOCTYPE html> <html> <head> <title>transition-property none์˜ˆ์ œ</title> <style> div { width: 100px; height: 100px; background-color: red; -webkit-transition-property: none; /* safari */ -webkit-transition-duration: 2s; /* safari */ transition-property: none; transition-duration: 2s; text-align: center; color: white; font-size: 20px; font-weight: bold; line-height: 100px; } div:hover { background-color: blue; width: 200px; height: 200px; line-height: 200px; } </style> </head> <body> <div>all</div> </body> </html>
      notion imagenotion image
      transition-property: all์ผ๋•Œ๋Š” 2์ดˆ ๋™์•ˆ ์„œ์„œํžˆ ๋ณ€ํ•˜๋Š” ๊ฒƒ์ด transition-duration: 2s๋ฅผ ์คฌ์Œ์—๋„ ๋ถˆ๊ตฌํ•˜๊ณ  ๊ฐ‘์ž๊ธฐ ๋ณ€ํ•˜๋Š” ๊ฒƒ์„ ๋ณด์‹ค ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. transition-property: none์„ ์ฃผ๋ฉด ๋‹ค๋ฅธ transition๋“ค์„ ๋ฌด์‹œํ•˜๋Š” ๊ฑฐ์ฃ .
      property์˜ˆ์ œ
      <!DOCTYPE html> <html> <head> <title>transition-property property์˜ˆ์ œ</title> <style> div { width: 100px; height: 100px; background-color: red; -webkit-transition-property: width, height; /* Safari */ -webkit-transition-duration: 2s; /* Safari */ transition-property: width, height; transition-duration: 2s; } div:hover { width: 200px; height: 200px; background-color: blue; } </style> </head> <body> <div></div> </body> </html>
      notion imagenotion image
      transition-property: width, height๋งŒ ์คฌ์œผ๋‹ˆ background-color์†์„ฑ์€ transition-duration: 2sํšจ๊ณผ๋ฅผ ๋ฐ›์ง€ ๋ชปํ•ฉ๋‹ˆ๋‹ค. ๋”ฐ๋ผ์„œ width, heigth๋Š” 2์ดˆ๋™์•ˆ 100px์—์„œ 200px๋กœ ์„œ์„œํžˆ ๋ณ€ํ•˜์ง€๋งŒ background-color์€ ๊ธ‰๊ฒฉํ•˜๊ฒŒ blue๋กœ ๋ฐ”๋€๋‹ˆ๋‹ค.

1.2.4 transition - timing - function

  • timing-function ์ด๋ž€? transition-timing-function์œผ๋กœ transition์˜ ์ง„ํ–‰ ์†๋„๋ฅผ ์„ค์ •ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. transition-timing-function์€ IE์˜ ๊ฒฝ์šฐ, ๋ฒ„์ „ 10๋ถ€ํ„ฐ ์‚ฌ์šฉ ๊ฐ€๋Šฅํ•ฉ๋‹ˆ๋‹ค.
  • timing-function์˜ ๊ฐ’ ์†์„ฑ๊ฐ’์œผ๋กœ๋Š” ease, linear, ease-in, ease-out, ease-in-out, step-start, step-end, steps(int, start|end), cubic-bezier(n, n, n, n), initial, inherit์ด ์žˆ์Šต๋‹ˆ๋‹ค. ๋Œ€๋ถ€๋ถ„์˜ timing ํ•จ์ˆ˜๋“ค์€ cubic bezier์ด๋ผ๋Š” ๊ฒƒ์„ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค. cubic bezier๊ณก์„ ์ด๋ž€ ๋ถ€๋“œ๋Ÿฌ์šด ๊ณก์„ ์„ ๋ชจ๋ธ๋ง ํ•˜๊ธฐ ์œ„ํ•ด ์ปดํ“จํ„ฐ ๊ทธ๋ž˜ํ”ฝ์—์„œ ๋„๋ฆฌ ์“ฐ์ด๋Š” ๊ฒƒ์œผ๋กœ 4๊ฐœ์˜ ์ปจํŠธ๋กค ํฌ์ธํŠธ๋ฅผ ์‚ฌ์šฉํ•ด transition์˜ ์‹œ์ž‘๊ณผ ๋๊นŒ์ง€์˜ ํšจ๊ณผ๋ฅผ ์ œ์–ดํ•ฉ๋‹ˆ๋‹ค. 1) ease์˜ ๊ฒฝ์šฐ, ๊ธฐ๋ณธ๊ฐ’์œผ๋กœ transition์ด ์ฒœ์ฒœํžˆ ์‹œ์ž‘๋˜์–ด ๊ทธ ๋‹ค์Œ์—๋Š” ๋นจ๋ผ์ง€๊ณ  ๋งˆ์ง€๋ง‰์—๋Š” ๋‹ค์‹œ ๋Š๋ ค์ง‘๋‹ˆ๋‹ค. cubic-bezier(0.25, 0.1, 0.25, 0.1)๊ณผ ๊ฐ™์Šต๋‹ˆ๋‹ค. 2) linear์€ transition์ด ์ฒ˜์Œ๋ถ€ํ„ฐ ๋๊นŒ์ง€ ์ผ์ •ํ•œ ์†๋„๋กœ ์ง„ํ–‰๋ฉ๋‹ˆ๋‹ค. cubic-bezier(0, 0, 1, 1)๊ณผ ๊ฐ™์Šต๋‹ˆ๋‹ค. 3) ease-in์€ ์ฒœ์ฒœํžˆ ์‹œ์ž‘ํ•˜๋Š” ๊ฒƒ์œผ๋กœ cubic-bezier(0.42, 0, 1, 1)๊ณผ ๊ฐ™์Šต๋‹ˆ๋‹ค. 4) ease-out์€ ์ฒœ์ฒœํžˆ ๋๋‚˜๋Š” ๊ฒƒ์ด๊ณ  cubic-bezier(0, 0, 0.58, 1)๊ณผ ๊ฐ™์Šต๋‹ˆ๋‹ค. 5) ease-in-out์€ ์ฒœ์ฒœํžˆ ์‹œ์ž‘ํ•ด์„œ ์ฒœ์ฒœํžˆ ๋๋‚˜๋Š” ๊ฒƒ์ด๊ณ  cubic-bezier(0.42, 0, 0.58, 1)๊ณผ ๊ฐ™์Šต๋‹ˆ๋‹ค. 6) step-start์€ steps(1, start)๊ณผ ๊ฐ™์œผ๋ฉฐ ์‹œ์ž‘ํ•˜๋Š” ์‹œ์ ์— ์Šคํ…์„ ๋Š์–ด์ค๋‹ˆ๋‹ค. 7) step-end์€ steps(1, end)์™€ ๊ฐ™์œผ๋ฉฐ ๋๋‚˜๋Š” ์‹œ์ ์— ์Šคํ…์„ ๋Š์–ด์ค๋‹ˆ๋‹ค. 8) steps(int, start|end)์€ int ์ž๋ฆฌ์— ์ •์ˆ˜๋ฅผ ๋„ฃ๊ณ  start๋‚˜ end๋ฅผ ๋„ฃ์–ด์ฃผ๋ฉด ๋„ฃ์–ด์ค€ ์ •์ˆ˜๋งŒํผ ์‹œ์ž‘์ด๋‚˜ ๋๋‚˜๋Š” ์‹œ์ ์— ์Šคํ…์„ ๋Š์–ด์ค๋‹ˆ๋‹ค. 9) cubic-bezier(n, n, n, n)๋ฅผ ์‚ฌ์šฉํ•ด ๋ฒ ์ง€์–ด ๊ณก์„ ์— ์›ํ•˜๋Š” ์ปจํŠธ๋กค ํฌ์ธํŠธ๋ฅผ ์ง์ ‘ ๋„ฃ์–ด์ค„ ์ˆ˜๋„ ์žˆ์Šต๋‹ˆ๋‹ค. 10) initial์€ ์†์„ฑ์˜ ๊ธฐ๋ณธ๊ฐ’์œผ๋กœ ์ ์šฉ๋ฉ๋‹ˆ๋‹ค. 11) inherit์€ ๋ถ€๋ชจ์˜ ์˜ํ–ฅ์„ ๋ฐ›์•„ ์ ์šฉ๋ฉ๋‹ˆ๋‹ค.
  • timing-function ์˜ˆ์ œ

1.2.5 transition

transition ์†์„ฑ์„ ์‚ฌ์šฉํ•ด ์—ฌํƒœ๊นŒ์ง€ ๋ฐฐ์›Œ๋ณธ transition ์†์„ฑ๋“ค์„ ํ•œ๋ฒˆ์— ์ ์šฉ์‹œํ‚ฌ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
transition ์€ transition-property transition-duration transition-timing-function transition-delay ๋กœ ์ด๋ฃจ์–ด์ ธ ์žˆ์œผ๋ฉฐ ์˜ˆ์ œ๋กœ ์ถ”๊ฐ€์‹œํ‚จ ๊ทธ๋ฆผ์„ ํ•ด์„ํ•ด๋ณด๋ฉด width ์†์„ฑ์„ 2์ดˆ ๋™์•ˆ ์ฒ˜์Œ๋ถ€ํ„ฐ ๋๊นŒ์ง€ ์ผ์ •ํ•œ ์†๋„๋กœ 1์ดˆ ์ง€์—ฐ์‹œํ‚จ ๋’ค์— transition ํšจ๊ณผ๊ฐ€ ์ผ์–ด๋‚˜๋Š” ๊ฒƒ์„ ์˜๋ฏธํ•ฉ๋‹ˆ๋‹ค. ์•ž์—์„œ transition์˜ ์†์„ฑ๋“ค์— ๋Œ€ํ•ด์„œ ๋ฐฐ์› ์œผ๋‹ˆ ํ•ด๋‹นํ•˜๋Š” ์œ„์น˜์— ์•Œ๋งž์€ value๋“ค์„ ๋„ฃ์„ ์ˆ˜ ์žˆ์„ ๊ฒƒ์ž…๋‹ˆ๋‹ค.

1.3 transform

ย 

1.3.1 transform ์ด๋ž€?

transform(๋ณ€ํ˜•)์€ Object๋ฅผ ์—ฌ๋Ÿฌ ํ˜•ํƒœ๋กœ ๋ณ€ํ˜•ํ•  ๋•Œ ์‚ฌ์šฉํ•˜๋Š” ์†์„ฑ์œผ๋กœ, transition๊ณผ ํ•จ๊ป˜ ์‚ฌ์šฉํ•˜๋ฉด ์—„์ฒญ๋‚œ ํšจ๊ณผ๋ฅผ ๋‚ผ ์ˆ˜ ์žˆ๋Š” ์†์„ฑ์ž…๋‹ˆ๋‹ค. transform์€ ํ˜•ํƒœ๋ฅผ ๋ณ€ํ˜•์‹œํ‚ฌ ์ˆ˜ ์žˆ๋Š” ๋‹ค์–‘ํ•œ ์†์„ฑ๋“ค์ด ์กด์žฌํ•ฉ๋‹ˆ๋‹ค. ๊ทธ ์ค‘ ๊ฐ€์žฅ ๋งŽ์ด ์‚ฌ์šฉํ•˜๋Š” scale, rotate, translate, skew , origin์„ ์•Œ์•„๋ณด๊ฒ ์Šต๋‹ˆ๋‹ค.
ย 

1.3.1.1 scale

<!DOCTYPE html> <html> <head> <title>Transition Test</title> <style> .box{ width:100px; height:100px; background:dodgerblue; transition:all 1s; } .box:hover{ transform:scale(2); } </style> </head> <body> <div class="box">hello world</div> </body> </html>
notion imagenotion image
scale์€ ํ˜•ํƒœ์˜ ํฌ๊ธฐ๋ฅผ ๋ณ€ํ™˜ ์‹œํ‚ฌ ๋•Œ ์‚ฌ์šฉํ•˜๋Š” ์†์„ฑ์œผ๋กœ ๋งˆ์น˜ ์œ„์— ์˜ˆ์‹œ์—์„œ width์™€ height์˜ ํฌ๊ธฐ๋ฅผ ๋Š˜๋ฆฐ ๊ฒƒ์ฒ˜๋Ÿผ ๋ณ€ํ˜•์ด ๋˜์ง€๋งŒ width์™€ height๋ฅผ ๋Š˜๋ ธ์„ ๊ฒฝ์šฐ์—” ์˜ค๋ฅธ์ชฝ ์•„๋ž˜๊ฐ€ ์ปค์ง€๋Š” ๋ฐ˜๋ฉด์— scale์€ ์ค‘์‹ฌ์ ์ด ๊ฐ€์šด๋ฐ์ด๊ธฐ ๋•Œ๋ฌธ์— ๊ฐ€์šด๋ฐ๋ฅผ ์ค‘์‹ฌ์œผ๋กœ ์ปค์ง€๋Š” ํšจ๊ณผ๋ฅผ ๋‚˜ํƒ€๋ƒ…๋‹ˆ๋‹ค. scale(1)์—์„œ 1 = 100%๋ฅผ ๋œปํ•˜๋ฉฐ 1 ์ด์ƒ์˜ ๊ฐ’์„ ์ž…๋ ฅํ•ด์•ผ ๋ณ€ํ˜•์ด ์ผ์–ด๋‚˜๊ฒŒ ๋ฉ๋‹ˆ๋‹ค. ์ฝ”๋“œ์—์„œ๋Š” scale(2)๋ฅผ ์ž…๋ ฅํ–ˆ๊ธฐ ๋•Œ๋ฌธ์— ์ง€๊ธˆ๋ณด๋‹ค 2๋ฐฐ์˜ ํฌ๊ธฐ๋งŒํผ ์ปค์ง„ ๋ชจ์Šต์ด ์ถœ๋ ฅ๋ฉ๋‹ˆ๋‹ค. scale์˜ ๊ฐ’์—๋Š” 2๊ฐ€์ง€ ์ธ์ž๋ฅผ ๋ฐ›์„ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. (x์ถ•, y์ถ•)์œผ๋กœ ์„ค์ • ๊ฐ€๋Šฅํ•˜๋ฉฐ ํ•œ ๊ฐœ์˜ ์ธ์ž๊ฐ’๋งŒ ์ž…๋ ฅํ•  ๊ฒฝ์šฐ x, y๋™์ผํ•œ ์ˆ˜์น˜๋ฅผ ๋œปํ•ฉ๋‹ˆ๋‹ค. transition์„ ํ•จ๊ป˜ ์‚ฌ์šฉํ–ˆ๊ธฐ ๋•Œ๋ฌธ์— ์ž์—ฐ์Šค๋Ÿฌ์šด ํ™”๋ฉด ์ „ํ™˜ ํšจ๊ณผ๋ฅผ ํ•จ๊ป˜ ํ™•์ธํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
ย 

1.3.1.2 rotate

<!DOCTYPE html> <html> <head> <title>Transition Test</title> <style> .box{ width:100px; height:100px; background:dodgerblue; transition:all 1s; } .box:hover{ transform:rotate(360deg); } </style> </head> <body> <div class="box">hello world</div> </body> </html>
notion imagenotion image
rotate๋Š” ํšŒ์ „์„ ์‹œ์ผœ์ฃผ๋Š” ๊ฐ’์ž…๋‹ˆ๋‹ค. ๊ด„ํ˜ธ ์•ˆ์— ๊ฐ๋„๋ฅผ ์ž…๋ ฅํ•˜๋ฉด ์ž…๋ ฅ๊ฐ’๋งŒํผ ํšŒ์ „์„ ํ•˜๋ฉฐ, ์‚ฌ์šฉ ๋‹จ์œ„๋Š” deg(degree)๋ฅผ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค. 360deg ํ•œ ๋ฐ”ํ€ด๋ฅผ ๋œปํ•˜๊ธฐ์— transform:rotate(1turn)์œผ๋กœ๋„ ์‚ฌ์šฉ์ด ๊ฐ€๋Šฅํ•ฉ๋‹ˆ๋‹ค.
ย 
ย 

1.3.1.3 translate

<!DOCTYPE html> <html> <head> <title>Transition Test</title> <style> .box{ width:100px; height:100px; background:dodgerblue; transition:all 1s; } .box:hover{ transform:translate(100px,100px); } </style> </head> <body> <div class="box">hello world</div> </body> </html>
ย 
notion imagenotion image
translate(์˜ฎ๊ธฐ๋‹ค) ๋Š” Object๋ฅผ x,y์ถ• ์ง€์ ์œผ๋กœ ์ด๋™์„ ์‹œ์ผœ์ฃผ๋Š” ๊ฐ’์œผ๋กœ (x์ถ•, y์ถ•)์„ ๋œปํ•ฉ๋‹ˆ๋‹ค. ๊ธฐ์ค€์ ์€ ๊ฐ€์šด๋ฐ์ด๋ฉฐ ๊ฐ’์ด ์ฆ๊ฐ€ํ•  ์‹œ x์ถ•์€ ์˜ค๋ฅธ์ชฝ์œผ๋กœ y์ถ•์€ ์•„๋ž˜ ๋ฐฉํ–ฅ์œผ๋กœ ์ด๋™ํ•ฉ๋‹ˆ๋‹ค. ์Œ์ˆ˜ ๊ฐ’์„ ์ ์šฉ ์‹œ ๋ฐ˜๋Œ€ ๋ฐฉํ–ฅ์œผ๋กœ ์ด๋™ํ•ฉ๋‹ˆ๋‹ค.
ย 

1.3.1.4 skew

<!DOCTYPE html> <html> <head> <title>Transition Test</title> <style> .box{ width:100px; height:100px; background:dodgerblue; transition:all 1s; } .box:hover{ transform:skew(40deg); } </style> </head> <body> <div class="box">hello world</div> </body> </html>
ย 
notion imagenotion image
skew(์™ธ๊ณกํ•˜๋‹ค) ๋Š” ์ƒ์ž๋ฅผ ๋น„ํ‹€๊ธฐ ๋˜๋Š” ์™ธ๊ณก์„ ์ฃผ์–ด ํ˜•ํƒœ๋ฅผ ๋ณ€ํ˜•์‹œํ‚ค๋Š” ์†์„ฑ์ž…๋‹ˆ๋‹ค. ๊ฐ’์€ rotate์™€ ๋™์ผํ•˜๊ฒŒ (40deg)๊ฐ๋„๋กœ ํ‘œ์‹œํ•˜๋ฉฐ deg(dgree)๋‹จ์œ„๋ฅผ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค.
ย 

1.3.1.5 transform-origin

<!DOCTYPE html> <html> <head> <title>Transition Test</title> <style> .box{ width:100px; height:100px; background:dodgerblue; transition:all 1s; transform-origin:left top; } .box:hover{ transform:rotate(360deg); } </style> </head> <body> <div class="box">hello world</div> </body> </html>
ย 
notion imagenotion image
transform-origin์†์„ฑ์€ transform๋˜๋Š” Object์˜ ๊ธฐ์ค€์ ์„ ๋ณ€๊ฒฝํ•  ๋•Œ ์‚ฌ์šฉ๋ฉ๋‹ˆ๋‹ค. defult๊ฐ’์€ ๊ฐ€์šด๋ฐ์ด์ง€๋งŒ transform-origin์„ ์‚ฌ์šฉํ•˜์—ฌ ์™ผ์ชฝ ์œ„๋กœ ๊ธฐ์ค€์ ์„ ๋ณ€๊ฒฝํ•˜์ž rotate๋˜๋Š” ์œ„์น˜๊ฐ€ ์™ผ์ชฝ ์œ„๋ถ€ํ„ฐ ์‹œ์ž‘ํ•˜๋Š” ๋ชจ์…˜์œผ๋กœ ๋ณ€๊ฒฝ์ด ๋ฉ๋‹ˆ๋‹ค. left, right, top, bottom, center ๋ฌธ์ž๋ฅผ ์ด์šฉํ•ด ์œ„์น˜๋ฅผ ์„ค์ •ํ•  ์ˆ˜ ์žˆ์ง€๋งŒ ์ˆซ์ž๊ฐ’์„ ์ž…๋ ฅํ•ด๋„ ๊ธฐ์ค€์ ์„ ์„ค์ •ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. transform-origin:0, 0; ์•ž์— ์ธ์ž๋Š” x์ถ• = 0, ๋’ค์— ์ธ์ž๋Š” y์ถ• = 0์œผ๋กœ ํ‘œ์‹œํ•ฉ๋‹ˆ๋‹ค.
transition์€ ํ™”๋ฉด ์ „ํ™˜, transform์€ ๋ณ€ํ˜•, ์ด ๋‘๊ฐ€์ง€๋ฅผ ์ ์ ˆํžˆ ์ž˜ ํ™œ์šฉํ•˜๋ฉด ์ ์€ ์ฝ”๋“œ์–‘์œผ๋กœ ์›น์‚ฌ์ดํŠธ์—์„œ Awesomeํ•œ ํšจ๊ณผ๋ฅผ ๋‚ผ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
ย