How can I achieve a CSS text loading animation over multiple lines?

前端 未结 1 1828
半阙折子戏
半阙折子戏 2020-12-08 13:59

I am trying to implement a text loading animation with CSS. what I have is a text with black color, then when the page loads the text will fill start filling wi

相关标签:
1条回答
  • 2020-12-08 14:11

    An idea is to consider gradient coloration with an inline element. Simply pay attention to browser support of 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>

    To better understand how it works, here is a basic example where you can see how inline element behave with background coloration and how its different from block level element:

    .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%
      }
    }
    <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>

    I simply apply the same logic using background-clip:text to color the text instead of the background:

    .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%
      }
    }
    <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>

    0 讨论(0)
提交回复
热议问题