πŸ’« ν…μŠ€νŠΈ λ³€ν™˜ μ• λ‹ˆλ©”μ΄μ…˜

AromahyangΒ·2022λ…„ 12μ›” 19일
0

Frontend

λͺ©λ‘ 보기
4/5
post-thumbnail

ν…μŠ€νŠΈκ°€ μΌμ •ν•œ μ‹œκ°„ κ°„κ²©μœΌλ‘œ λ³€ν•˜λŠ” μ• λ‹ˆλ©”μ΄μ…˜μ„ κ΅¬ν˜„ν•΄λ³Ό 일이 μžˆμ–΄ μ‹œλ„ν•΄λ³΄μ•˜λ‹€.
ν˜Ήμ‹œ λ‚˜μ²˜λŸΌ 첫 번째 방법을 μƒκ°ν–ˆλ‹€κ°€ λ‹€λ₯Έ 방법을 κ³ λ―Όν•˜λŠ” 뢄듀이 μžˆμ„κΉŒλ΄ κΈ°λ‘ν•΄λ‘μ—ˆλ‹€.
κ²°κ³ΌλŠ” μ•„λž˜μ™€ κ°™λ‹€.

첫 번째 μ‹œλ„ - content둜 μ• λ‹ˆλ©”μ΄μ…˜

CSS의 content 속성과 keyframesλ₯Ό μ“°λ©΄ 될 것이라고 μƒκ°ν•˜μ˜€λ‹€.

<!-- html -->
<div class="wrapper">
	My character pick: 
</div>
/* css */
.wrapper::after {
  content: "Alisa";
  animation: textChange 5s infinite;
}

@keyframes textChange {
  0% {
    content: "Alisa";
  }
  25% {
    content: "Bob";
  }
  50% {
    content: "Julia";
  }
  75% {
    content: "Leo";
  }
}

1μ΄ˆλ§ˆλ‹€ AlisaλΆ€ν„° LeoκΉŒμ§€ 순차적으둜 화면에 보여진닀.
단, Chromeμ—μ„œλ§Œ λ™μž‘ν•˜κ³  Safariμ—μ„œλŠ” λ™μž‘ν•˜μ§€ μ•ŠλŠ”λ‹€.(링크1, 링크2)
(웃긴 건 일뢀 iOS λ””λ°”μ΄μŠ€μ—μ„œλŠ” λ™μž‘ν•˜λŠ” κ±Έ λ΄€λ‹€..)
λͺ¨λ“  λΈŒλΌμš°μ €μ—μ„œ μ• λ‹ˆλ©”μ΄μ…˜μ΄ 보여야 ν•˜κΈ° λ•Œλ¬Έμ— λ‹€λ₯Έ 방법을 μ°Ύμ•„λ³΄μ•˜λ‹€.

두 번째 μ‹œλ„ - opacity둜 μ• λ‹ˆλ©”μ΄μ…˜

CSS의 content λŒ€μ‹  opacityλ₯Ό ν™œμš©ν•˜μ˜€λ‹€.

<!-- html -->
<div class="wrapper">
	My character pick:
    <ul>
      <li>Alisa</li>
      <li>Bob</li>
      <li>Julia</li>
      <li>Leo</li>
    </ul>
</div>
/* css */
ul {
  position: relative;
}

li {
  position: absolute;
  top: 0;
  left: 0;
  opacity: 0;
  animation: textChange2 4s infinite;
}
li:nth-child(1) {
  opacity: 1;
}
li:nth-child(2) {
  animation-delay: 1s;
}
li:nth-child(3) {
  animation-delay: 2s;
}
li:nth-child(4) {
  animation-delay: 3s;
}

@keyframes textChange2 {
  0%,
  25% {
    opacity: 1;
  }
  25.01%,
  100% {
    opacity: 0;
  }
}

μ• λ‹ˆλ©”μ΄μ…˜μ„ 각 li에 μ μš©ν•˜λŠ”λ°, λŒ€μ‹  animation-delayλ₯Ό 1μ΄ˆλ§ˆλ‹€ μ£Όμ—ˆλ‹€.
delay μ‹œκ°„μ΄ μ§€λ‚˜κΈ° μ „κΉŒμ§€λŠ” opacity: 0이기 λ•Œλ¬Έμ— 보이지 μ•Šλ‹€κ°€ delay μ‹œκ°„μ΄ μ§€λ‚˜λ©΄ 4초의 0~25% λ™μ•ˆ, 즉 1초 λ™μ•ˆ opacity: 1이 λ˜μ–΄ 화면에 보여진닀.
1μ΄ˆκ°€ μ§€λ‚˜μžλ§ˆμž μ‚¬λΌμ§€κ²Œ ν•˜κΈ° μœ„ν•΄μ„œ 25.01%λΌλŠ” 이전 κ°’(25%)κ³Ό μ•½κ°„μ˜ 차이가 λ‚˜λŠ” 값을 μ£Ό μ—ˆλ‹€.
opacityλ₯Ό ν™œμš©ν•œ μ• λ‹ˆλ©”μ΄μ…˜μ€ λͺ¨λ“  λΈŒλΌμš°μ €μ—μ„œ λ™μž‘ν•œλ‹€.
λ‹€λ§Œ (λ‹€λ₯Έ λΈŒλΌμš°μ €μ—μ„œ 확인은 λͺ» ν–ˆλ‹€λ§ˆλŠ”) safariμ—μ„œ 0.01% μ‹œκ°„ 차이둜 인해 λ‚ŒλΉ‘μ΄λŠ” κ²ƒμ²˜λŸΌ 보인닀.
아직 μ™œ κ·ΈλŸ°μ§€ 원인을 찾지 λͺ»ν•˜μ˜€μœΌλ‚˜ λΈŒλΌμš°μ €λ§ˆλ‹€ css μ• λ‹ˆλ©”μ΄μ…˜μ΄ λ™μž‘ν•˜λŠ” ν”„λ ˆμž„μˆ˜(fps)κ°€ λ‹¬λΌμ„œ 그런 게 μ•„λ‹κΉŒλΌκ³  μΆ”μΈ‘ 쀑이닀.(Chrome은 μ•½ 60fps, safariλŠ” μ•½ 30fps)

profile
ν•œ 우물만 νŒŒλŠ” μ‚¬λžŒ

0개의 λŒ“κΈ€