html - 用颜色填充云或任何形式(动画)
问题描述
我想用从左到右的颜色为 svg 格式的云图标设置动画,但不知道如何处理它。
我从 illustrator 中导出了云并将代码粘贴到此处:
<svg id="cloud-icon" data-name="Layer 1" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 613.78 432.88">
<title>wolke-10</title>
<path d="M89.8,206.1a108.63,108.63,0,0,0-84.3,106c0,50.9,36.7,94.8,84.3,105.7Z" transform="translate(-0.01 -0.01)" style="fill:#009285"/>
<path d="M465.7,427.4H118.3C57.1,427.4,5.5,376,5.5,315.2,5.5,258.5,48,211,104.8,203.4v-6.7c0-50.6,20.1-98.5,56.6-134.9S246.1,5.5,297,5.5c86.4,0,162.3,56.8,185.4,138.5,71.9,7.2,125.9,67.7,125.9,141.6C608.3,365.1,545.7,427.4,465.7,427.4ZM297,12.6c-49,0-95.3,19.3-130.5,54.3S112,148,112,196.7v13.1l-3.2.3c-54.8,5.8-96.1,51-96.1,105.1,0,57,48.4,105.1,105.6,105.1H465.8c75.9,0,135.4-59.2,135.4-134.7,0-71-52.4-129-121.8-134.7l-2.5-.2-.7-2.4C454.6,68.4,380.9,12.6,297,12.6Z" transform="translate(-0.01 -0.01)" style="fill:none;stroke:#fff;stroke-miterlimit:10;stroke-width:10.975500106811523px"/>
</svg>
云图标的外观:云图标
你有什么想法?稍后我想将形状填充到某个点。这取决于百分比值。
解决方案
显然是您的代码中的笔划,实际上是一条中空的路径。为了解决这个问题,我删除了云的一半代码(从第二个M
命令到结尾)。现在您可以填充路径,也可以将其用作<clipPath>
至于动画,有很多方法可以实现这一点。例如,您可以转换stroke-dashoffset
用云路径剪裁的线。
请将鼠标悬停在 svg 元素上以查看动画。
path {
fill:transparent;
stroke:#f00;
stroke-miterlimit:10;
stroke-width:10.975500106811523px;
}
line{
stroke-dasharray:613;
stroke-dashoffset:613;
transition:stroke-dashoffset 2s
}
svg:hover line{stroke-dashoffset:0;}
<svg id="cloud-icon" data-name="Layer 1" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 613.78 432.88">
<title>wolke-10</title>
<clipPath id="clip">
<use xlink:href="#cloud"/>
</clipPath>
<line y1="216.5" y2="216.5" x2="613" stroke="skyBlue" stroke-width="425" clip-path="url(#clip)"/>
<path id="cloud" d="M465.7,427.4H118.3C57.1,427.4,5.5,376,5.5,315.2,5.5,258.5,48,211,104.8,203.4v-6.7c0-50.6,20.1-98.5,56.6-134.9S246.1,5.5,297,5.5c86.4,0,162.3,56.8,185.4,138.5,71.9,7.2,125.9,67.7,125.9,141.6C608.3,365.1,545.7,427.4,465.7,427.4Z" transform="translate(-0.01 -0.01)" />
</svg>
更新
OP正在评论:
你也有一个建议如何用颜色填充云到 80%
在这种情况下,stroke-dashoffset
悬停时的值应为 20%。在这种情况下,行的总长度是 613。613 的 20% 是:613 * .2 = 122.6。
在 CSS 中,将最后一行替换为:
svg:hover line{stroke-dashoffset:122.6;}
推荐阅读
- haskell - Haskell - 用于检测数字是否在范围内的优雅代码
- sql - 更新具有一对多关系的数据库时出现问题
- python - python给了我太多的数组索引
- python-3.x - 如何在 2 个不同的元组中获得具有值的相同键
- tally - 我已经在 Tally Developer 9.Working Properly 中创建了 SMS 模块,但我的要求是多个项目选择而不是消息不正确的方式
- oop - 从非抽象类继承
- angular - 我想知道为什么 dist 文件夹的大小大于 src 的角度?
- python - 为什么 Pandas 拒绝读取 9 个世纪以后的日期?
- redirect - 如何将托管在 Heroku 上的 nextjs 应用程序从 http 重定向到 https?
- python - 从 django 以 html 格式显示数据