λ³Έλ¬Έ λ°”λ‘œκ°€κΈ°
HTML5 & CSS3

[HTML5 & CSS3] νŠΈλžœμ§€μ…˜

by μ½”λ”©ν•˜λŠ” λΆ•μ–΄ 2021. 2. 14.
λ°˜μ‘ν˜•

β–Ά νŠΈλžœμ§€μ…˜

νŠΈλžœμ§€μ…˜(transition)은 λ³€ν˜•μ„ λ„˜μ–΄ ν•˜λ‚˜μ˜ μŠ€νƒ€μΌμ—μ„œ λ‹€λ₯Έ μŠ€νƒ€μΌλ‘œ μ™„μ „νžˆ λ°”κΎΌλ‹€.

​

​

​

*νŠΈλžœμ§€μ…˜μ΄λž€?

νŠΈλžœμ§€μ…˜(transition)μ΄λž€ μ›Ή μš”μ†Œμ˜ λ°°κ²½ 색이 λ°”λ€Œκ±°λ‚˜ λ„ν˜•μ˜ ν…Œλ‘λ¦¬κ°€ μ›ν˜•μœΌλ‘œ λ°”λ€ŒλŠ” κ²ƒμ²˜λŸΌ μŠ€νƒ€μΌ 속성이 λ°”λ€ŒλŠ” 것을 λ§ν•œλ‹€.

속성

μ„€λͺ…

transition-property

νŠΈλžœμ§€μ…˜ λŒ€μƒμ„ μ„€μ •ν•œλ‹€.

transition-duration

νŠΈλžœμ§€μ…˜ 진행 μ‹œκ°„μ„ μ„€μ •ν•œλ‹€.

transition-timing-function

νŠΈλžœμ§€μ…˜ 속도 곑선을 μ„€μ •ν•œλ‹€.

transition-delay

νŠΈλžœμ§€μ…˜ 지연 μ‹œκ°„μ„ μ„€μ •ν•œλ‹€.

transition

transition-property와 transition-duration, transition-timing-function, transition-delay 속성을 ν•œκΊΌλ²ˆμ— μ„€μ •ν•œλ‹€.

​

​

​

*transition-property 속성 - νŠΈλžœμ§€μ…˜μ„ μ μš©ν•  속성 μ§€μ •ν•˜κΈ°

νŠΈλžœμ§€μ…˜μ„ λ§Œλ“œλŠ” 첫 번째 λ‹¨κ³„λŠ” νŠΈλžœμ§€μ…˜μ„ μ–΄λŠ 속성에 μ μš©ν•  것인지 μ„ νƒν•˜λŠ” 것이닀. transition-property μ†μ„±μœΌλ‘œ 이것을 κ²°μ •ν•œλ‹€. transition-propertyλ₯Ό μ‚¬μš©ν•˜μ§€ μ•Šμ„ 경우, λͺ¨λ“  속성이 νŠΈλžœμ§€μ…˜ λŒ€μƒμ΄ 되고 νŠΉμ • 속성 이름을 μž…λ ₯ν•˜λ©΄ κ·Έ 속성에 νŠΈλžœμ§€μ…˜μ΄ μ μš©λœλ‹€.

속성 κ°’

μ„€λͺ…

all

all 값을 μ‚¬μš©ν•˜κ±°λ‚˜ transition-propertyλ₯Ό μƒλž΅ν•  경우, μš”μ†Œμ˜ λͺ¨λ“  속성이 νŠΈλžœμ§€μ…˜ λŒ€μƒμ΄ λœλ‹€.

none

νŠΈλžœμ§€μ…˜ λ™μ•ˆ 아무 속성도 λ°”λ€Œμ§€ μ•ŠλŠ”λ‹€.

<속성 이름>

νŠΈλžœμ§€μ…˜ 효과λ₯Ό μ μš©ν•  속성 이름을 μ§€μ •ν•œλ‹€. 예λ₯Ό λ“€μ–΄ λ°°κ²½ μƒ‰λ§Œ λ°”κΏ€ 것인지, width 값을 λ°”κΏ€ 것인지 μ›ν•˜λŠ” λŒ€μƒλ§Œ 골라 지정할 수 μžˆλ‹€. 속성이 μ—¬λŸ¬ 개일 경우, μ‰Όν‘œ(,)둜 ꡬ뢄해 λ‚˜μ—΄ν•œλ‹€.

