Переполнение CSS и проблема абсолютного позиционирования в Android-браузере

У нас есть мобильное веб-приложение, построенное с использованием JQuery Mobile, PhoneGap и ASP.net MVC. Приложение предназначено для работы на устройствах iOS и Android независимо от браузеров. Мы протестировали приложение на устройствах, перечисленных ниже, и, похоже, они работают нормально без каких-либо проблем.

iOS 5 - iPad, iPhone.

Android 4.1.2 - Google Nexus 7, Samsung Galaxy S3, Samsung Galaxy Note 2, Samsung Galaxy Tab 2.

Android 4.0.3 - вкладка Asus Transformer

Но при тестировании в Android Stock browser Samsung Galaxy Note 800 с 4.1.2 мы столкнулись с очень странной проблемой. Элементы, помещенные в div (скажем, дочерний div) с атрибутом css ' переполнения: auto, не реагируют на какие-либо события касания, пока включена прокрутка. Главное здесь отметить, что родительский div, содержащий этот div, абсолютно позиционируется как position: abolute. После некоторого исследования через Интернет мы обнаружили, что сочетание атрибутов абсолютной позиции и переполнения может вызвать некоторые проблемы в браузере Android.

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

Ответы

Ответ 1

Вместо этого используйте overflow-x и/или overflow-y.

EG

overflow-y: scroll; /* allow vertical scrolling */
-webkit-overflow-scrolling: touch; /* optional momentum scrolling */

Кроме того, поскольку полосы прокрутки скрыты на сенсорных устройствах, вы можете использовать :scroll, а не :auto. Он будет выглядеть одинаково, но может не подвергаться тем же ошибкам.

Ответ 2

Я не знаю, почему это сработало, но добавив -webkit-backface-visibility: hidden; к вашему стилю исправит его

Ответ 3

Проблема с overflow: auto была/была известной проблемой в браузере Android. В 2009 году сообщалось о проблеме (см. Здесь). Я думал, что они решили это тем временем. Он был устаревшим. Но люди все еще жалуются, что это не сработает. Если это так, я подозреваю, что они больше не будут исправлять это, поскольку Chrome теперь стал стандартным браузером для Android.

Ответ 4

Вы можете использовать библиотеку javascript под названием "iScroll". Он работает с большинством устройств Android и не представляет сложности. Просто напишите var scrollDiv = new iScroll('divId'); ниже элемента div. Вот страница проекта: http://cubiq.org/iscroll-4

Ответ 5

Как насчет того, чтобы поместить элементы внутри абсолютно позиционированного контейнера в новый div и поместить его относительно?

<div class="absolutelyPositionedParent">
    <div class="relativelyPositionedElement"></div>
</div>

<style>.relativelyPositionedElement{position:relative;overflow:auto;}</style>