gpt4 book ai didi

html - CSS 动画不适用于 中的 svg

转载 作者:技术小花猫 更新时间:2023-10-29 12:00:25 26 4
gpt4 key购买 nike

我正在尝试为图像/对象标签中的 SVG 设置动画,但它不起作用

svg {
width: 100%;
height: 200px;
}

.rotate-45 {
transform-origin: center;
transform: rotate(45deg);
}

.rotate {
transform-origin: center;
animation: rotate 1s ease-in-out infinite;
}

.rotate-back {
transform-origin: center;
animation: rotate 1s ease-in-out infinite;
animation-direction: alternate;
}

.left {
animation: move 1s ease-in-out infinite;
}

.right {
animation: move 1s ease-in-out infinite;
}

@keyframes rotate {
100% {
transform: rotate(calc(90deg + 45deg));
}
}

@keyframes move {
50% {
transform: translate(-30px, -30px);
}
}
 <svg width="100%" height="100%" viewBox="0 0 1000 1000" xmlns="http://www.w3.org/2000/svg" version="1.1" xmlns:xlink="http://www.w3.org/1999/xlink">
<g transform="translate(500,500)">
<rect class="rotate-45 rotate-back" x="-5" y="-5" width="10" height="10" stroke="#00a99d" stroke-width="20" fill="none" />
<rect class="rotate-45 rotate" x="-50" y="-50" width="100" height="100" stroke="#00a99d" stroke-width="20" stroke-linejoin="bevel" fill="none" />
<g transform="translate(-50,0) rotate(-45)">
<polyline class="left" points="40,-40 50,-50 -40,-50 -50,-40 -50,50 -40,40" stroke="#00a99d" stroke-width="20" fill="none" />
</g>
<g transform="translate(50,0) rotate(135)">
<polyline class="right" points="40,-40 50,-50 -40,-50 -50,-40 -50,50 -40,40" stroke="#00a99d" stroke-width="20" fill="none" />
</g>
<text y="-140" text-anchor="middle" font-weight="bold" font-size="3em" font-family="sans-serif">loading data...</text>
</g>
</svg>

如何使用 CSS 为图片标签内的 SVG 设置动画

这是该代码的插件 https://plnkr.co/edit/TdfR7cpVaQArtcUs0Hro?p=preview

最佳答案

您不能为 <img> 的内部构造动画从外部。即使它是一个 SVG。这有两个原因:

  1. CSS 不适用于跨文档边界,并且
  2. 通过 <img> 引用的图像必须是独立的。

如果您将 CSS 放在外部 SVG 中(通常在 <style> 元素中),动画应该可以正常工作。

另请注意,您需要更改操作方式transform-origin .它在 Chrome 中的工作方式很方便,但根据当前规范,这是错误的。它不适用于 Firefox 等其他浏览器。

<svg width="100%" height="100%" viewBox="0 0 1000 1000" xmlns="http://www.w3.org/2000/svg" version="1.1" xmlns:xlink="http://www.w3.org/1999/xlink">
<style>
.rotate-45 {
transform-origin: 0px 0px;
transform: rotate(45deg);
}

.rotate {
transform-origin: 0px 0px;
animation: rotate 1s ease-in-out infinite;
}

.rotate-back {
transform-origin: 0px 0px;
animation: rotate 1s ease-in-out infinite;
animation-direction: alternate;
}

.left {
animation: move 1s ease-in-out infinite;
}

.right {
animation: move 1s ease-in-out infinite;
}

@keyframes rotate {
100% {
transform: rotate(135deg);
}
}

@keyframes move {
50% {
transform: translate(-30px, -30px);
}
}
</style>
<g transform="translate(500,500)">
<rect class="rotate-45 rotate-back" x="-5" y="-5" width="10" height="10" stroke="#00a99d" stroke-width="20" fill="none"/>
<rect class="rotate-45 rotate" x="-50" y="-50" width="100" height="100" stroke="#00a99d" stroke-width="20" stroke-linejoin="bevel" fill="none"/>
<g transform="translate(-50,0) rotate(-45)"><polyline class="left" points="40,-40 50,-50 -40,-50 -50,-40 -50,50 -40,40" stroke="#00a99d" stroke-width="20" fill="none"/></g>
<g transform="translate(50,0) rotate(135)"><polyline class="right" points="40,-40 50,-50 -40,-50 -50,-40 -50,50 -40,40" stroke="#00a99d" stroke-width="20" fill="none"/></g>
<text y="-140" text-anchor="middle" font-weight="bold" font-size="3em" font-family="sans-serif">loading data...</text>
</g>
</svg>

关于html - CSS 动画不适用于 <img> 中的 svg,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46050871/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com