transition-property: all; /* ν•΄λ‹Ή μš”μ†Œμ˜ λͺ¨λ“  속성에 νŠΈλžœμ§€μ…˜ 적용 */

transition-property: background-color; /* ν•΄λ‹Ή μš”μ†Œμ˜ λ°°κ²½ 색에 νŠΈλžœμ§€μ…˜ μ‚¬μš© */

transition-property: width, height; /* ν•΄λ‹Ή μš”μ†Œμ˜ λ„ˆλΉ„μ™€ 높이에 νŠΈλžœμ§€μ…˜ 적용 */

 

​

​

*transition-duration 속성 - νŠΈλžœμ§€μ…˜ 진행 μ‹œκ°„ μ§€μ •ν•˜κΈ°

transition-propertyμ—μ„œ νŠΈλžœμ§€μ…˜ λŒ€μƒμ„ μ§€μ •ν–ˆλ‹€λ©΄ 진행 μ‹œκ°„μ„ 지정해야 κ·Έ μ‹œκ°„ λ™μ•ˆ 속성이 μžμ—°μŠ€λŸ½κ²Œ λ°”λ€ŒλŠ” μ• λ‹ˆλ©”μ΄μ…˜ 효과λ₯Ό λ§Œλ“€ 수 μžˆλ‹€. transition-duration 속성, 즉 νŠΈλžœμ§€μ…˜ 진행 μ‹œκ°„μ΄ 0초λ₯Ό 기본으둜 μ„€μ •λ˜μ–΄ 있기 λ•Œλ¬Έμ΄λ‹€. μ΄λ•Œ μ‹œκ°„ λ‹¨μœ„λŠ” 초(seconds) λ˜λŠ” λ°€λ¦¬μ΄ˆ(milliseconds)이닀. νŠΈλžœμ§€μ…˜ λŒ€μƒμ΄ λ˜λŠ” 속성이 μ—¬λŸ¬ 개라면 νŠΈλžœμ§€μ…˜ 진행 μ‹œκ°„λ„ μ‰Όν‘œ(,)둜 ꡬ뢄해 μˆœμ„œλŒ€λ‘œ μ—¬λŸ¬ 개λ₯Ό 지정할 수 μžˆλ‹€.

​

κΈ°λ³Έν˜•)

transition-duration: <μ‹œκ°„>

 

정해진 μ‹œκ°„ λ™μ•ˆ 높이와 λ„ˆλΉ„ λ°”κΎΈκΈ°

<style>
   .tr1 {
      width: 100px;
      height: 100px;
      background-color: blue;
      border: 1px solid black;
      -webkit-transition-property: width, height;
      -moz-transition-property: width, height;
      -o-transition-property: width, height;
      transition-property: width, height;
      -webkit-transition-duration: 2s, 1s;
      -moz-transition-duration: 2s, 1s;
      -o-transition-duration: 2s, 1s;
      transition-duration: 2s, 1s;
   }
   .tr1:hover {
      width:200px;
      height:120px;
   }
</style>

<body>
<div class="tr1"></div>
</body>

 

​

정해진 μ‹œκ°„ λ™μ•ˆ λ°°κ²½ 색과 νšŒμ „, 높이, λ„ˆλΉ„ λ°”κΎΈκΈ°

<style>
   .tr1 {
      width: 100px;
      height: 100px;
      background-color: red;
      border: 1px solid black;
      -webkit-transition-property: background-color, transform, width, height;
      -moz-transition-property: background-color, transform, width, height;
      -o-transition-property: background-color, transform, width, height;
      transition-property: background-color, transform, width, height;
      -webkit-transition-duration: 2s, 3s;
      -moz-transition-duration: 2s, 3s;
      -o-transition-duration: 2s, 3s;
      transition-duration: 2s, 3s;
   }
   .tr1:hover {
      width: 200px;
      height: 200px;
      background-color: #ff6e5f;
      -webkit-transform: rotate(180deg);
      -moz-transform: rotate(180deg);
      -o-transform: rotate(180deg);
      -ms-transform: rotate(180deg);
      transform: rotate(180deg);
   }
</style>

