【问题标题】:Apply linear-gradient animation to mesh/grid overlay only仅将线性渐变动画应用于网格/网格叠加
【发布时间】:2019-06-24 15:55:34
【问题描述】:

我对自己的一个想法感到头疼,也许我完全错误地处理它并且可以使用其他一些输入/想法。

这个想法是让动画渐变仅应用于网格/网格线。

这是我现在拥有的代码笔: https://codepen.io/monsmado/pen/ewRgOR

html {
  overflow: hidden;
  font-weight: 100;
}

#pattern {
  background-image: 
    linear-gradient(rgba(255, 255, 255, 1) 0px, transparent 1px), 
    linear-gradient(90deg, rgba(255, 255, 255, 1) 0px, transparent 1px);
  background-size: 20px 20px;
  background-position: -2px -2px, -2px -2px, -1px -1px, -1px -1px;
  height: 100%;
  width: 100%;
  position: absolute;
  margin: -8px;
}

body {
  background: linear-gradient(270deg, #246655, #662464);
  background-size: 400% 400%;
  animation: AnimationName 5s ease infinite;
}

@keyframes AnimationName {
  0% {
    background-position: 0% 50%
  }
  50% {
    background-position: 100% 50%
  }
  100% {
    background-position: 0% 50%
  }
}
<div id="pattern"></div>

我想不出如何将动画渐变应用到网格上。也许使用css图层蒙版或其他东西。我发现了一些适用于一些 java 脚本和画布的其他解决方案,但对画布还不是很熟悉。

这是一个示例图片,它应该是什么样子:https://imgur.com/a/vAIHG1d 渐变仅应用于线条/网格,背景可以是任何东西。线性渐变应该变成动画了。

任何关于如何解决此问题的帮助或想法都会非常好。

【问题讨论】:

    标签: css css-animations linear-gradients


    【解决方案1】:

    您可以考虑使用mask-image 来执行此操作。您将需要创建两个图层,其中蒙版将是 repeating-linear-gradient,它将只保持线条可见。第一层是水平的,第二层是垂直的:

    body {
      margin: 0;
      height: 100vh;
      background: url(https://picsum.photos/id/1019/1000/800) center/cover;
    }
    
    body:before,
    body:after{
      content: "";
      position: absolute;
      top: 0;
      left: 0;
      right: 0;
      bottom: 0;
      background-image: linear-gradient(to left, purple, green, orange);
      background-size: 400% 100%;
      animation: AnimationName 2s ease infinite alternate;
    }
    body:before {  
      -webkit-mask-image: repeating-linear-gradient(to bottom, transparent 0 19px, #fff 19px 20px);
      mask-image: repeating-linear-gradient(to bottom, transparent 0 19px, #fff 19px 20px);
    }
    body:after {  
      -webkit-mask-image: repeating-linear-gradient(to right, transparent 0 19px, #fff 19px 20px);
      mask-image: repeating-linear-gradient(to right, transparent 0 19px, #fff 19px 20px);
    }
    
    @keyframes AnimationName {
      0% {
        background-position: left;
      }
      100% {
        background-position: right;
      }
    }

    或者使用下面的多重掩码:

    body {
      margin: 0;
      height: 100vh;
      background: url(https://picsum.photos/id/1019/1000/800) center/cover;
    }
    
    body:before{
      content: "";
      position: absolute;
      top: 0;
      left: 0;
      right: 0;
      bottom: 0;
      background-image: linear-gradient(to left, purple, green, orange);
      background-size: 400% 100%;
      animation: AnimationName 2s ease infinite alternate;
      -webkit-mask: 
        repeating-linear-gradient(to bottom, transparent 0 19px, #fff 19px 20px),
        repeating-linear-gradient(to right,  transparent 0 19px, #fff 19px 20px);
      mask: 
        repeating-linear-gradient(to bottom, transparent 0 19px, #fff 19px 20px),
        repeating-linear-gradient(to right,  transparent 0 19px, #fff 19px 20px);
    }
    
    @keyframes AnimationName {
      0% {
        background-position: left;
      }
      100% {
        background-position: right;
      }
    }

    【讨论】:

    • 太棒了,这真的帮助了我。是否也可以将其应用于具有网格的 .png 图像。因为网格需要从某个方向倾斜。 codepen.io/monsmado/pen/PrjaeX 在 codepen 中,您可以在背景图像中看到我所说的网格被倾斜或变换的意思。
    • 我说 png 不好。最好将其应用于 svg 并因此更新钢笔。 SVG 会更好地保持质量。
    • @Mark 好吧,那是另一回事。我建议您单独问一个关于 SVG 的问题,以便您可以从 SVG 人员那里获得帮助,因为它实际上超出了这个问题的范围,我无法为您提供帮助。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2015-05-19
    • 1970-01-01
    • 2010-12-14
    • 1970-01-01
    • 2014-08-26
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多