transition VS animation

transition은 μš”μ†Œμ˜ μƒνƒœκ°€ λ³€ν•  λ•Œ μ• λ‹ˆλ©”μ΄μ…˜μ„ μ‹€ν–‰ν•œλ‹€. animation 속성은 μš”μ†Œμ˜ λͺ¨μ–‘κ³Ό λ™μž‘μ„ ν‚€ν”„λ ˆμž„ λ‹¨μœ„λ‘œ λ³€κ²½ν•  수 μžˆλ‹€. ν‚€ν”„λ ˆμž„ λ™μž‘μ€ μž¬μƒ 횟수, λ°©ν–₯ λ“± μ—¬λŸ¬ μ†μ„±μœΌλ‘œ μ œμ–΄ν•  수 μžˆλ‹€.
κ°€μž₯ 큰 μ°¨μ΄λŠ” transition 은 μš”μ†Œμ˜ μƒνƒœκ°€ λ°”λ€” λ•Œμ˜ μƒνƒœλ₯Ό μ• λ‹ˆλ©”μ΄μ…˜μœΌλ‘œ ν‘œν˜„ν•˜μ§€λ§Œ, animation 속성은 μš”μ†Œμ˜ μƒνƒœ 변화와 상관없이 μ• λ‹ˆλ©”μ΄μ…˜μ„ μ‹€ν–‰ν•œλ‹€. λ˜ν•œ @keyframse μ†μ„±μœΌλ‘œ ν”„λ ˆμž„μ„ μΆ”κ°€ν•  수 μžˆλ‹€.

transition의 예)

.box {
    width: 100px;
    height: 100px;
    transition: width 2s, height 2s; // μš”μ†Œμ˜ μƒνƒœ λ³€ν™”
    
    &:hover {
        width: 200px;
        height: 200px;
    }
}

animation

  • animation-name: @keyframes κ·œμΉ™μ„ μ€€μˆ˜ ν•΄ μ •μ˜ν•œ μ• λ‹ˆλ©”μ΄μ…˜ 이름
  • animation-duration: μ• λ‹ˆλ©”μ΄μ…˜μ΄ μ–Όλ§ˆμ— 걸쳐 일어날지 κ²°μ •
  • animation-delay: λ‘œλ“œ 이후 μ–΄λŠ 정도 텀을 두어 μ• λ‹ˆλ©”μ΄μ…˜μ΄ μ‹œμž‘λ μ§€ μ§€μ •
  • animation-direction: μ• λ‹ˆλ©”μ΄μ…˜μ˜ λ°©ν–₯ μ§€μ •
  • animation-iteration-count: μ• λ‹ˆλ©”μ΄μ…˜μ΄ λͺ‡ 번 λ°˜λ³΅λ μ§€ μ§€μ • infinite둜 μ§€μ •ν•˜λ©΄ λ¬΄ν•œλ°˜λ³΅
  • animation-play-state: μ• λ‹ˆλ©”μ΄μ…˜μ„ λ©ˆμΆ”κ±°λ‚˜ λ‹€μ‹œ μ‹œμž‘
  • animation-timing-function: 쀑간 μƒνƒœλ“€μ˜ μ „ν™˜ 간격을 μ§€μ •
  • animation-fill-mode: μ‹œμž‘λ˜κΈ° μ „μ΄λ‚˜ λλ‚˜κ³  λ‚œ ν›„ μ–΄λ–€ 값이 μ μš©λ μ§€ μ§€μ •

animation의 μ„±λŠ₯ 문제

