Некоторое время я боролся с фиксированным позиционированием в iPad. Я знаю iScroll, и он не всегда работает (даже в их демонстрации). Я также знаю, что у Sencha есть исправление для этого, но я не мог Ctrl+ Fисходный код для этого исправления.
Я надеюсь, что у кого-то есть решение. Проблема в том, что фиксированные элементы не обновляются, когда пользователь перемещает вниз / вверх в мобильном Safari под управлением iOS.
Ответы:
Многие мобильные браузеры намеренно не поддерживают их
position:fixed;
на том основании, что фиксированные элементы могут мешать на маленьком экране.На сайте Quirksmode.org есть очень хорошее сообщение в блоге, объясняющее проблему: http://www.quirksmode.org/blog/archives/2010/12/the_fifth_posit.html
Также на этой странице представлена диаграмма совместимости, показывающая, какие мобильные браузеры поддерживают
position:fixed;
: http://www.quirksmode.org/m/css.html(но обратите внимание, что мир мобильных браузеров развивается очень быстро, поэтому такие таблицы могут не оставаться актуальными надолго!)
Обновление: как сообщается, iOS 5 и Android 4 имеют поддержку position: fixed.
Я сам протестировал iOS 5 сегодня в магазине Apple и могу подтвердить, что она работает с фиксированным положением. Однако есть проблемы с увеличением и панорамированием фиксированного элемента.
Я нашел эту таблицу совместимости гораздо более актуальной и полезной, чем таблица quirksmode: http://caniuse.com/#search=fixed
Он содержит актуальную информацию об Android, Opera (mini и mobile) и iOS.
источник
position:device-fixed
было бы излишним.position:fixed
должен просто работать в соответствии со спецификациями W3C.device-fixed
решение не было частью моего ответа. Это может быть, а может и не иметь заслуг в качестве предложения, но причиной ссылки было объяснение проблемы, а не предложенное им решение. В любом случае, с тех пор, как этот ответ был опубликован (как я уже сказал), многое изменилось, и многие новые устройства поддерживаютfixed
. Однако вам все еще нужно иметь дело со старыми устройствами, которые этого не делают.Фиксированное позиционирование не работает на iOS, как на компьютерах.
Представьте, что у вас есть лист бумаги (веб-страница) под увеличительным стеклом (окно просмотра). Если вы переместите увеличительное стекло и глаз, вы увидите другую часть страницы. Так работает iOS.
Теперь есть лист прозрачного пластика с надписью на нем, этот лист пластика остается неподвижным, несмотря ни на что (положение: фиксированные элементы). Таким образом, когда вы перемещаете увеличительное стекло, кажется, что неподвижный элемент движется.
В качестве альтернативы, вместо того, чтобы перемещать увеличительное стекло, вы перемещаете бумагу (веб-страницу), не двигая лист пластика и увеличительное стекло. В этом случае будет казаться, что слово на пластиковом листе останется неизменным, а остальная часть содержимого будет двигаться (потому что это действительно так). Это традиционный настольный браузер.
Итак, в iOS область просмотра перемещается, в традиционном браузере перемещается веб-страница. В обоих случаях фиксированные элементы остаются в реальности; хотя в iOS кажется, что фиксированные элементы движутся.
Способ обойти это - следовать нескольким последним абзацам в этой статье.
(в основном полностью отключите прокрутку, поместите содержимое в отдельный прокручиваемый div (см. синее поле в верхней части связанной статьи), а фиксированный элемент расположен абсолютно)
"position: fixed" теперь работает, как и следовало ожидать в iOS5.
источник
position: fixed работает на android / iphone для вертикальной прокрутки. Но вам нужно убедиться, что ваши метатеги полностью настроены. например
Кроме того, если вы планируете использовать ту же страницу на Android до 4.0, вам также необходимо установить верхнюю позицию, иначе по какой-то причине будет добавлен небольшой запас.
источник
user-scalable=0, minimum-scale=1.0, maximum-scale=1.0
может сделать страницу менее доступной для многих пользователей. Было бы полезно добавить предупреждение об этом в свой ответтеперь Apple поддерживает это
источник
background-size: cover
иfixed
проблемы на IPadoverflow
должно быть установлено наscroll
У меня была эта проблема в Safari (iOS 10.3.3) - браузер не перерисовывал, пока не сработало событие touchend. Неподвижные элементы не появлялись или были обрезаны.
Уловкой для меня было добавление transform: translate3d (0,0,0); к моему элементу фиксированной позиции.
РЕДАКТИРОВАТЬ - теперь я знаю, почему преобразование устраняет проблему: аппаратное ускорение. Добавление трехмерного преобразования запускает ускорение графического процессора, обеспечивая плавный переход. Подробнее об аппаратном ускорении читайте в этой статье: http://blog.teamtreehouse.com/increase-your-sites-performance-with-hardware-accelerated-css .
источник
fixed
, добавила,transform
и это было исправлено.Фиксированный нижний колонтитул (здесь с jQuery):
Надеюсь, поможет.
источник
Избегайте использования одного и того же блока с помощью transform: --- и position: fixed. Элемент останется в позиции: статический, если есть какое-либо преобразование.
источник
В итоге я использовал новый jQuery Mobile v1.1: http://jquerymobile.com/blog/2012/04/13/announcing-jquery-mobile-1-1-0/
источник
position:fixed
чтобы перед вашей прокручиваемой страницей появлялся «плавающий» элемент, вам просто нужно присвоить ему более высокоеz-index
значение, чтобы он оставался впереди.используя jquery, я могу это придумать. он не прокручивается плавно, но он помогает. вы можете прокрутить вниз, и фиксированный div появится вверху.
CSS
HTML
ЗАКАЗ
Наконец, мы хотим определить, будет ли ipod touch в альбомном или портретном режиме отображаться соответственно.
источник
Несмотря на то, что атрибут CSS
{position:fixed;}
кажется (в основном) работает на новых устройствах iOS, возможна ошибка устройства и откат к{position:relative;}
от времени и без причины или причины. Обычно очистка кеша помогает, пока что-то не произойдет и причуда не повторится снова.В частности, от самой Apple Подготовка вашего веб-контента для iPad :
Как это ни парадоксально, у устройств Android, похоже, нет этой проблемы. Также вполне возможно использовать
{position:absolute;}
при обращении к тегу body и не иметь никаких проблем.Я нашел первопричину этой причуды; что это событие прокрутки плохо воспроизводится при использовании вместе с тегами HTML или BODY. Иногда ему не нравится запускать событие, или вам придется дождаться завершения события прокрутки, чтобы получить событие. В частности, область просмотра перерисовывается в конце этого события, и фиксированные элементы могут быть перемещены в другое место в области просмотра.
Вот что я делаю: ( избегайте использования области просмотра и придерживайтесь DOM! )
По сути, это приведет к тому, что BODY будет иметь размер области просмотра и не прокручивается. Прокручиваемый DIV, вложенный внутрь, будет прокручиваться, как обычно, BODY (без эффекта поворота, поэтому прокрутка останавливается при касании). Фиксированный DIV остается фиксированным без помех.
В качестве примечания: высокое
z-index
значение фиксированного DIV важно, чтобы прокручиваемый DIV оставался позади него. Я обычно добавляю события изменения размера окна и прокрутки также для кроссбраузерности и совместимости с альтернативным разрешением экрана.Если ничего не помогает, приведенный выше код также будет работать с фиксированными и прокручиваемыми DIV, установленными в
{position:absolute;}
.источник
Простой способ решить эту проблему - просто ввести свойство transform для вашего элемента. и это будет исправлено. Удачного кодирования :-)
Также вы можете попробовать его способ, это тоже нормально.
источник
Это может быть применимо не ко всем сценариям, но я обнаружил, что
position: sticky
(то же самое сposition: fixed
) работает только на старых iPhone, когда контейнер для прокрутки не в теле, а внутри чего-то другого.Пример псевдо HTML:
Прикрепленный div будет липким в настольных браузерах, но с некоторыми устройствами, протестированными с помощью: Chromium: dev tools: эмуляция устройства: iPhone 6/7/8, а с Android 4 Firefox - нет.
Однако что будет работать, так это
источник
В моем случае это произошло потому, что фиксированный элемент отображался с помощью анимации. Как указано в этой ссылке :
источник
вот мое решение этого ...
CSS
HTML
Объяснение заключается в том, что фиксированная позиция для div будет держать div на заднем плане все время, затем мы растягиваем div, чтобы перейти во все углы браузера (при условии, что поле тела = 0), используя (left, right, top, bottom ) одновременно.
Убедитесь, что вы не используете ширину и высоту, так как это переопределит параметры вверху, слева, справа и снизу.
источник