🌡 Vue.js

[Vue.js] transition을 μ΄μš©ν•΄μ„œ μ• λ‹ˆλ©”μ΄μ…˜ 속도 λ‚˜νƒ€λ‚΄κΈ°.

hyeong._.ing 2025. 8. 4. 10:40

 

 

 

참고둜 Vue.js에 λŒ€ν•΄μ„œ 잘 λͺ¨λ¦…λ‹ˆλ‹€.

μ•„λ¬΄κ±°λ‚˜ 막 ν•΄λ³΄λŠ” 쀑이고 μ˜³μ€ 정보인지 저도 λͺ¨λ¦…λ‹ˆλ‹€!

 

 

 

λ²„νŠΌμ— 마우슀λ₯Ό λŒ€λ©΄
색이 천천히 λ°˜μ „λ˜λ„λ‘
λ§Œλ“€μ–΄λ³Ό 것이닀.



 

1. μ‹€ν–‰ν™”λ©΄

λ™μ˜μƒ μ„œλΉ„μŠ€κ°€ μ’…λ£Œλ˜μ–΄ ν•΄λ‹Ή μ½˜ν…μΈ λ₯Ό μž¬μƒν•  수 μ—†μŠ΅λ‹ˆλ‹€.

 

 

 

 

 


 

 

 

2. MainView.vue

λ²„νŠΌμ„ μ„€μ •ν•˜κ³  btnμ΄λž€ 클래슀λ₯Ό 뢙여쀬닀.

<template>
  <div class="main-view">
    <button class="btn" > Click </button>
  </div>
</template>

 

전체 ν™”λ©΄ 섀정이닀.

<style scoped>의 μ½”λ“œ

.main-view {
  position: relative;
  width:  100vw;
  height: 100vh;
  background-color: lemonchiffon;
}

 

λ²„νŠΌμ΄ 쀑앙에 μœ„μΉ˜ν•˜λ„λ‘ λ§Œλ“€μ—ˆλ‹€. ν…μŠ€νŠΈ μ»¬λŸ¬λŠ” ν™”μ΄νŠΈμ΄κ³ , 배경색은 λΈ”λž™μ΄λ‹€.

<style scoped>의 μ½”λ“œ

.btn{
  position: absolute;
  width: 80px;
  height: 50px;
  top: 50%;
  left: 50%;
  transform: translate(-50%, -50%);
  font-size: 20px;
  color: white;
  background-color: black;
  cursor:  pointer;
  transition: background-color 0.8s ease, border 0.8s ease;
}

 

λ°°κ²½μ»¬λŸ¬λŠ” μ§„λΆ„ν™μƒ‰μœΌλ‘œ λ³€κ²½ν•˜κ³ , ν…Œλ‘λ¦¬λ„ borderλ₯Ό μ΄μš©ν•˜μ—¬ λ³€κ²½λ˜λ„λ‘ ν•  것이닀. μ΄λ•Œ 마우슀 μ»€μ„œλ₯Ό λŒ€λ©΄ 색상이 λ³€ν•˜λ„λ‘ λ§Œλ“€μ–΄μ£ΌλŠ” μŠ€νƒ€μΌμ„ :hover라고 ν•œλ‹€. :hover에 transition을 λ„£μ–΄ 색상 λ³€κ²½μ˜ 속도λ₯Ό μ‘°μ ˆν•΄ λ³Ό 것이닀. transition은 μ• λ‹ˆλ©”μ΄μ…˜ 속도λ₯Ό μ‘°μ ˆν•˜λŠ” 방법을 μ œκ³΅ν•œλ‹€.

 

transition: [속성] [μ§€μ†μ‹œκ°„] [타이밍 ν•¨μˆ˜] [μ§€μ—° μ‹œκ°„];으둜 μ½”λ“œλ₯Ό μ λŠ”λ°, μ†μ„±μœΌλ‘œ λ„ˆλΉ„λ‚˜ 높이가 λ“€μ–΄κ°ˆ μˆ˜λ„ 있고 ν…Œλ‘λ¦¬λ§Œ λ“€μ–΄κ°ˆ μˆ˜λ„ 있고 λ‹€μ–‘ν•˜κ²Œ μ‚¬μš©κ°€λŠ₯ν•˜λ‹€. ν˜„μž¬ μ½”λ“œμ—μ„œλŠ” 배경컬러(background-color)와 ν…Œλ‘λ¦¬(border)λ₯Ό μ†μ„±μœΌλ‘œ μ§€μ •ν–ˆλ‹€. μ§€μ†μ‹œκ°„μ€ 0.8s둜 μ§€μ •ν–ˆλ‹€. 타이밍 ν•¨μˆ˜λŠ” 속도가 μ–΄λ–»κ²Œ λ³€ν™”ν• μ§€ κ²°μ •ν•˜λŠ”λ°, μ»€μŠ€ν„°λ§ˆμ΄μ§•λ„ κ°€λŠ₯ν•΄μ„œ μ–΄λ–€ 가속도 곑선을 λ”°λ₯΄κ²Œ ν•  μˆ˜λ„ μžˆλ‹€. μ—¬κΈ°μ„œλŠ” λ‚΄λΆ€μ—μ„œ μ„€μ •ν•΄ μ£ΌλŠ” ease둜 μ„€μ •ν–ˆλ‹€. ease 말고 linear, ease-in, ease-out도 μžˆμœΌλ‹ˆ ν•œλ²ˆμ”© 해보면 쒋을 λ“―ν•˜λ‹€. ν˜„μž¬ μ½”λ“œμ—μ„œ μ§€μ—° μ‹œκ°„μ€ μ„€μ •ν•˜μ§€ μ•Šμ•˜μ§€λ§Œ, μ• λ‹ˆλ©”μ΄μ…˜μ˜ 좜발 μ‹œκ°„μ„ μ •ν•  μˆ˜λ„ μžˆλ‹€. 

 

