你能为 svg "background-image" 制作动画吗?
Can you animate a svg "background-image"?
我想将 svg 图像水平和垂直居中以响应我的 window。所以我决定将图像整合到 div 背景中。现在,当我想将 stroke-dasharray 和带有 stroke-dashoffset 的动画添加到我的 svg 时,它不起作用。
是否可以为 svg 背景图像设置动画?
svg-image 只包含很多行。
这是我的 svg 文件(有更多的行只有不同的 x 和 y 值):
<svg version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px" viewBox="0 0 1920 1200" xml:space="preserve">
<g id="Layer_1">
<line class="path" stroke-linecap="round" fill="none" stroke="#FFFFFF" stroke-width="3" stroke-miterlimit="10" x1="960" y1="600" x2="2346.139" y2="-42.064"/>
</g>
</svg>
这是我的 Html 和 Css 文件:
html, body {
padding: 0;
margin: 0;
height: 100%;
width: 100%;
background-color: red;
}
.Container {
position: relative;
left: 50%;
top: 50%;
transform: translate(-50%, -50%);
width: 100%;
height: 100%;
background-image: url(Space.svg);
background-size: cover;
background-position: center;
}
.path {
stroke-dasharray: 20;
}
<body>
<div class="Container">
</div>
</body>
你可以制作动画......但只能在支持它的浏览器中使用 - 你可以使用 IE 和其他一些浏览器(编辑,截至 2018 Edge 现在支持此功能)。
此示例使用 CSS 作为动画...我已成功使用 <animate>
标签,但尚未进行广泛测试。
.svg {
background-image: url("data:image/svg+xml;charset=UTF-8,%3Csvg width='300' height='70' viewBox='0 0 300 70' xmlns='http://www.w3.org/2000/svg'%3E%3Cstyle type='text/css'%3E %23a%7Banimation:x .5s ease alternate 14%7D%40keyframes x%7Bfrom%7Bfill:%23c2c2c2%7Dto%7Bfill:%23fff%7D%7D%3C/style%3E%3Crect id='a' x='14' y='23' width='28' height='28' fill='%23c2c2c2' /%3E%3Crect x='52' y='33' width='100' height='11' fill='%23c2c2c2' /%3E%3C/svg%3E");
background-repeat: no-repeat;
min-height: 200px;
}
<div class="svg">Look at my background</div>
请注意上面使用的实际编码 SVG(我在生产中用于 slow-loading google recaptcha iframe 的内联 UX 改进)是:
<svg width="300" height="70" viewBox="0 0 300 70" xmlns="http://www.w3.org/2000/svg">
<style type="text/css">
#a { animation: x .5s ease alternate 14; }
@keyframes x {
from { fill: #000; }
to { fill: #fff; }
}
</style>
<rect id="a" x="14" y="23" width="28" height="28" fill="#000" />
<rect x="52" y="33" width="100" height="11" fill="#000" />
</svg>
我想将 svg 图像水平和垂直居中以响应我的 window。所以我决定将图像整合到 div 背景中。现在,当我想将 stroke-dasharray 和带有 stroke-dashoffset 的动画添加到我的 svg 时,它不起作用。
是否可以为 svg 背景图像设置动画?
svg-image 只包含很多行。 这是我的 svg 文件(有更多的行只有不同的 x 和 y 值):
<svg version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px" viewBox="0 0 1920 1200" xml:space="preserve">
<g id="Layer_1">
<line class="path" stroke-linecap="round" fill="none" stroke="#FFFFFF" stroke-width="3" stroke-miterlimit="10" x1="960" y1="600" x2="2346.139" y2="-42.064"/>
</g>
</svg>
这是我的 Html 和 Css 文件:
html, body {
padding: 0;
margin: 0;
height: 100%;
width: 100%;
background-color: red;
}
.Container {
position: relative;
left: 50%;
top: 50%;
transform: translate(-50%, -50%);
width: 100%;
height: 100%;
background-image: url(Space.svg);
background-size: cover;
background-position: center;
}
.path {
stroke-dasharray: 20;
}
<body>
<div class="Container">
</div>
</body>
你可以制作动画......但只能在支持它的浏览器中使用 - 你可以使用 IE 和其他一些浏览器(编辑,截至 2018 Edge 现在支持此功能)。
此示例使用 CSS 作为动画...我已成功使用 <animate>
标签,但尚未进行广泛测试。
.svg {
background-image: url("data:image/svg+xml;charset=UTF-8,%3Csvg width='300' height='70' viewBox='0 0 300 70' xmlns='http://www.w3.org/2000/svg'%3E%3Cstyle type='text/css'%3E %23a%7Banimation:x .5s ease alternate 14%7D%40keyframes x%7Bfrom%7Bfill:%23c2c2c2%7Dto%7Bfill:%23fff%7D%7D%3C/style%3E%3Crect id='a' x='14' y='23' width='28' height='28' fill='%23c2c2c2' /%3E%3Crect x='52' y='33' width='100' height='11' fill='%23c2c2c2' /%3E%3C/svg%3E");
background-repeat: no-repeat;
min-height: 200px;
}
<div class="svg">Look at my background</div>
请注意上面使用的实际编码 SVG(我在生产中用于 slow-loading google recaptcha iframe 的内联 UX 改进)是:
<svg width="300" height="70" viewBox="0 0 300 70" xmlns="http://www.w3.org/2000/svg">
<style type="text/css">
#a { animation: x .5s ease alternate 14; }
@keyframes x {
from { fill: #000; }
to { fill: #fff; }
}
</style>
<rect id="a" x="14" y="23" width="28" height="28" fill="#000" />
<rect x="52" y="33" width="100" height="11" fill="#000" />
</svg>