CSS3 Переходы jQuery: переводы оси x дают разные результаты в разных браузерах для двух разных элементов

#jquery #css #css-transitions

#jquery #css #css-переходы

Вопрос:

Codepen: (Вот codepen для тех, кто хочет сразу перейти. Попробуйте это в Chrome и IE, чтобы увидеть разницу в результатах)

Я пытаюсь использовать css3 преобразования / переходы, потому что, ну, они намного более гибкие, чем эффекты jquery.

У меня есть мобильная версия сайта, на которой вверху есть фиксированная панель с логотипом и навигатором. При щелчке или прикосновении к навигатору слева появляется боковая панель навигации.

Вот тут-то и появляется css3. У меня была рабочая версия этой функциональности только с jQuery, но анимация была действительно прерывистой на телефонах. Я скачал плагин jQuery transit, который в основном интегрирует css3 переходы в jQuery, как если бы они были анимациями (но это не относится к делу — я не думаю, что проблема заключается здесь).

В версии css3, когда я перемещаю тело содержимого и фиксированный заголовок с помощью x: [некоторая сумма], преобразование отображается по-разному для разных браузеров. В каждом настольном браузере, за исключением IE10, фиксированный заголовок вылетает вдвое больше, чем должен, в то время как тело содержимого сдвигается вправо на нужную величину. На моем телефоне в Chrome заголовок вылетает вдвое больше, чем должен, хотя в браузере Android по умолчанию этого не происходит.

Дополнительная информация: я проверил с помощью chrome inspector, и как заголовок, так и тело содержимого получают одинаковое преобразование ([некоторое число] пикселей, 0). ЗАГОЛОВОК ВЛОЖЕН В ТЕЛО СОДЕРЖИМОГО. Я думаю, что в этом и заключается проблема. Некоторые браузеры перемещают заголовок вместе с содержимым, а затем снова интерпретируют преобразование заголовка. С другой стороны, поскольку позиция фиксирована, некоторые браузеры интерпретируют два преобразования независимо.

Мой вопрос: какие технические особенности вызывают это несоответствие и что можно сделать, чтобы получить согласованные результаты во всех современных браузерах?

Codepen: (Как я уже сказал, в Chrome это работает не так, как ожидалось, но если вы попробуете IE, это сработает)

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

1. Это поможет, если вы разместите ссылку на скрипку и некоторый код, чтобы мы могли видеть, что вы делаете.

2. Извините, я был в процессе создания тестового файла. Я добавил это в конце своего поста ^^. Загрузите codepen в IE и Chrome, чтобы понять, что я имею в виду.

Ответ №1:

Причиной этого является то, что navbar является дочерним элементом #bod элемента, при #bod перемещении navbar также перемещается вместе с ним. Вы также применили другой переход к панели навигации, который перемещает ее во второй раз. Различная обработка браузерами вызвана использованием перехода с «фиксированным» значением свойства. Более простым и применимым решением является использование метода toggleClass() #bod и достижение желаемого с меньшим количеством кода. Вот codepen . Добавление Css:

 #bod {
    transition: margin .5s ease-in-out;
}
#bod.menu-open {
    margin-left: 30%;
}
  

и более простой js:

 $("#toggle").on("touchstart mousedown", function (event) {
    event.stopImmediatePropagation();
    event.preventDefault();
    $('#bod').toggleClass('menu-open');
});