<body>
<div class="tr1"><h1>!</h1> </div>
</body>

 

​

​

*transition-timing-function 속성 - νŠΈλžœμ§€μ…˜ 속도 곑선 μ§€μ •ν•˜κΈ°

transition-timing-function 속성을 μ‚¬μš©ν•˜λ©΄ μ‹œμž‘κ³Ό 쀑간, λμ—μ„œμ˜ 속도λ₯Ό 지정해 속도 곑선을 λ§Œλ“€ 수 μžˆλ‹€.

속도 곑선은 미리 정해진 ν‚€μ›Œλ“œλ‚˜ '베지에 곑선'을 μ΄μš©ν•΄ ν‘œν˜„ν•œλ‹€.

​

κΈ°λ³Έν˜•)

transition-timing-function: linear | ease | ease-in | ease-out | ease-in-out | cubic-bezier(n, n, n, n)

 

속성 κ°’

μ„€λͺ…

linear

μ‹œμž‘λΆ€ν„° λκΉŒμ§€ λ˜‘κ°™μ€ μ†λ„λ‘œ νŠΈλžœμ§€μ…˜μ„ μ§„ν–‰ν•œλ‹€.

ease

μ²˜μŒμ—λŠ” 천천히 μ‹œμž‘ν•˜κ³  점점 빨라지닀가 λ§ˆμ§€λ§‰μ—λŠ” 천천히 끝낸닀.

ease-in

μ‹œμž‘μ„ 느리게 ν•œλ‹€.

ease-out

느리게 끝낸닀.

ease-in-out

느리게 μ‹œμž‘ν•˜κ³  느리게 끝낸닀.

cubic-bezier

(n, n, n, n)

베지에 ν•¨μˆ˜λ₯Ό 직접 μ •μ˜ν•΄ μ‚¬μš©ν•œλ‹€. nμ—μ„œ μ‚¬μš©ν•  수 μžˆλŠ” 값은 0~1이닀.

​

νŠΈλžœμ§€μ…˜ 속도 곑선 μ§€μ •ν•˜κΈ°

<style>
   .ease {
      -moz-transition: 3s ease;
      -o-transition: 3s ease;
      -webkit-transition: 3s ease;
      transition: 3s ease; /* μ²˜μŒμ—λŠ” 천천히 μ‹œμž‘ν•˜κ³  점점 빨라지닀가 λ§ˆμ§€λ§‰μ—λŠ” 천천히 끝낸닀 */
   }
   #ex .linear{
      -webkit-transition: 3s linear;
      -moz-transition: 3s linear;
      -o-transition: 3s linear;
      transition: 3s linear; /* μ‹œμž‘λΆ€ν„° λκΉŒμ§€ λ˜‘κ°™μ€ μ†λ„λ‘œ νŠΈλžœμ§€μ…˜μ„ 진행 */
   }
   #ex .ease-in{
      -webkit-transition: 3s ease-in;
      -moz-transition: 3s ease-in;
      -o-transition: 3s ease-in;
      transition: 3s ease-in; /* μ‹œμž‘μ„ 느리게 ν•œλ‹€ */
   }
   #ex .ease-out{
      -webkit-transition: 3s ease-out;
      -moz-transition: 3s ease-out;
      -o-transition: 3s ease-out;
      transition: 3s ease-out; /* 느리게 끝낸닀 */
   }
   #ex .ease-in-out{
      -webkit-transition: 3s ease-in-out;
      -moz-transition: 3s ease-in-out;
      -o-transition: 3s ease-in-out;
      transition: 3s ease-in-out; /* 느리게 μ‹œμž‘ν•˜κ³  느리게 끝낸닀 */
   }
</style>

<body>
<div id="ex">
<div class="ease"> ease </div>
<div class="linear"> linear </div>
<div class="ease-in"> ease-in </div>
<div class="ease-out"> ease-out </div>
<div class="ease-in-out"> ease-in-out </div>
</div>
</body>

 

 

​

*transition-delay 속성 - 지연 μ‹œκ°„ μ„€μ •ν•˜κΈ°

