RError.com

RError.com Logo RError.com Logo

RError.com Navigation

  • 主页

Mobile menu

Close
  • 主页
  • 系统&网络
    • 热门问题
    • 最新问题
    • 标签
  • Ubuntu
    • 热门问题
    • 最新问题
    • 标签
  • 帮助
主页 / 问题 / 1155758
Accepted
Leks
Leks
Asked:2020-07-22 06:01:15 +0000 UTC2020-07-22 06:01:15 +0000 UTC 2020-07-22 06:01:15 +0000 UTC

使用 SVG 或 CSS 为平滑的颜色变化设置动画

  • 772

<svg viewBox="0 0 520 520" width="500" style='border: 1px solid black'>
 
<defs>
<linearGradient id="MyGradient">
      <stop offset="0" style="stop-color:red;"/>
     <stop offset="100%" style="stop-color:blue;">
      <animate attributeName="offset" 
         from="0%" to="100%" dur="5s"
               repeatCount="indefinite"/>
      </stop>

</linearGradient>

  </defs>
<circle cx="75" cy="75" r="70" fill="url(#MyGradient)"/>
</svg>

css
  • 2 2 个回答
  • 10 Views

2 个回答

  • Voted
  1. Vasily
    2020-07-22T07:33:23Z2020-07-22T07:33:23Z

    速写:

    svg {
      width: 200px;
      border: 1px solid;
    }
    <svg viewBox="0 0 520 520" width="500" style="border: 1px solid black">
        <defs>
            <linearGradient id="MyGradient" x1="0" y1="0" x2="100%" y2="0">
                <stop offset="0" stop-color="blue">
                   <animate attributeName="stop-color" values="green;blue" dur="10s" repeatCount="1" fill="freeze" /> 
                </stop>
                <stop offset="1" stop-color="blue">
                    <animate attributeName="stop-color" values="blue;green" dur="10s" repeatCount="1" fill="freeze" /> 
                </stop>
            </linearGradient>
        </defs>
    <circle cx="255" cy="255" r="200" fill="url(#MyGradient)" />
    </svg>

    • 3
  2. Best Answer
    Alexandr_TT
    2020-07-22T14:57:46Z2020-07-22T14:57:46Z

    为了使颜色替换动画起作用,您需要在代码中将其替换
    from="0%" to="100%"为 from="0" to="1"

    <svg viewBox="0 0 520 520" width="500" style='border: 1px solid black'>
     
    <defs>
    <linearGradient id="MyGradient">
          <stop offset="0" style="stop-color:red;"/>
        
        <stop offset="100%" style="stop-color:blue;">
          <animate attributeName="offset" 
             from="0" to="1" dur="5s"
                   repeatCount="1" fill="freeze"/>
          </stop>
    </linearGradient>
      </defs>
    <circle cx="75" cy="75" r="70" fill="url(#MyGradient)"/>
    </svg>

    要发生完整的颜色变化,您需要为两种颜色的偏移设置动画

    点击后动画会开始

    <svg id="svg1" viewBox="0 0 520 520" width="500" style='border: 1px solid black'>
     <defs>
    <linearGradient id="MyGradient">
          <stop offset="0" style="stop-color:red;"> 
            <animate attributeName="offset" 
             from="0" to="1" begin="svg1.click" dur="5s"
                   repeatCount="1" fill="freeze"/>
        </stop>
            <stop offset="0" style="stop-color:blue;">
              <animate attributeName="offset" 
                 from="0" to="1" begin="svg1.click" dur="5s"
                       repeatCount="1" fill="freeze"/>
            </stop>
    </linearGradient>
      </defs>
    <circle cx="75" cy="75" r="70" fill="url(#MyGradient)"/>
    </svg>

    其他悬停动画选项

    .crc1 {
      fill: url('#grad1');
    }
    .crc1 ~ defs stop {
      transition: 2s;
    }
    
    .crc1:hover ~ defs stop:first-child {
      stop-color: #24bed2;
    }
    .crc1:hover ~ defs stop:last-child {
      stop-color: #32ffe4;
    }
    <svg class="the-svg" width="200px" viewBox="0 0 100 100">
      <circle class="crc1" cx="50" cy="50" r="50"/>
      <defs>
        <linearGradient id="grad1"
          x1="0"
          x2="0"
          y1="62"
          y2="0"
          gradientUnits="userSpaceOnUse">
           <stop offset="40%" stop-color="red"/>
           <stop offset="100%" stop-color="red"/>
        </linearGradient>
      </defs>
    </svg>

    在动画的开始和结束状态,渐变从两种颜色变为另外两种颜色。

    .crc1 {
      fill: url('#grad1');
    }
     .crc1 ~ defs stop {
      transition: 3s;
    }
    
    .crc1 ~ defs stop:first-child {
      stop-color: #24bed2;
    }
    .crc1:hover ~ defs stop:last-child {
      stop-color: #F4FFAF;
    } 
    <svg class="the-svg" width="200px" height="200" viewBox="-10 -10 120 120">
      <circle class="crc1" cx="50" cy="50" r="50"  stroke="#F4FFAF"/>
      <defs>
        <linearGradient id="grad1" x1="0" x2="0" y1="90" y2="0" gradientUnits="userSpaceOnUse">
          <stop offset="2%" stop-color="#2C2C2C"/>
          <stop offset="50%" stop-color="#2C2C2C"/>
        </linearGradient>
      </defs>
    </svg>

    文本的渐变动画

    .crc1 {
      fill: url('#grad1');
    }
    .crc1 ~ defs stop {
      transition: 2s;
    }
    
    .crc1 ~ defs stop:first-child {
      stop-color: dodgerblue;
    }
    .crc1:hover ~ defs stop:last-child {
      stop-color: gold;
    }
    <svg class="the-svg" width="400px" height="400px" viewBox="0 0 250 250">
       <!-- <circle class="crc11" cx="50" cy="50" r="50"/> -->
       <rect width="100%" height="50%" fill="#212121" />
      <text class="crc1" font-size="120" font-family="serif" font-weight="600" x="0" y="100" >Leks </text>
      <defs>
        <linearGradient id="grad1"
          x1="0"
          x2="0"
          y1="200"
          y2="0"
          gradientUnits="userSpaceOnUse">
          <stop offset="35%" stop-color="#FF1B1B"/>
          <stop offset="80%" stop-color="#FF1B1B"/>
        </linearGradient>
      </defs>
    </svg>

    • 3

