【问题标题】:Center align rotating SVG in Loader CSS在加载器 CSS 中居中对齐旋转 SVG
【发布时间】:2021-05-03 02:19:33
【问题描述】:

我正在尝试将 SVG 从 0 度设置为 360 度。但是,如果我使用 transform: rotate 属性,那么 svg 会在浏览器调整大小时失去其位置并且它不会居中对齐。我使用转换原点到 50%。但是 svg 失去了它的位置。

HTML:

<div id="hexagon-spinner">
  <Hexagon className="hexagon-loader" viewBox="0 0 65.103 75.174" />
</div>
#hexagon-spinner {
  position: fixed;
  width: 100%;
  left: 0;
  right: 0;
  top: 0;
  bottom: 0;
  background-color: rgba(255, 255, 255, 0.7);
  z-index: 9999;
}

.hexagon-loader {
  animation-name: spin;
  animation-duration: 0.8s;
  /* Things added */
  animation-iteration-count: infinite;
  transform-origin: -50% 50%;
  display: inline-block;
  position: absolute;
  top: 50%;
  left: 50%;
}

@-webkit-keyframes spin {
  0% {
    -webkit-transform: rotate(0deg);
  }
  100% {
    -webkit-transform: rotate(359deg);
  }
}

@keyframes spin {
  0% {
    transform: rotate(0deg);
  }
  100% {
    transform: rotate(359deg);
  }
}

【问题讨论】:

  • 也请分享html代码..
  • @MinalChauhan 用 html 更新问题

标签: html css svg


【解决方案1】:

首先,当它是100%时,你应该定义360 degrees,而不是359 degrees

  100% {
    transform: rotate(359deg); // ->> 360deg
  }

如何处理平均值,

@keyframes spin {
  0% {
    transform: rotate(0deg);
    transform-origin: -50% 50%;
  }
  100% {
    transform: rotate(360deg);
    transform-origin: -50% 50%;
  }
}

最后, 如果我们需要缩短代码(因为它默认以0deg开头),如果我们只输入参数100%是没有问题的。

@keyframes spin {
  100% {
    transform: rotate(360deg);
    transform-origin: -50% 50%;
  }
}

简单代码片段

@keyframes spin {
  100% {
    transform: rotate(360deg);
    transform-origin: -50% 50%;
  }
}

div {
  position: absolute;
  top: 50%;
  left: 50%;
  animation-name: spin;
  animation-duration: 0.8s;
  /* Things added */
  animation-iteration-count: infinite;
  transform-origin: -50% 50%;
}
&lt;div&gt;LOADING&lt;/div&gt;

#hexagon-spinner {
  position: fixed;
  width: 100%;
  left: 0;
  right: 0;
  top: 0;
  bottom: 0;
  background-color: rgba(255, 255, 255, 0.7);
  z-index: 9999;
  display: flex;
  align-items:center;
  justify-content: center;
}

.hexagon-loader {
  background-color: purple;
  height: 40px;
  width: 40px;
  
  animation-name: spin;
  animation-duration: 0.8s;
  /* Things added */
  animation-iteration-count: infinite;
  display: inline-block;
}

@-webkit-keyframes spin {
  0% {
    -webkit-transform: rotate(0deg);
  }
  100% {
    -webkit-transform: rotate(359deg);
  }
}

@keyframes spin {
  0% {
    transform: rotate(0deg);
  }
  100% {
    transform: rotate(359deg);
  }
}
<div id="hexagon-spinner">
  <div class="hexagon-loader"></div>
</div>

当我们用 translate 移动元素(使其居中)时,我们自然会扭曲其中心。因此它将无法正常工作。

我为此提出了一个解决方案。 (flexbox) 是使用。您将在下面看到一个示例。

注意:(不要忘记删除 Absolute 和 Transform Origin 功能)

【讨论】:

  • svg 正在失去它的位置。你可以在这里查看截图ibb.co/gydtt56
  • 现在我知道你是认真的。我正在添加一个新示例。
  • 前几天晚上我在使用 justify center 给它的孩子,现在我知道我在这里做错了什么。感谢您的帮助!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2018-04-24
  • 1970-01-01
  • 2012-07-02
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-07-27
相关资源
最近更新 更多