Как повернуть несколько SVG повторно использованных элементов вокруг одного источника? - PullRequest
0 голосов
/ 04 ноября 2018

Как я могу вращать 3 неправильных круга SVG вокруг одного и того же происхождения? Они написаны как путь и используются повторно. Я установил transform-origin в центр, что еще мне не хватает? Все они должны находиться в одном и том же месте и перекрываться в центре, как на этом изображении enter image description here

<svg width="900" height="500" viewBox="0 0 900 500">
  <defs>
     <path id="circle" d="m 43.467262,110.65774 c -2.81733,25.95379 9.663408,54.24201 33.479611,66.3315 12.768318,6.52194 29.493997,6.26667 40.854417,-3.07058 12.79824,-9.29014 25.48168,-19.76411 33.26937,-33.78136 4.54432,-8.49226 5.12542,-19.52979 -0.73083,-27.56368 C 142.27364,100.40343 128.56364,93.579328 115.25185,88.674523 98.350761,82.775856 78.939082,80.223234 62.116925,87.733369 52.940099,92.163321 45.975566,100.79364 43.467262,110.65774 Z" />
  </defs>

  <g class="group">
      <use class="circle circle--1" xlink:href="#circle" /> 
      <use class="circle circle--2" xlink:href="#circle" />
      <use class="circle circle--3" xlink:href="#circle" />
  </g>
</svg>


svg {
  width: 900px;
  path {
    stroke: #333;
    stroke-width: 3px;
    fill: transparent;
  }
}
g {
    position: relative;
    transform-origin: center center;
}
.circle {
  transform-origin: 50% 50%;
  perspective: 500px;
  &--1 {
    transform: rotateZ(60deg);
  }
  &--2 {
    transform: rotateZ(120deg);
  }
  &--3 {
    transform: rotateZ(180deg);
  }
}

https://codepen.io/anon/pen/mQdLvX

Ответы [ 2 ]

0 голосов
/ 04 ноября 2018

Когда отрисовка svg не центрирована на холсте, это становится немного сложнее. Я отрегулировал значения SVG viewBox, взгляните на следующий фрагмент:

svg {
  border: 1px solid red;
}

svg path {
  stroke: #333;
  stroke-width: 3px;
  fill: transparent;
}

.circle {
  transform-origin: 50% 50%;
}

.circle--1 {
  transform: rotateZ(90deg);
}

.circle--2 {
  transform: rotateZ(160deg);
}

.circle--3 {
  transform: rotateZ(270deg);
}
<svg width="900" height="500" viewBox="0 0 250 250">
  <defs>
     <path id="circle" d="m 43.467262,110.65774 c -2.81733,25.95379 9.663408,54.24201 33.479611,66.3315 12.768318,6.52194 29.493997,6.26667 40.854417,-3.07058 12.79824,-9.29014 25.48168,-19.76411 33.26937,-33.78136 4.54432,-8.49226 5.12542,-19.52979 -0.73083,-27.56368 C 142.27364,100.40343 128.56364,93.579328 115.25185,88.674523 98.350761,82.775856 78.939082,80.223234 62.116925,87.733369 52.940099,92.163321 45.975566,100.79364 43.467262,110.65774 Z" />
  </defs>
  <g class="group">
    <use class="circle circle--1" xlink:href="#circle" /> 
    <use class="circle circle--2" xlink:href="#circle" />
    <use class="circle circle--3" xlink:href="#circle" />
  </g>
</svg>
0 голосов
/ 04 ноября 2018

Вы хотите transform-box: fill-box; , т.е.

.circle {
  transform-box: fill-box;
  transform-origin: 50% 50%;
  perspective: 500px;
  &--1 {
    transform: rotateZ(60deg);
  }
  &--2 {
    transform: rotateZ(120deg);
  }
  &--3 {
    transform: rotateZ(180deg);
  }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...