【问题标题】:How to rotate svg in a 3d space with css如何使用 css 在 3d 空间中旋转 svg
【发布时间】:2021-08-06 23:24:06
【问题描述】:

我有一个svg,其中包含三个polygons,我正在尝试在3d 空间中水平旋转它们,基本上我正在尝试创建一个旋转动画,但由于某种原因它不起作用。 正如您在下面的代码中看到的那样,我有 3 polygonscls-1 cls-2cls-3 当我尝试旋转它们时,动画看起来很平,这是代码。

.svg-holder {
    height: 400px;
    width: 800px;
    perspective: 1000px;
}

.svg-holder svg {
    transform-style: preserve-3d;
}

.cls-1 {
    transform-style: preserve-3d;
    animation-name: rotate;
    animation-duration: 4s;
    animation-timing-function: linear;
    animation-iteration-count: infinite;
}

@keyframes rotate {
    from {
        transform: rotateY(0deg);
    }
    to {
        transform: rotateY(180deg);
    }
    
}
<div class="svg-holder">
      <svg viewBox="0 0 237 126">
        <defs>
          <style>
            .cls-1 {
              fill: #2743b7;
            }
            .cls-2 {
              fill: #42b6d1;
            }
            .cls-3 {
              fill: #17c648;
            }
          </style>
        </defs>
        <g id="Layer_2" data-name="Layer 2">
          <g id="Layer_1-2" data-name="Layer 1">
            <polygon class="cls-1" points="237 0 79 0 0 42 158 42 237 0" />
            <polygon class="cls-2" points="237 42 79 42 0 84 158 84 237 42" />
            <polygon class="cls-3" points="237 84 79 84 0 126 158 126 237 84" />
          </g>
        </g>
      </svg>
    </div>

【问题讨论】:

    标签: html css animation svg


    【解决方案1】:

    transform-origin: center center; 添加到.cls-1, .cls-2, .cls-3 会产生绕垂直轴旋转的效果:

    .svg-holder {
        height: 400px;
        width: 800px;
        perspective: 1000px;
    }
    
    .svg-holder svg {
        transform-style: preserve-3d;
    }
    
    .cls-1, .cls-2, .cls-3 {
        transform-style: preserve-3d;
        transform-origin: center center;
        animation-name: rotate;
        animation-duration: 4s;
        animation-timing-function: linear;
        animation-iteration-count: infinite;
    }
    
    @keyframes rotate {
        from {
            transform: rotateY(0deg);
        }
        to {
            transform: rotateY(360deg);
        }
        
    }
     <div class="svg-holder">
          <svg viewBox="0 0 237 126">
            <defs>
              <style>
                .cls-1 {
                  fill: #2743b7;
                }
                .cls-2 {
                  fill: #42b6d1;
                }
                .cls-3 {
                  fill: #17c648;
                }
              </style>
            </defs>
            <g id="Layer_2" data-name="Layer 2">
              <g id="Layer_1-2" data-name="Layer 1">
                <polygon class="cls-1" points="237 0 79 0 0 42 158 42 237 0" />
                <polygon class="cls-2" points="237 42 79 42 0 84 158 84 237 42" />
                <polygon class="cls-3" points="237 84 79 84 0 126 158 126 237 84" />
              </g>
            </g>
          </svg>
        </div>

    【讨论】:

    • 这似乎有效!但是你能再帮我解决一个问题吗?我已经尝试以交替方向旋转它们,通过为一个提供rotateY(360deg),为另一个提供rotateY(-360deg),但所有这些似乎都在同一个方向旋转,所以你能建议解决这个问题吗?
    猜你喜欢
    • 2014-01-26
    • 1970-01-01
    • 1970-01-01
    • 2019-09-02
    • 1970-01-01
    • 2021-07-31
    • 2020-11-06
    • 2014-08-10
    • 2019-07-07
    相关资源
    最近更新 更多