μ—¬λŸ¬ 속성을 μ§€μ •ν•˜κ³  μ‹ΆμœΌλ©΄ μœ„μ˜ μ½”λ“œμ²˜λŸΌ ,을 찍어 속성을 이어 적으면 λœλ‹€.

 

<style scoped>의 μ½”λ“œ

.btn:hover {
  background-color: #ed3597;
  color: white;
  border: 3px solid #ed3597;
  cursor: pointer;
}

 

 

μ•„λž˜ 링크에 λ“€μ–΄κ°€λ©΄ 직접 νƒ€μ΄λ°ν•¨μˆ˜λ₯Ό μ„€μ •ν–ˆμ„ λ•Œ μ–΄λ–»κ²Œ λ™μž‘ν•˜λŠ”μ§€ μ˜ˆμ‹œλ₯Ό λ³Ό 수 μžˆλ‹€.

 

- μ»€μŠ€ν„°λ§ˆμ΄μ§•

 

cubic-bezier.com

 

cubic-bezier.com

 

 

μ΄λ•Œ μ£Όμ˜ν•  점이 μžˆλ‹€.  두 μ˜μƒμ„ μ‚΄νŽ΄λ³΄μž.

 

λ™μ˜μƒ μ„œλΉ„μŠ€κ°€ μ’…λ£Œλ˜μ–΄ ν•΄λ‹Ή μ½˜ν…μΈ λ₯Ό μž¬μƒν•  수 μ—†μŠ΅λ‹ˆλ‹€.

 

 

λ™μ˜μƒ μ„œλΉ„μŠ€κ°€ μ’…λ£Œλ˜μ–΄ ν•΄λ‹Ή μ½˜ν…μΈ λ₯Ό μž¬μƒν•  수 μ—†μŠ΅λ‹ˆλ‹€.

 

두 μ˜μƒμ˜ 차이점은 λ§ˆμš°μŠ€κ°€ λ²„νŠΌμ—μ„œ λ©€μ–΄μ§€λ©΄μ„œ μƒκΈ°λŠ” 변화이닀. κ·Έ μ΄μœ λŠ” transition이 μ–΄λŠ ν΄λž˜μŠ€μ— λΆ™μ–΄μžˆλŠ”μ§€μ— 따라 달라진닀. .btn 클래슀인 λ²„νŠΌμ„ λ§Œλ“  ν΄λž˜μŠ€μ— transition μ½”λ“œλ₯Ό 넣어두면 마우슀λ₯Ό λ²„νŠΌμ—μ„œ 떼도 같은 μ†λ„λ‘œ 색상이 λŒμ•„κ°„λ‹€. 그런데 :hover에 transition μ½”λ“œλ₯Ό 넣어두면 마우슀λ₯Ό λ—„ 땐 μ½”λ“œκ°€ μ μš©λ˜μ§€ μ•ŠλŠ”λ‹€. (μ–‘λ°©ν–₯ 적용이 μ•ˆ λ˜λŠ” 것)

 

:hoverκ°€ μ»€μ„œλ₯Ό 올리면 μ μš©λ˜λŠ” ν΄λž˜μŠ€λ‹ˆκΉŒ transition μ½”λ“œλ₯Ό hover에 넣을 수 μžˆλ‹€.(λ‚΄κ°€ 그랬음..γ…Žγ…Ž) 그런데 :hoverλŠ” μ˜¬λ Έμ„ λ•Œλ§Œ 적용되게 ν•˜λ‹ˆκΉŒ, λ°˜λŒ€λ‘œ λ–Όλ©΄? 적용이 μ•ˆλ˜λŠ” 것이닀. μ–‘λ°©ν–₯으둜 μ μš©ν•˜κ³  μ‹Άλ‹€λ©΄ κΌ­ transition μ½”λ“œλ₯Ό .btn ν΄λž˜μŠ€μ— λ„£μ–΄μ•Ό ν•œλ‹€.

 

 

 

- transition

 

Vue.js

Vue.js - ν”„λ‘œκ·Έλž˜μ‹œλΈŒ μžλ°”μŠ€νŠΈλ¦½νŠΈ ν”„λ ˆμž„μ›Œν¬

ko.vuejs.org