CSS μ νν¨κ³Όλ μΉμ¬μ΄νΈμ μμκ° μνλ₯Ό λ³κ²½ν λ λΆλλ½κ² λ³νλλ‘ λ§λ€μ΄μ£Όλ κ°λ ₯ν λꡬμ λλ€. μ΄λ¬ν μ νν¨κ³Όλ μΉμ¬μ΄νΈμ μλκ°μ λνκ³ μ¬μ©μ κ²½νμ ν₯μνλ λ° μ€μν μν μ ν©λλ€. μ΄ ν¬μ€ν μμλ CSS μ νν¨κ³Ό transition μμ±μ κΈ°λ³Έ κ°λ λΆν° κ³ κΈ μ¬μ©λ²κΉμ§ μμΈν λ€λ€λ³΄κ² μ΅λλ€.
β£ λͺ©μ°¨
CSS μ νν¨κ³Όμ κΈ°λ³Έ μ΄ν΄π
μ νν¨κ³Όμ μ μμ μλ μ리 π
CSS μ νν¨κ³Όλ μμμ μ€νμΌμ΄ λ³κ²½λ λ κ·Έ λ³νλ₯Ό μ§μ λ μκ° λμ μ λλ©μ΄μ μ²λΌ 보μ¬μ£Όλ κΈ°λ₯μ λλ€. μ΄λ₯Ό ν΅ν΄ μ¬μ©μμκ² λΆλλ½κ³ μμ°μ€λ¬μ΄ μκ°μ κ²½νμ μ 곡ν©λλ€.
transition μμ±μ κΈ°λ³Έ ꡬ문 π οΈ
.element {
transition: property duration timing-function delay;
}
μ£Όμ μμ±β
- transition-property: μ ν ν¨κ³Όλ₯Ό μ μ©ν CSS μμ± (μ: width, height, background-color λ±)
- transition-duration: μ ν ν¨κ³Όκ° μλ£λλ λ° κ±Έλ¦¬λ μκ° (μ: 0.5s, 2s)
- transition-timing-function: μ ν ν¨κ³Όμ μλ 곑μ (μ: ease, linear, ease-in, ease-out, ease-in-out)
- transition-delay: μ ν ν¨κ³Όκ° μμλκΈ° μ μ κΈ°λ€λ¦¬λ μκ° (μ: 0s, 1s)
μ νν¨κ³Ό transition μ£Όμ μμ±π
trasnsition-property
transition-propertyλ CSS μ νν¨κ³Όλ₯Ό μ μ©ν μμ±μ μ§μ νλ λ° μ¬μ©λ©λλ€. μ΄ μμ±μ μ¬μ©νλ©΄ μ΄λ€ CSS μμ±μ λν΄ μ ν ν¨κ³Όλ₯Ό μ μ©ν μ§λ₯Ό λͺ μμ μΌλ‘ μ§μ ν μ μμ΅λλ€. μλ₯Ό λ€μ΄, λλΉ(width), λμ΄(height), λ°°κ²½μ(background-color) λ±μ μμ±μ λν΄ μ ν ν¨κ³Όλ₯Ό μ μ©νκ³ μ ν λ μ¬μ©ν©λλ€.
μ¬μ© λ°©λ²
.element {
transition-property: property1, property2, ...;
}
μ¬κΈ°μ property1, property2 λ±μ μ ν ν¨κ³Όλ₯Ό μ μ©νκ³ μ νλ CSS μμ±μ λνλ λλ€. μ¬λ¬ κ°μ μμ±μ μ§μ ν λλ μΌν(,)λ‘ κ΅¬λΆνμ¬ λμ΄ν©λλ€.
μμ
λ€μμ λλΉ(width)μ λμ΄(height) μμ±μ λν΄ μ ν ν¨κ³Όλ₯Ό μ μ©νλ μμμ λλ€.
.element {
width: 100px;
height: 100px;
background-color: blue;
transition-property: width, height;
/* λ€μκ³Ό κ°μ΄ μΆμ½ν΄μ μ¬μ©ν μλ μμ΅λλ€. */
/* transition-property: all; */
/* λͺ¨λ μμ±μ λν΄ μ ν ν¨κ³Όλ₯Ό μ μ©ν©λλ€. */
}
.element:hover {
width: 200px;
height: 200px;
}
μ΄ μ½λμμλ .element ν΄λμ€λ₯Ό κ°μ§ μμμ λ§μ°μ€λ₯Ό μ¬λ¦¬λ©΄ λλΉμ λμ΄κ° 200pxλ‘ λ³κ²½λ©λλ€. μ΄λ,transition-property μμ±μ΄ widthμ heightλ‘ μ€μ λμ΄ μμΌλ―λ‘ λλΉμ λμ΄ μμ±μ λ³κ²½μλ§ μ ν ν¨κ³Όκ° μ μ©λ©λλ€.
κΈ°λ³Έ κ°
transition-propertyμ κΈ°λ³Έ κ°μ allμ
λλ€. μ΄λ λͺ¨λ CSS μμ±μ λν΄ μ ν ν¨κ³Όλ₯Ό μ μ©ν¨μ μλ―Έν©λλ€. κ·Έλ¬λ μΌλ°μ μΌλ‘ λͺ
μμ μΌλ‘ μμ±μ μ§μ νλ κ²μ΄ κΆμ₯λ©λλ€. μ΄λ κ² νλ©΄ λΆνμν μ±λ₯ μ νλ₯Ό λ°©μ§ν μ μμ΅λλ€.
transition-propertyλ₯Ό λͺ μμ μΌλ‘ μ¬μ©νμ¬ μ ν ν¨κ³Όλ₯Ό μ μ©ν μμ±μ μ ννλ©΄ μμμ μν λ³νμ λ°λΌ ν΄λΉ μμ±μλ§ μ ν ν¨κ³Όκ° μ μ©λμ΄ ν¨μ¨μ μΌλ‘ μ λλ©μ΄μ μ μ μ΄ν μ μμ΅λλ€.
transition-duration
transition-duration μμ±μ CSS μ ν ν¨κ³Όκ° μλ£λλ λ° κ±Έλ¦¬λ μκ°μ μ§μ νλ λ° μ¬μ©λ©λλ€. μ΄ μμ±μ μ¬μ©νλ©΄ μ ν ν¨κ³Όκ° μΌλ§ λμ μ§μλμ΄μΌ νλμ§λ₯Ό μ ν μ μμ΅λλ€.
μ¬μ© λ°©λ²
.element {
transition-duration: time;
}
μ¬κΈ°μ timeμ μ ν ν¨κ³Όκ° μλ£λλ μκ°μ λνλ΄λ κ°μ λλ€. λ³΄ν΅ μ΄(s) λ¨μλ‘ μ§μ νλ©°, λΆλμμμ μΌλ‘λ ννν μ μμ΅λλ€. μλ₯Ό λ€μ΄, 0.5s, 1s, 2sμ κ°μ΄ μ¬μ©ν©λλ€.
μμ
λ€μμ λλΉ(width) μμ±μ λν μ ν ν¨κ³Όκ° 0.5μ΄ λμ μ§μλλλ‘ μ€μ νλ μμμ λλ€.
.element {
width: 100px;
height: 100px;
background-color: blue;
transition-property: width;
transition-duration: 0.5s;
}
.element:hover {
width: 200px;
}
μ΄ μ½λμμλ. element ν΄λμ€λ₯Ό κ°μ§ μμμ λ§μ°μ€λ₯Ό μ¬λ¦¬λ©΄ λλΉκ° 200pxλ‘ λ³κ²½λ©λλ€. transition-duration μμ±μ΄ 0.5sλ‘ μ€μ λμ΄ μμΌλ―λ‘ λλΉκ° λ³κ²½λλ λμ 0.5μ΄ λμ λΆλλ½κ² μ λλ©μ΄μ μ΄ μ μ©λ©λλ€.
transition-duration μμ±μ κΈ°λ³Έ κ°μ 0sμ
λλ€. μ΄λ μ ν ν¨κ³Όκ° μ¦μ λ°μν¨μ μλ―Έν©λλ€. κ·Έλ¬λ μΌλ°μ μΌλ‘ μ ν ν¨κ³Όκ° λ°λ‘ λ°μνλ κ²μ΄ μλλΌ λͺ μ΄ λμ λΆλλ½κ² μ§νλλλ‘ μ€μ νλ κ²μ΄ μΌλ°μ μ
λλ€.
μ ν ν¨κ³Όμ μ§μ μκ°μ μ‘°μ νμ¬ μμμ μν λ³νμ λ°λΌ μ λλ©μ΄μ μ΄ μΌλ§ λμ μ§μλμ΄μΌ νλμ§λ₯Ό μ‘°μ ν μ μμ΅λλ€. μ΄λ₯Ό ν΅ν΄ μ¬μ©μ κ²½νμ λμ± ν₯μν μ μμ΅λλ€.
transition-timing-function
transition-timing-function μμ±μ CSS μ ν ν¨κ³Όμ μλ 곑μ μ μ§μ νλ λ° μ¬μ©λ©λλ€. μ΄ μμ±μ μ¬μ©νλ©΄ μ ν ν¨κ³Όκ° μ§νλλ λμ μκ°μ λ°λΌ μλκ° μ΄λ»κ² λ³νν μ§λ₯Ό μ μ΄ν μ μμ΅λλ€.
μ¬μ© λ°©λ²
.element {
transition-timing-function: timing-function;
}
μ¬κΈ°μ timing-functionμ μλ 곑μ μ μ μνλ ν¨μμ λλ€. λͺ κ°μ§ νμ€ ν¨μ μΈμλ μ¬μ©μ μ μ ν¨μλ₯Ό μ μν μλ μμ΅λλ€.
νμ€ μλ ν¨μ
- ease (κΈ°λ³Έκ°): λλ¦¬κ² μμλμ΄ μ€κ°μ λΉ¨λΌμ§κ³ , λ€μ λλ €μ§λ μλ 곑μ μ λλ€.
- linear: μΌμ ν μλλ‘ μ§νλλ μ ν μλ 곑μ μ λλ€.
- ease-in:μ²μ²ν μμλμ΄ μ μ λΉ¨λΌμ§λ μλ 곑μ μ λλ€.
- ease-out:λΉ λ₯΄κ² μμλμ΄ μ²μ²ν λλ €μ§λ μλ 곑μ μ λλ€.
- ease-in-out: μ²μ²ν μμλμ΄ μ€κ°μ λΉ¨λΌμ§κ³ , λ€μ μ²μ²ν λλ €μ§λ μλ 곑μ μ λλ€.
μ¬μ©μ μ μ μλ ν¨μ
μ¬μ©μλ cubic-bezier() ν¨μλ₯Ό μ¬μ©νμ¬ μμ λ§μ μλ 곑μ μ μ μν μλ μμ΅λλ€. μ΄ ν¨μλ λ€ κ°μ μ«μ(0κ³Ό 1 μ¬μ΄μ κ°)λ₯Ό λ°μλ€μ΄λ©°, κ°κ°μ μλ 곑μ μ μ μ΄μ μ λνλ λλ€.
μλ₯Ό λ€μ΄, λ€μκ³Ό κ°μ΄ μ¬μ©ν μ μμ΅λλ€.
.element {
transition-timing-function: cubic-bezier(0.1, 0.7, 1.0, 0.1);
}
μμ
λ€μμ λλΉ(width) μμ±μ λν μ ν ν¨κ³Όμ μλ 곑μ μ ease-in-outμΌλ‘ μ€μ νλ μμμ λλ€.
.element {
width: 100px;
height: 100px;
background-color: blue;
transition-property: width;
transition-duration: 0.5s;
transition-timing-function: ease-in-out;
}
.element:hover {
width: 200px;
}
μ΄ μ½λμμλ. element ν΄λμ€λ₯Ό κ°μ§ μμμ λ§μ°μ€λ₯Ό μ¬λ¦¬λ©΄ λλΉκ° 200pxλ‘ λ³κ²½λ©λλ€. transition-timing-function μμ±μ΄ ease-in-outμΌλ‘ μ€μ λμ΄ μμΌλ―λ‘, μ ν ν¨κ³Όκ° μ²μ²ν μμλμ΄ μ€κ°μ λΉ¨λΌμ§κ³ , λ€μ μ²μ²ν λλ €μ§λλ€.
μλ 곑μ μ μ‘°μ νμ¬ μ ν ν¨κ³Όμ μ λλ©μ΄μ μ λμ± λΆλλ½κ² λ§λ€ μ μμ΅λλ€.
transition-delay
transition-delay μμ±μ CSS μ ν ν¨κ³Όκ° μμλλ μ§μ° μκ°μ μ€μ νλ λ° μ¬μ©λ©λλ€. μ΄ μμ±μ μ¬μ©νλ©΄ μμμ νΉμ μνκ° λ³κ²½λ ν μΌμ μκ°μ΄ μ§λ νμ μ ν ν¨κ³Όκ° λ°μνλλ‘ ν μ μμ΅λλ€.
μ¬μ© λ°©λ²
.element {
transition-delay: time;
}
μ¬κΈ°μ timeμ μ ν ν¨κ³Όκ° μμλκΈ° μ μ μ§μ° μκ°μ λνλ΄λ κ°μ λλ€. μ΄ κ°μ μ΄(s) λ¨μλ‘ μ§μ λλ©°, λΆλμμμ μΌλ‘λ ννν μ μμ΅λλ€.
μμ
λ€μμ λλΉ(width) μμ±μ λν μ ν ν¨κ³Όκ° λ§μ°μ€λ₯Ό μ¬λ¦° ν 1μ΄ μ§μ°λ ν λ°μνλ μμμ λλ€.
.element {
width: 100px;
height: 100px;
background-color: blue;
transition-property: width;
transition-duration: 0.5s;
transition-delay: 1s;
}
.element:hover {
width: 200px;
}
μ΄ μ½λμμλ .element ν΄λμ€λ₯Ό κ°μ§ μμμ λ§μ°μ€λ₯Ό μ¬λ¦¬λ©΄ λλΉκ° 200pxλ‘ λ³κ²½λ©λλ€. κ·Έλ¬λ μ΄ λ³κ²½μ λ§μ°μ€λ₯Ό μ¬λ¦¬κ³ 1μ΄ νμ λ°μν©λλ€. transition-delay μμ±μ΄ 1sλ‘ μ€μ λμ΄ μμΌλ―λ‘ μ ν ν¨κ³Όκ° λ°μνκΈ°κΉμ§ 1μ΄ λμμ μ§μ°μ΄ μμ΅λλ€.
κΈ°λ³Έ κ°
transition-delay μμ±μ κΈ°λ³Έ κ°μ 0sμ
λλ€. μ΄λ μ ν ν¨κ³Όκ° μ¦μ μμλ¨μ μλ―Έν©λλ€. κ·Έλ¬λ μ§μ°μ μ€μ ν¨μΌλ‘μ¨ νΉμ ν μκ° μ΄νμ μ ν ν¨κ³Όκ° λ°μνλλ‘ μ‘°μ ν μ μμ΅λλ€.
transition-delay μμ±μ μ¬μ©νμ¬ μμμ μν λ³νμ λν μ ν ν¨κ³Όκ° λ°μνκΈ° μ μ μ§μ°μ μΆκ°ν μ μμ΅λλ€. μ΄λ₯Ό ν΅ν΄ μ ν ν¨κ³Όλ₯Ό μ‘°μ νκ³ , μ¬μ©μ κ²½νμ κ°μ νκ³ , μ λλ©μ΄μ μ λμ± λ€μνκ² μ μ΄ν μ μμ΅λλ€.
CSS μ νν¨κ³Όμ μμ π¬
μμ μ ν ν¨κ³Ό π
.button {
background-color: blue;
transition: background-color 0.5s ease;
padding: 10px 20px;
color: white;
border: none;
border-radius: 5px;
cursor: pointer;
font-size: 16px;
}
.button:hover {
background-color: red;
}
ν¬κΈ° λ³ν μ ν ν¨κ³Ό π
.box {
width: 100px;
height: 100px;
background-color: blue;
transition: width 0.5s ease-in-out;
}
.box:hover {
width: 200px;
}
μμΉ μ΄λ μ ν ν¨κ³Ό π
.movable {
position: relative;
left: 0;
transition: left 0.5s ease;
width: 100px;
height: 100px;
background-color: blue;
}
.movable:hover {
left: 100px;
}
λΆν¬λͺ λ μ ν ν¨κ³Όπ
.fade {
opacity: 1;
transition: opacity 0.5s ease;
width: 100px;
height: 100px;
background-color: blue;
}
.fade:hover {
opacity: 0.5;
}
κ³ κΈ CSS μ νν¨κ³Ό π
λ€μ€ μ ν ν¨κ³Ό μ¬μ©νκΈ° π
.multi {
width: 100px;
height: 100px;
background-color: blue;
transition: width 0.5s ease, background-color 1s ease-in;
}
.multi:hover {
width: 200px;
background-color: red;
}
CSS λ³ν(Transform)κ³Ό ν¨κ» μ¬μ©νλ μ νν¨κ³Ό π
.transform {
width: 100px;
height: 100px;
background-color: blue;
transform: scale(1);
transition: transform 0.5s ease;
}
.transform:hover {
transform: scale(1.5);
}
컀μ€ν νμ΄λ° ν¨μ μ¬μ©νκΈ° π°οΈ
.custom-timing {
width: 100px;
height: 100px;
background-color: green;
transition: width 2s cubic-bezier(0.68, -0.55, 0.27, 1.55);
}
.custom-timing:hover {
width: 200px;
}
μ€μ νλ‘μ νΈμμμ νμ© μ¬λ‘ π οΈ
λ²νΌ νΈλ² ν¨κ³Ό π±οΈ
.button {
background-color: #008CBA;
color: white;
transition: background-color 0.3s ease;
padding: 10px 20px;
border: none;
border-radius: 5px;
cursor: pointer;
font-size: 16px;
}
.button:hover {
background-color: #005f73;
}
μ΄λ―Έμ§ κ°€λ¬λ¦¬ μ ν ν¨κ³Ό πΌοΈ
.gallery img {
width: 100px;
transition: width 0.5s ease;
}
.gallery img:hover {
width: 200px;
}
λ©λ΄ λ° λ΄λΉκ²μ΄μ μ ν ν¨κ³Ό π
.menu-item {
opacity: 0;
transition: opacity 0.5s ease-in-out;
}
.menu-item.show {
opacity: 1;
}
μμ μ½λλ μμ΄ν μ΄ μ΄κΈ°μ νλ©΄μ 보μ΄μ§ μκ³ , νΉμ ν΄λμ€κ° μΆκ°λ λ λνλλ ν¨κ³Όλ₯Ό ꡬννλ λ° μ¬μ©λ©λλ€.
λ‘λ© μ λλ©μ΄μ ν¨κ³Ό β³
.loader {
width: 50px;
height: 50px;
background-color: #f3f3f3;
border-radius: 50%;
transition: transform 0.5s ease-in-out;
}
.loader.animate {
transform: rotate(360deg);
}
μ΄ μ½λλ₯Ό μΉ λΈλΌμ°μ μ 볡μ¬νμ¬ λΆμ¬ λ£μΌλ©΄ λ‘λ© μ€μΈ μνλ₯Ό λνλ΄λ λ‘λλ₯Ό λ§λ€ μ μμ΅λλ€. νμ΄μ§κ° λ‘λλ λ μλ°μ€ν¬λ¦½νΈλ₯Ό μ¬μ©νμ¬. animate ν΄λμ€κ° μΆκ°λμ΄ λ‘λκ° νμ νκ² λ©λλ€.
μ±λ₯ μ΅μ ν νπ
- GPU κ°μ νμ©: transformκ³Ό opacityλ GPU κ°μμ νμ©νμ¬ μ±λ₯μ μ΅μ νν μ μμ΅λλ€.
- 볡μ‘ν μ νν¨κ³Ό μ£Όμ: λ무 λ§μ μμμ μ νν¨κ³Όλ₯Ό μ μ©νλ©΄ μ±λ₯μ΄ μ νλ μ μμΌλ―λ‘ μ£Όμν΄μΌ ν©λλ€.
- λΈλΌμ°μ νΈνμ± μ²΄ν¬: λͺ¨λ λΈλΌμ°μ μμ μΌκ΄λ κ²½νμ μ 곡νκΈ° μν΄ νΈνμ±μ 체ν¬ν΄μΌ ν©λλ€.
CSS μ νν¨κ³Ό λλ²κΉ π
- λΈλΌμ°μ κ°λ°μ λꡬ νμ©: κ°λ°μ λꡬλ₯Ό μ¬μ©νμ¬ μ νν¨κ³Όκ° μ μ©λ μμλ₯Ό κ²μ¬νκ³ , λ¬Έμ λ₯Ό μ°Ύμ μ μμ΅λλ€.
- μ νν¨κ³Όκ° μλνμ§ μμ λ: μ€νμΌ μ°μ μμλ μμ± κ°μ μ€ν λ±μ νμΈνμ¬ λ¬Έμ λ₯Ό ν΄κ²°ν μ μμ΅λλ€.
ν΅μ¬ λ΄μ©π