是否可以使用仅使用CSS的SVG路径创建以下动画?
CSS
html, body {
margin: 0;
height: 100%;
}
svg {
display: block;
position: absolute;
width: 90%;
height: 90%;
top: 5%;
left: 5%;
}
.path {
animation: dash 10s linear infinite;
}
@-webkit-keyframes dash {
to {
stroke-dashoffset: 0;
}
}
HTML
<svg version="1.1" id="Layer_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px" viewBox="0 0 659 522" enable-background="new 0 0 659 522" xml:space="preserve" preserveAspectRatio="none">
<path class="path" width="100%" height="100%" fill="none" stroke="#00ff00" stroke-width="5" stroke-miterlimit="10" d="M656.5,2.5v517H2.5V2.5H656.5z" stroke-dasharray="2042 300" stroke-dashoffset="2342" vector-effect="non-scaling-stroke" />
</svg>
以下是fiddle
答案 0 :(得分:2)
我很确定SVG是走到这里的方式,我认为使用css这样的动画会比使用SVG有更多的陷阱。
尽管如此,你仍然可以使用CSS实现类似的动画,市长的缺点是这需要一个固定的宽高比,以便蛇在盘旋。否则动画的速度会有所不同。另一个市长的缺点是它需要周围元素的背景颜色是静态的。
此解决方案使用一个沿外边缘移动的正方形,给人一种移动边框的印象。
-1
.div-wrapper {
padding: 20px;
width: 150px;
height: 150px;
margin: 50px;
}
.snake {
border: 2px solid lime;
display: inline-block;
position: relative;
padding: 1vw;
height: 100%;
width: 100%;
}
.snake:before {
width: 8vw;
height: 8vw;
content: '';
position: absolute;
display: block;
background-color: white;
animation: around linear 10s infinite;
transform: rotate(45deg);
z-index: 1
}
.snake.red:before {
background-color: red;
}
@keyframes around {
0% {
top: calc(-4vw - 1px);
left: calc(100% - 4vw + 1px);
}
25% {
top: calc(100% - 4vw + 1px);
left: calc(100% - 4vw + 1px);
}
50% {
top: calc(100% - 4vw + 1px);
left: calc(-4vw - 1px);
}
75% {
top: calc(-4vw - 1px);
left: calc(-4vw - 1px);
}
100% {
top: calc(-4vw - 1px);
left: calc(100% - 4vw + 1px);
}
}
老实说,我会坚持使用SVG。