获取类似SVG动画路径的CSS动画

时间:2015-09-17 10:24:01

标签: html css animation svg

是否可以使用仅使用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

1 个答案:

答案 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。