Подтвердить что ты не робот

Переход CSS не работает в Firefox при изменении позиции

Я нашел раздражающую ошибку. Я пытаюсь анимировать свойства CSS дочерних элементов, когда в то же время меняется положение родителя (в примере оно от фиксированного до абсолютного). Это работает без проблем в браузерах Webkit, но в Firefox (v. 17.0.1) нет анимированного перехода.

Пример jsFiddle: http://jsfiddle.net/chodorowicz/bc2YC/5/

Есть ли какое-либо решение, чтобы заставить его работать в FF?

ИЗМЕНИТЬ Это исправлено в Firefox 34 https://bugzilla.mozilla.org/show_bug.cgi?id=625289

CSS

#container {
    position:fixed; left:100px; top:100px;
}
#container.some_state_position {
    position:absolute;
}
.box {
    width:100px; height:100px;
    background:blue;
}

.some_state .box {
    background:red; width:50px; height:50px;
}

img, .box  {
    -webkit-transition:all 1.5s ease;
    -moz-transition:all 1.5s ease;
    -ms-transition:all 1.5s ease;
    transition:all 1.5s ease;
}
img {width:100%;}
.some_state .other_container img {
    width:50%;
}
4b9b3361

Ответ 1

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

$("#button2").on({
    click: function() {
        $("#container").toggleClass("some_state");

        setTimeout(function() {
            $("#container").toggleClass("some_state_position");
        }, 50);
    }
});

Появится для firefox toggleClass() немедленно запускается для обоих классов, вызывая некоторые проблемы с эффектами перехода. Установка таймаута дает jQuery достаточное время для обработки того, что ему нужно, чтобы сделать переходы, подобные тем, что были в Chrome, и т.д. Я установил тайм-аут в 50 мс, это, похоже, дает ему достаточно времени для обработки jQuery это нужно сделать. Идя ниже, чем я видел иногда, он терпит неудачу и делает то, что вы сейчас испытываете.