Круги CSS в анимации

Я нарисовал круг в CSS. Я попытался поиграть с кодом, чтобы исправить эту проблему, но безрезультатно. У меня есть 2 основных вопроса:

  • В Chrome: Круги дрожат при вращении

  • В Firefox: Появляется хвостовая точка, когда круг оживляется круговыми движениями.

Это стиль CSS, который я использую:

.followers_arc_outer{
    position:absolute;
    width:300px;
    height:300px;
    border-radius:100%;
    border:2px solid;
}
.followers_arc_start {
    border-color:transparent #ecd201 #ecd201 #ecd201;
    -webkit-transform: rotate(45deg);
    -moz-transform: rotate(45deg);
    -ms-transform: rotate(45deg);
    -o-transform: rotate(45deg);
    transform: rotate(45deg);
}
.followers_arc_inner{
    position:absolute;
    top:18px;
    left: 18px;
    width: 280px;
    height:280px;
    border-radius:100%;
    border:2px solid;
    border-color:transparent #ecd201 #ecd201 #ecd201;
}
.o_circle {
    -webkit-animation: rotation 2s infinite linear;
    animation: rotation 2s infinite linear;
}
@-webkit-keyframes rotation{
    from {-webkit-transform: rotate(0deg);transform: rotate(0deg);}
    to   {-webkit-transform: rotate(359deg);transform: rotate(359deg);}
}@keyframes rotation{
    from {-webkit-transform: rotate(0deg);transform: rotate(0deg);}
    to   {-webkit-transform: rotate(359deg);transform: rotate(359deg);}
}
.i_circle {
    -webkit-animation: rotation2 2s infinite linear;
   animation: rotation2 2s infinite linear;
}
@-webkit-keyframes rotation2 {
    from {-webkit-transform: rotate(359deg);transform: rotate(359deg);}
    to   {-webkit-transform: rotate(0deg);transform: rotate(0deg);}
}@keyframes rotation2 {
    from {-webkit-transform: rotate(359deg);transform: rotate(359deg);}
    to   {-webkit-transform: rotate(0deg);transform: rotate(0deg);}
}
<div class="followers_arc_outer followers_arc_start o_circle"></div>
    				<div class="followers_arc_inner followers_arc_start i_circle"></div>

Ответы

Ответ 1

Если ваши круги большие, браузеру потребуется время, чтобы их отобразить. И в то же время, когда вы пытаетесь повернуть и оживить их, браузеру будет сложно сделать это плавно с графикой процессора (который браузер использует по умолчанию).

Но вы можете использовать свой графический процессор в своем браузере, используя некоторые аппаратные ускоренные CSS. Это повысит производительность ваших анимаций. Вот код, который вы можете применить к своим кругам, чтобы сделать их более гладкими.

  -webkit-transform: translate3d(0,0,0);
  -moz-transform: translate3d(0,0,0);
  -ms-transform: translate3d(0,0,0);
  -o-transform: translate3d(0,0,0);
   transform: translate3d(0,0,0);

или вы можете использовать это ниже одного... оба будут работать.

   -webkit-transform: translateZ(0);
   -moz-transform: translateZ(0);
   -ms-transform: translateZ(0);
   -o-transform: translateZ(0);
   transform: translateZ(0);

Если вы все еще видите какое-то странное отставание или что-то в хроме или сафари, вам также придется добавить этот код ниже.

-webkit-backface-visibility: hidden;
-moz-backface-visibility: hidden;
-ms-backface-visibility: hidden;
backface-visibility: hidden;

-webkit-perspective: 1000;
-moz-perspective: 1000;
-ms-perspective: 1000;
perspective: 1000;

Надеюсь, что это поможет.

Ответ 3

Я думаю, что это связано с сглаживанием и округлением. Я перешел на задний план до простого черного и заставил анимацию остановиться после одного раунда. Когда круги все еще видны, вы можете видеть, что сглаживание делает некоторые части кругов менее прочными, особенно когда вы уменьшаете масштаб. Я не вижу тряску или хвост.

Ответ 4

Любой случай дрожит Я проверил код в Chrome, Mozilla, Opera и Safari (даже работает 5.17)

Возможно, вы используете плохое разрешение или проблему с некоторыми графическими картами.

Ответ 5

Нет проблем здесь автономно. (Chrome, Firefox, Safari)

Если, вы видите проблему здесь автономной; это может быть связано с настройками машины/аппаратного обеспечения или браузера.

Но это, вероятно, какой-то другой код, который у вас есть в вашем приложении конфликтующий, с этим кодом, вызывающим тряску.

Ответ 6

Это происходит из-за сглаживания, и вы можете решить его, сглаживая границу. Вы можете использовать box-shadow с вложенным свойством вместо цвета с твердым свойством, чтобы предотвратить его:

CSS

.followers_arc_outer {
    position:absolute;
    width:300px;
    height:300px;
    border-radius:100%;
    box-shadow: 2px 0px 2px 0px #ecd201 inset;
}

.followers_arc_inner {
    position:absolute;
    top:18px;
    left: 18px;
    width: 280px;
    height:280px;
    border-radius:100%;
    box-shadow: 2px 0px 2px 0px #ecd201 inset;
}

видит скрипку, чтобы увидеть, как она работает: http://jsfiddle.net/heartagramir/xdmuvu9s/

Ответ 7

Чтобы сделать преобразования более плавными и не выглядеть суровыми или оборванными, вы можете reset translate3d до нуля:

.transform {
    -moz-transform: rotate(-4.7deg) translate3d(0, 0, 0);
    -ms-transform: rotate(-4.7deg) translate3d(0, 0, 0);
    -o-transform: rotate(-4.7deg) translate3d(0, 0, 0);
    -webkit-transform: rotate(-4.7deg) translate3d(0, 0, 0);
    transform: rotate(-4.7deg) translate3d(0, 0, 0);
}

Я бы предложил добавить translate3d (0, 0, 0) всякий раз, когда вы используете transform