transition-delay 속성은 νŠΈλžœμ§€μ…˜μ΄ μ–Έμ œλΆ€ν„° μ‹œμž‘ν•  것인지λ₯Ό μ„€μ •ν•œλ‹€. μ§€μ •ν•˜λŠ” μ‹œκ°„λ§ŒνΌ κΈ°λ‹€λ Έλ‹€κ°€ νŠΈλžœμ§€μ…˜μ΄ μ‹œμž‘λœλ‹€. μ‚¬μš©ν•  수 μžˆλŠ” 값은 초(seconds)λ‚˜ λ°€λ¦¬μ΄ˆ(milliseconds)이며 κΈ°λ³Έ 값은 0이닀.

​

κΈ°λ³Έν˜•)

transition-delay: <μ‹œκ°„>

​

νŠΉμ • μ‹œκ°„ 후에 νŠΈλžœμ§€μ…˜ μ‹€ν–‰ν•˜κΈ°

<style>
   #no-delay {
      -webkit-transition-duration: 3s;
      -moz-transition-duration: 3s;
      -o-transition-duration: 3s;
      transition-duration: 3s;
      border: 1px solid #ff6a00;
   }
   #delay {
      -webkit-transition-duration: 3s;
      -moz-transition-duration: 3s;
      -o-transition-duration: 3s;
      transition-duration: 3s;
      -webkit-transition-delay: 1s;
      -moz-transition-delay: 1s;
      -o-transition-delay: 1s;
      transition-delay: 1s;
      border: 1px solid #006aff;
   }
</style>

<body>
<div id="ex">
<div id="no-delay" class="box"> <p>no-delay</p> </div>
<div id="delay" class="box"> <p>delay</p> </div>
</div>

 

​

​

*transition 속성 - νŠΈλžœμ§€μ…˜ 속성 ν•œκΊΌλ²ˆμ— ν‘œκΈ°ν•˜κΈ°

각 λΈŒλΌμš°μ €μ— 맞게 속성 이름 μ•žμ— 접두사λ₯Ό λΆ™μ—¬μ•Ό ν•œλ‹€.

μ†ŒμŠ€κ°€ 아무리 길어지더라도 νŠΈλžœμ§€μ…˜ 적용 λŒ€μƒμ„ 2~3κ°œμ”© μΌλΆ€λ§Œ 지정할 경우, transition-property 속성을 μ΄μš©ν•΄ λŒ€μƒμ„ μ•Œλ € μ£Όμ–΄μ•Ό ν•˜κ³  각 λŒ€μƒλ³„λ‘œ 진행 μ‹œκ°„μ΄ λ‹€λ₯΄λ‹€λ©΄ transition-duration 속성을 μ΄μš©ν•΄ μ‹œκ°„λ„ λ”°λ‘œ μ§€μ •ν•˜λŠ” 것이 μ’‹λ‹€. ν•˜μ§€λ§Œ νŠΈλžœμ§€μ…˜ 적용 λŒ€μƒμ΄ 전체이고 νŠΈλžœμ§€μ…˜ μ‹€ν–‰ μ‹œκ°„μ΄ λŒ€μƒλ³„λ‘œ λ‹€λ₯΄μ§€ μ•Šλ‹€λ©΄ transition μ†μ„±μœΌλ‘œ ν•œκΊΌλ²ˆμ— μ§€μ •ν•˜λŠ” 것이 νŽΈλ¦¬ν•˜λ‹€.

​

κΈ°λ³Έν˜•)

transition: <transition-property κ°’> | <transition-duration κ°’> | <transition-timing-function κ°’> | <transition-delay κ°’>

 

transition 속성 ν•œκΊΌλ²ˆμ— ν‘œκΈ°ν•˜κΈ°

<style>
   .tr1 {
      width: 200px;
      height: 200px;
      background-color: red;
      border: 1px solid black;
      -webkit-transition: 2s ease-in;
      -moz-transition: 2s ease-in;
      -o-transition: 2s ease-in;
      transition: 2s ease-in;
   }
   .tr1:hover {
      width: 100px;
      height: 100px;
      background-color: #ff6e5f;
      -webkit-transform: rotate(270deg);
      -moz-transform: rotate(270deg);
      -o-transform: rotate(270deg);
      -ms-transform: rotate(270deg);
      transform: rotate(270deg);
   }
</style>
</head>
​
<body>
<div class="tr1"></div>
</body>

 

λ°˜μ‘ν˜•

λŒ“κΈ€