相关问题

  • 几何形状的阴影

  • 如何制作这样的人物组合?

  • 如何在css中制作一个图形

  • 如何制作阴影(投影)渐变

  • 网格项目传输不起作用

  • 更改屏幕宽度时换行。引导程序

Sidebar

Stats

  • 问题 10021
  • Answers 30001
  • 最佳答案 8000
  • 用户 6900
  • 常问
  • 回答
  • Marko Smith

    如何从列表中打印最大元素(str 类型)的长度?

    • 2 个回答
  • Marko Smith

    如何在 PyQT5 中清除 QFrame 的内容

    • 1 个回答
  • Marko Smith

    如何将具有特定字符的字符串拆分为两个不同的列表?

    • 2 个回答
  • Marko Smith

    导航栏活动元素

    • 1 个回答
  • Marko Smith

    是否可以将文本放入数组中?[关闭]

    • 1 个回答
  • Marko Smith

    如何一次用多个分隔符拆分字符串?

    • 1 个回答
  • Marko Smith

    如何通过 ClassPath 创建 InputStream?

    • 2 个回答
  • Marko Smith

    在一个查询中连接多个表

    • 1 个回答
  • Marko Smith

    对列表列表中的所有值求和

    • 3 个回答
  • Marko Smith

    如何对齐 string.Format 中的列?

    • 1 个回答
  • Martin Hope
    Alexandr_TT 2020年新年大赛! 2020-12-20 18:20:21 +0000 UTC
  • Martin Hope
    Alexandr_TT 圣诞树动画 2020-12-23 00:38:08 +0000 UTC
  • Martin Hope
    Air 究竟是什么标识了网站访问者? 2020-11-03 15:49:20 +0000 UTC
  • Martin Hope
    Qwertiy 号码显示 9223372036854775807 2020-07-11 18:16:49 +0000 UTC
  • Martin Hope
    user216109 如何为黑客设下陷阱,或充分击退攻击? 2020-05-10 02:22:52 +0000 UTC
  • Martin Hope
    Qwertiy 并变成3个无穷大 2020-11-06 07:15:57 +0000 UTC
  • Martin Hope
    koks_rs 什么是样板代码? 2020-10-27 15:43:19 +0000 UTC
  • Martin Hope
    Sirop4ik 向 git 提交发布的正确方法是什么? 2020-10-05 00:02:00 +0000 UTC
  • Martin Hope
    faoxis 为什么在这么多示例中函数都称为 foo? 2020-08-15 04:42:49 +0000 UTC
  • Martin Hope
    Pavel Mayorov 如何从事件或回调函数中返回值?或者至少等他们完成。 2020-08-11 16:49:28 +0000 UTC

热门标签

javascript python java php c# c++ html android jquery mysql

Explore

  • 主页
  • 问题
    • 热门问题
    • 最新问题
  • 标签
  • 帮助

Footer

RError.com

关于我们

  • 关于我们
  • 联系我们

Legal Stuff

  • Privacy Policy

帮助

© 2023 RError.com All Rights Reserve   沪ICP备12040472号-5