(Это вопрос, состоящий из нескольких частей, я сделаю все возможное, чтобы суммировать сценарий.)
В настоящее время мы создаем адаптивное веб-приложение (программа чтения новостей), которое позволяет пользователям перемещаться между содержимым с вкладками, а также осуществлять вертикальную прокрутку внутри каждого содержимого с вкладками.
Распространенным подходом к проблеме является наличие оболочки, div
которая заполняет область просмотра браузера, устанавливается overflow
в hidden
или auto
, а затем прокручивается горизонтально и / или вертикально внутри него.
Этот подход хорош, но имеет один главный недостаток: поскольку высота документа точно такая же, как в окне просмотра браузера, мобильный браузер не будет скрывать адресную строку / меню навигации .
Существует множество хаков и свойств окна просмотра, которые позволяют нам получить больше экранного пространства, но ни один из них не настолько эффективен, как minimal-ui
(представлен в iOS 7.1).
Новости пришли вчера , что IOS 8 beta4 были удалены minimal-ui
из Mobile Safari (смотрите раздел Webkit в Notes IOS Release 8 ), который оставил нам интересно:
Q1. Можно ли еще скрыть адресную строку в Mobile Safari?
Насколько нам известно, iOS 7 больше не реагирует на window.scrollTo
взлом, это говорит о том, что мы должны жить с меньшим пространством экрана, если мы не примем вертикальную компоновку или использование mobile-web-app-capable
.
Q2. Возможно ли все еще иметь подобное мягкое полноэкранное впечатление?
Под мягким полноэкранным режимом я действительно имею в виду, не используя mobile-web-app-capable
метатег.
Наше веб-приложение построено так, чтобы быть доступным, любая страница может быть добавлена в закладки или опубликована с помощью собственного меню браузера. Добавляя, mobile-web-app-capable
мы не позволяем пользователям вызывать такое меню (когда оно сохраняется на домашнем экране), которое сбивает с толку и противодействует пользователям.
minimal-ui
Раньше он был средним, скрывая меню по умолчанию, но оставляя его доступным одним касанием - хотя Apple, возможно, удалила его из-за других проблем с доступностью (таких как пользователи, не знающие, где нажать, чтобы активировать меню).
Q3. Полноэкранный режим стоит хлопот?
Может показаться, что полноэкранный API не появится в iOS в ближайшее время, но даже если это так, я не вижу, как меню будет оставаться доступным (то же самое относится и к Chrome на Android).
В этом случае, возможно, нам следует просто оставить мобильное сафари без изменений и учитывать высоту области просмотра (для iPhone 5+ это 460 = 568 - 108, где 108 включает в себя панель ОС, адресную строку и меню навигации; для iPhone 4 или старше 372).
Хотелось бы услышать некоторые альтернативы (помимо создания нативного приложения).
Ответы:
Свойство окна просмотра минимального пользовательского интерфейса больше не поддерживается в iOS 8. Однако само минимальное пользовательское интерфейс не исчезло. Пользователь может ввести минимальный пользовательский интерфейс жестом «touch-drag-down».
Существует несколько предварительных условий и препятствий для управления состоянием просмотра, например, чтобы минимальный пользовательский интерфейс работал, должно быть достаточно контента, чтобы пользователь мог прокручивать его; для сохранения минимального пользовательского интерфейса прокрутка окна должна быть смещена при загрузке страницы и после изменения ориентации. Тем не менее, нет никакого способа вычислить размеры минимального пользовательского интерфейса с помощью
screen
переменной, и, следовательно, нет способа сообщить, когда пользователь находится в минимальном пользовательском интерфейсе заранее.Эти наблюдения являются результатом исследований в рамках разработки Brim - view manager для iOS 8 . Конечная реализация работает следующим образом:
Конечный результат выглядит так:
Ради документации и в случае, если вы предпочитаете писать свою собственную реализацию, стоит отметить, что вы не можете использовать Scream для обнаружения, если устройство находится в минимальном пользовательском интерфейсе сразу после события ориентации изменения, потому что
window
измерения не отражают новую ориентацию до анимация вращения закончилась. Вы должны прикрепить слушателя к ориентации changeend событию.Крик и Ориентация изменения были разработаны в рамках этого проекта.
источник
Поскольку не существует программного способа имитации
minimal-ui
, мы придумали другой обходной путь, используяcalc()
известную высоту адресной строки iOS для нашего преимущества:На следующей демонстрационной странице ( также доступной в gist, там есть больше технических деталей ) пользователю будет предложено выполнить прокрутку, после чего будет запущен программный полноэкранный режим (скрыть адресную строку / меню), где заголовок и содержимое заполняют новый видовой экран.
источник
Просто попрощайтесь с minimal-ui (пока)
Это так,
minimal-ui
может быть как полезным, так и вредным, и я полагаю, что компромисс теперь имеет другой баланс в пользу более новых, более крупных iPhone.Я имел дело с этой проблемой, работая с моей средой js для приложений HTML5. После многих попыток решения, каждое из которых имело свои недостатки, я сдался, считая, что пространство, потерянное на iPhone раньше, чем 6. Учитывая ситуацию, я думаю, что единственное надежное и предсказуемое поведение - это предопределенное.
Короче говоря, я в конечном итоге предотвратить любую форму минимального пользовательского интерфейса , так что, по крайней мере, моя высота экрана всегда одинакова, и вы всегда знаете, какое реальное пространство у вас есть для вашего приложения.
С течением времени достаточно пользователей будет иметь больше места.
РЕДАКТИРОВАТЬ
Как я это делаю
Это немного упрощено, для демонстрации, но должно работать для вас. Предполагая, что у вас есть основной контейнер
Затем:
затем с помощью js я устанавливаю
#main
высоту в соответствии с доступной высотой окна. Это также помогает бороться с другими ошибками прокрутки, обнаруженными как в iOS, так и в Android. Это также означает, что вам нужно разобраться, как его обновить, просто отметьте это;Я блокирую чрезмерную прокрутку при достижении границ прокрутки. Это немного более глубоко в моем коде, но я думаю, что вы также можете следовать принципу этого ответа для базовой функциональности. Я думаю, что это может немного помешать, но сделает работу.
Посмотреть демо (на iPhone)
Как примечание: это приложение также можно добавить в закладки, так как оно использует внутреннюю маршрутизацию для хеширования адресов, но я также добавил подсказку пользователям iOS для добавления в дом. Я чувствую, что таким образом помогает лояльность и возвращение посетителей (и поэтому потерянное пространство возвращается).
источник
Самым простым способом, который я нашел, чтобы это исправить, было установить высоту элементов body и html равной 100,1% для любого запроса, где агент пользователя был iphone. Это работает только в ландшафтном режиме, но это все, что мне нужно.
Проверьте это на https://www.360jungle.com/virtual-tour/25
источник
Основная проблема здесь заключается в том, что iOS8-сафари не будет скрывать адресную строку при прокрутке вниз, если содержимое равно или меньше области просмотра.
Как вы уже узнали, добавление некоторого отступа внизу позволяет обойти эту проблему:
Вышеупомянутый css должен быть применен условно, например, с UA sniffing, добавляя
gt-ios8
класс к<html>
.источник
scrollIntoViewIfNeeded
, это нестандартное происхождениеscrollIntoView
( developer.mozilla.org/en-US/docs/Web/API/Element.scrollIntoView ). Как следует из названия, метод прокручивает элемент в представление.true
Параметр говорит, чтобы выровнять вид с верхом элемента. Это по сути должно помешать вам прокручивать. Реализация, однако, несовершенна.Я хочу комментировать / частично отвечать / делиться своими мыслями. Я использую технику overflow-y: scroll для большого моего будущего проекта. Использование этого имеет два главных преимущества.
а) Вы можете использовать ящик с кнопками действий в нижней части экрана; если документ прокручивается, а нижняя панель исчезает, нажатие кнопки, расположенной в нижней части экрана, сначала приводит к появлению нижней панели, а затем к нажатию. Кроме того, то, как эта штука работает, вызывает проблемы с модалами, у которых кнопки расположены в самом низу.
б) При использовании переполненного элемента, единственные вещи, которые перекрашиваются в случае значительных изменений CSS, это те, которые отображаются на экране. Это дало мне огромный прирост производительности при использовании javascript для изменения CSS нескольких элементов на лету. Например, если у вас есть список из 20 элементов, которые необходимо перекрасить, и только два из них отображаются на экране в переполненном элементе, перекрашиваются только те, в то время как остальные перекрашиваются при прокрутке. Без этого все 20 элементов перекрашиваются.
... конечно, это зависит от проекта, и если вам нужна какая-либо из функций, которые я упомянул. Google использует переполненные элементы для Gmail, чтобы использовать функции, которые я описал на а). Имо, это того стоит, даже учитывая небольшую высоту в старых iPhone (372px, как вы сказали).
источник
Это возможно, используя что-то вроде приведенного ниже примера, который я собрал с помощью работы из ( https://gist.github.com/bitinn/1700068a276fb29740a7 ), которая не совсем работала на iOS 11:
Вот модифицированный код, который работает на iOS 11.03, пожалуйста, прокомментируйте, работал ли он для вас.
Ключ добавляет некоторый размер к BODY, чтобы браузер мог прокручивать, например: height: calc (100% + 40px);
Полный образец ниже и ссылка для просмотра в вашем браузере (пожалуйста, проверьте!)
Полный пример ссылки здесь: https://repos.codehot.tech/misc/ios-webapp-example2.html
источник
Веб-приложение, работающее в полноэкранном режиме на iOS и Android, можно запустить в полноэкранном режиме, оно называется PWA, и после тяжелой работы это был единственный способ обойти эту проблему.
PWA открывают ряд интересных вариантов для развития, которые нельзя упускать. Я уже сделал пару, ознакомьтесь с этим Руководством для дизайнеров по государственным и частным тендерам (на испанском языке). А вот английское объяснение с сайта CosmicJS
источник
Я не занимался веб-дизайном для iOS, но, насколько я помню, в сеансах WWDC и в документации панель поиска в Mobile Safari и панели навигации по ОС теперь автоматически изменяют размеры и уменьшаются, чтобы показать больше вашего контента.
Вы можете проверить это в Safari на iPhone и заметить, что при прокрутке вниз, чтобы увидеть больше содержимого на странице, панель навигации / поиска автоматически скрывается.
Возможно, лучше оставить адресную строку / панель навигации без изменений и не создавать полноэкранный режим. Я не вижу, чтобы Apple делала это в ближайшее время. И самое большее, они не контролируют автоматически, когда адресная строка показывает / скрывает.
Конечно, вы теряете экранную недвижимость, особенно на iPhone 4 или 4S, но, похоже, нет альтернативы бета-версии 4.
источник
I haven't done web design for iOS
- если вы занимаетесь веб-дизайном, вы делаете это для любой платформы. Потому что Интернет есть на каждой платформе.