Страницы

Поиск по вопросам

среда, 1 января 2020 г.

Анимация пульсирует не из центра, а с правого нижнего края

#css


Возможно, я сильно туплю, но почему у меня анимация происходит не по центру, а начинается
с правого нижнего края и заканчивается в центре? Я же прописал правило translate(-50%,
-50%).



@keyframes sk-pulseScaleOut {
    0% {
        transform: scale(0) translate(-50%, -50%);
   }
    100% {
        transform: scale(1) translate(-50%, -50%);
        opacity: 0;
   }
}
.sk-spinner-pulse {
    position: absolute;
    left: 50%;
    top: 50%;
    width: 60px;
    height: 60px;
    background-color: #ff9800;
    border-radius: 100%;
    animation: sk-pulseScaleOut 1s infinite ease-in-out;
}


Ответы

Ответ 1



Добавьте "обёртку" для элемента: @keyframes sk-pulseScaleOut { 0% { transform: scale(0); } 100% { transform: scale(1); opacity: 0; } } /*NEW*/ .wrapper { position: absolute; left: 50%; top: 50%; transform: translate(-50%, -50%); } .sk-spinner-pulse { width: 60px; height: 60px; background-color: #ff9800; border-radius: 100%; animation: sk-pulseScaleOut 1s infinite ease-in-out; }


Ответ 2



Я думаю тут проблема с translate, можно статично маргином отцентрировать в данном случае, и анимировать только scale. @keyframes sk-pulseScaleOut { 0% { transform: scale(0); } 100% { transform: scale(1); opacity: 0; } } .sk-spinner-pulse { position: absolute; left: 50%; top: 50%; width: 60px; height: 60px; margin: -30px; background-color: #ff9800; border-radius: 100%; animation: sk-pulseScaleOut 1s infinite ease-in-out; }
Либо указать transform-origin: @keyframes sk-pulseScaleOut { 0% { transform: scale(0) translate(-50%, -50%); } 100% { transform: scale(1) translate(-50%, -50%); opacity: 0; } } .sk-spinner-pulse { position: absolute; left: 50%; top: 50%; width: 60px; height: 60px; background-color: #ff9800; border-radius: 100%; transform-origin: left top; animation: sk-pulseScaleOut 1s infinite ease-in-out; }
И наконец локализация поведения - проблема в порядке трансформации - сначала translate, потом scale: @keyframes sk-pulseScaleOut { 0% { transform: translate(-50%, -50%) scale(0); } 100% { transform: translate(-50%, -50%) scale(1); opacity: 0; } } .sk-spinner-pulse { position: absolute; left: 50%; top: 50%; width: 60px; height: 60px; background-color: #ff9800; border-radius: 100%; animation: sk-pulseScaleOut 1s infinite ease-in-out; }
Здесь фишка в том, что фактический размер элемента не меняется при scale, но менятся для трансформации. То есть для transform размер элемента 0х0px, и он не сдвигается в центр, при этом фактический размер остается 60х60.

Комментариев нет:

Отправить комментарий