Как я могу добиться анимации загрузки текста CSS в несколько строк? - программирование

Как я могу добиться анимации загрузки текста CSS в несколько строк?

Я пытаюсь реализовать анимацию загрузки текста с помощью CSS. то, что у меня есть, это текст черного цвета, затем, когда страница загружается, текст заполняется и начинает заполняться красным цветом в течение нескольких секунд.

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

Как я могу это исправить?

enter image description here

код:

    body {
    background: #3498db;
    font-family: sans-serif;
    }
    h1 {
        position: relative;
        color: rgba(0, 0, 0, .3);
        font-size: 5em;
        white-space: wrap;
    }
    h1:before {
        content: attr(data-text);
        position: absolute;
        overflow: hidden;
        max-width: 100%;
        white-space: nowrap;
        word-break: break-all;
        color: #fff;
        animation: loading 8s linear;
    }
    @keyframes loading {
        0% {
            max-width: 0;
        }
    }
<h1 data-text="Suspendisse mollis dolor vitae porta egestas. Nunc nec congue odio.">Suspendisse mollis dolor vitae porta egestas. Nunc nec congue odio.</h1>
4b9b3361

Ответ 1

Идея состоит в том, чтобы рассмотреть градиентную окраску со встроенным элементом. Просто обратите внимание на поддержку браузером background-clip: text

body {
  background: #3498db;
  font-family: sans-serif;
}

h1 {
  font-size: 5em;
}

h1 span {
  background:
    linear-gradient(#fff,#fff) left no-repeat,
    rgba(0, 0, 0, .3);
  background-size:0% 100%;
  -webkit-background-clip: text;
  background-clip: text;
  -webkit-text-fill-color: transparent;
  color: transparent;
  animation:loading 5s forwards linear;
}

@keyframes loading {
  100% {
    background-size:100% 100%;
  }
}
<h1><span>Suspendisse mollis dolor vitae porta egestas. Nunc nec congue odio.</span></h1>