reflowλ₯Ό μ΅œμ†Œν™”ν•˜λŠ” 방법

  1. 클래슀 변화에 λ”°λ₯Έ μŠ€νƒ€μΌμ˜ λ³€ν™”λ₯Ό 원할 경우, μ΅œλŒ€ν•œ DOM ꡬ쑰 μ•ˆμͺ½μ— μœ„μΉ˜ν•œ λ…Έλ“œμ— μΆ”κ°€ν•©λ‹ˆλ‹€.
  2. μ• λ‹ˆλ©”μ΄μ…˜μ΄ λ“€μ–΄κ°„ μš”μ†ŒλŠ” 가급적 position: fixed λ˜λŠ” position: absolute둜 μ§€μ •ν•©λ‹ˆλ‹€.
    • λ‹€λ₯Έ μš”μ†Œμ—λŠ” 영ν–₯을 λΌμΉ˜μ§€ μ•ŠμœΌλ―€λ‘œ ν•΄λ‹Ή μš”μ†Œλ§Œ reflowκ°€ λ°œμƒν•©λ‹ˆλ‹€.
  3. JSλ₯Ό 톡해 μŠ€νƒ€μΌ λ³€ν™”λ₯Ό 쀄 경우, 가급적 ν•œλ²ˆμ— μ²˜λ¦¬ν•©λ‹ˆλ‹€.
  4. 인라인 μŠ€νƒ€μΌμ„ μ΅œλŒ€ν•œ λ°°μ œν•©λ‹ˆλ‹€.
  5. ν…Œμ΄λΈ” λ ˆμ΄μ•„μ›ƒμ„ ν”Όν•˜λŠ” 것이 μ’‹μŠ΅λ‹ˆλ‹€.
  • ν…Œμ΄λΈ” λ ˆμ΄μ•„μ›ƒμ€ 넓이λ₯Ό κ³„μ‚°ν•˜λ©΄μ„œ λ Œλ”λ§μ΄ λŠλ €μ§‘λ‹ˆλ‹€. κΌ­ ν•„μš”ν•œ 경우λ₯Ό μ œμ™Έν•˜κ³€ ν…Œμ΄λΈ” λ ˆμ΄μ•„μ›ƒμ„ μ‚¬μš©ν•˜μ§€ μ•ŠλŠ” 것이 μ’‹μŠ΅λ‹ˆλ‹€. λ§Œμ•½ μ‚¬μš©ν•œλ‹€λ©΄ CSS 속성

table-layout: fixedλ₯Ό μ‚¬μš©ν•˜λ©΄ 쑰금 더 λΉ λ₯΄κ²Œ λ Œλ”λ§ ν•  수 μžˆμŠ΅λ‹ˆλ‹€. 6. CSS ν•˜μœ„μ„ νƒμžλŠ” ν•„μš”ν•œ 만큼 μ •λ¦¬ν•˜λŠ” 것이 μ’‹μŠ΅λ‹ˆλ‹€.

변경을 미리 κ°μ§€ν•˜μ—¬ μ•Œλ €μ£ΌλŠ” will-change 방법도 μžˆλŠ”λ° 이건 λ‚˜μ€‘μ— 봐야지 ..
μ• λ‹ˆλ©”μ΄μ…˜ ν‚€ν”„λ ˆμž„μ˜ 경우 CPUλ₯Ό 많이 μ‚¬μš©ν•˜μ—¬ 자칫 λΆ€ν•˜λ₯Ό 가져닀쀄 수 μžˆλŠ”λ° λ‹€λ₯Έ λ°©λ²•μœΌλ‘œ GPUλ₯Ό μ‚¬μš©ν•˜λ„λ‘ μœ λ„ν•  수 μžˆλ‹€. 링크

Ref

https://developer.mozilla.org/ko/docs/Web/CSS/CSS_Transitions/Using_CSS_transitions https://webclub.tistory.com/621 https://wit.nts-corp.com/2017/06/05/4571 http://daplus.net/css-css-%ED%82%A4-%ED%94%84%EB%A0%88%EC%9E%84-%EC%95%A0%EB%8B%88%EB%A9%94%EC%9D%B4%EC%85%98-cpu-%EC%82%AC%EC%9A%A9%EB%9F%89%EC%9D%B4-%EB%86%92%EC%8A%B5%EB%8B%88%EB%8B%A4-%EC%9D%B4%EB%A0%87%EA%B2%8C/