如何通过多行实现CSS文本加载动画?

Cha*_*kar 31 html css css3 css-animations

我正在尝试用文本加载动画CSS.我所拥有的是一个黑色的文本,然后当页面加载文本将填充开始填充红色几秒钟.

我面临的问题是文本加载动画工作正常,但是当文本结束并以新行开头时,动画文本仍然在同一行上继续.

我怎样才能解决这个问题?

在此输入图像描述

码:

    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;
        }
    }
Run Code Online (Sandbox Code Playgroud)
<h1 data-text="Suspendisse mollis dolor vitae porta egestas. Nunc nec congue odio.">Suspendisse mollis dolor vitae porta egestas. Nunc nec congue odio.</h1>
Run Code Online (Sandbox Code Playgroud)

Tem*_*fif 33

一个想法是考虑使用内联元素的渐变着色.只要留意浏览器支持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%;
  }
}
Run Code Online (Sandbox Code Playgroud)
<h1><span>Suspendisse mollis dolor vitae porta egestas. Nunc nec congue odio.</span></h1>
Run Code Online (Sandbox Code Playgroud)

为了更好地理解它是如何工作的,这里有一个基本的例子,你可以看到内联元素如何表现背景颜色以及它与块级元素的不同之处:

.color {
  font-size: 1.5em;
  line-height: 1.5em;
  border: 2px solid;
  background: linear-gradient(red, red) left no-repeat;
  background-size: 0% 100%;
  animation: change 5s linear forwards;
}

@keyframes change {
  100% {
    background-size: 100% 100%
  }
}
Run Code Online (Sandbox Code Playgroud)
<span class="color">
 lorem ipsume lorem ipsume lorem ipsume lorem ipsume lorem ipsume lorem ipsume lorem ipsume lorem ipsume lorem ipsume 
</span>
<div class="color">
  lorem ipsume lorem ipsume lorem ipsume lorem ipsume lorem ipsume lorem ipsume lorem ipsume lorem ipsume lorem ipsume
</div>
Run Code Online (Sandbox Code Playgroud)

我只是使用相同的逻辑来background-clip:text为文本而不是背景着色:

.color {
  font-size: 1.5em;
  line-height: 1.5em;
  border: 2px solid;
  background: linear-gradient(red, red) left no-repeat;
  background-size: 0% 100%;
  -webkit-background-clip: text;
  -webkit-text-fill-color: transparent;
  background-clip: text;
  color: transparent;
  animation: change 5s linear forwards;
}

@keyframes change {
  100% {
    background-size: 100% 100%
  }
}
Run Code Online (Sandbox Code Playgroud)
<span class="color">
 lorem ipsume lorem ipsume lorem ipsume lorem ipsume lorem ipsume lorem ipsume lorem ipsume lorem ipsume lorem ipsume 
</span>
<div class="color">
  lorem ipsume lorem ipsume lorem ipsume lorem ipsume lorem ipsume lorem ipsume lorem ipsume lorem ipsume lorem ipsume
</div>
Run Code Online (Sandbox Code Playgroud)

  • 很棒的问题.真棒的答案!+1 (5认同)
  • 我一直在玩这个,我为你鼓掌,这很有效! (3认同)
  • @Roberrrt它是关于内联元素的所有内容..与块级元素不同,颜色不是对整个块进行的,而是对每一行进行着色...就像你有一个很长的连续线,你切断但它们仍然是链接的.用边框检查这个,你就会明白:https://jsfiddle.net/xf73yg9u/ ..然后我用背景应用相同的逻辑,只做文字的颜色 (2认同)