Не видя ваш код, трудно ответить. Но я думаю, что причина этого в том, что transform
перезаписывается в анимации.
Вот простой рабочий пример:
<div class="triangle"></div>
.triangle {
border: 20px transparent solid;
border-right-color: red;
display: inline-block;
animation-name: example;
animation-duration: 1s;
transform: rotate(45deg);
animation-fill-mode: forwards;
}
@keyframes example {
from {
transform: translate(0px, 0px) rotate(45deg);
}
to {
transform: translate(1000px, 0px) rotate(45deg);
}
}
[EDIT] Вот мои предложения после того, как автор поделился кодом.
По сути, вы объявляете transform
более одного раза для данного элемента. в CSS последнее вхождение отменяет все предыдущие вхождения. Чтобы решить эту проблему, вам нужно обойти это. Есть четыре способа сделать это:
- Конвертировать
<div class="triangle topleft green column7 row2"></div>
во что-то вроде
<div class="triangle-holder topleft column7 row2">
<div class="triangle green"></div>
</div>
Это позволяет вам иметь два разных преобразовывает два разных элемента, не перекрывая друг друга (как то, что происходит в исходном коде). transform: rotate()
применяется к .triangle
, а transform: translate()
применяется к .triangle-holder
Полностью избавьтесь от transform: rotate()
(а также от фонового изображения), используя границы (см. Пример выше). Это будет только работать для поворота на 90 градусов
Избавиться от transform: translate()
и использовать поле или верх / лево для позиционирования.
Явно анимируйте каждый треугольник, чтобы объединить ваши преобразования в одно преобразование.
Я бы рекомендовал второй вариант, так как он требует минимальных изменений в вашем коде, а AFAIK - браузер совместимый способ создания CSS треугольников.