CSS-анимация с тремя точками на экране загрузки

У меня есть простой лоадер, на котором я хотел бы, чтобы в конце текста появлялись точки по одной точке.

К сожалению, я могу заставить их моргать только одновременно, но я хочу, чтобы точки появлялись по одной, а затем анимация начиналась заново.

В настоящее время я использую плавную анимацию, которая выглядит следующим образом:

@keyframes fadeIn {
    0% { opacity: 0 }
    100% { opacity: 1 }
}

Вот пример того, что у меня есть:

const App = () => {

  return (
  <h1>
    Loading<span>.</span><span>.</span><span>.</span>
  </h1>
  )
}


ReactDOM.render(
    <App />,
    document.getElementById('app')
);
@keyframes fadeIn {
    0% { opacity: 0 }
    100% { opacity: 1 }
}

span:nth-child(1) {
  opacity: 0;
  animation: fadeIn 500ms infinite;
}
span:nth-child(2) {
  opacity: 0;
  animation: fadeIn 500ms infinite;
  animation-delay: 500ms;
}
span:nth-child(3) {
  opacity: 0;
  animation: fadeIn 500ms infinite;
  animation-delay: 1000ms;
}
<script src="https://cdnjs.cloudflare.com/ajax/libs/react/16.8.0/umd/react.production.min.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/react-dom/16.8.0/umd/react-dom.production.min.js"></script>
<div id="app"></div>

Свободный перевод вопроса Triple dot CSS animation on a loading screen от участника @theJuls.


Ответы (1 шт):

Автор решения: Alexandr_TT

Более простая идея с меньшим количеством кода:

.loading {
  font-weight: bold;
  display:inline-block;
  font-family: monospace;
  font-size: 30px;
  clip-path: inset(0 3ch 0 0);
  animation: l 1s steps(4) infinite;
}

@keyframes l {
  to {
    clip-path: inset(0 -1ch 0 0)
  }
}
<div class="loading">Loading...</div>

Свободный перевод ответа от участника @Temani Afif.

→ Ссылка