Pracuję nad jednostronicową aplikacją internetową, która najczęściej będzie używana na urządzeniach mobilnych. Jedną z jego funkcji jest tryb mapy, który tymczasowo przejmuje całe okno przeglądarki; skalę odległości i niektóre elementy sterujące są dołączone do czterech rogów mapy. Oto mały zrzut ekranu mapy, dzięki czemu możesz powiedzieć, o czym mówię:
Mapa jest realizowany jako <div>
ze position: fixed
i wszystkie cztery współrzędne zero; Ja również tymczasowo ustawić <body>
, aby overflow: hidden
podczas gdy mapa jest widoczna obsłużyć przypadek podstawowej aplikacji wyświetlaczu są przewijane od pochodzenia. To wystarczy, aby mapa działała dokładnie tak, jak chcę w przeglądarkach komputerowych. Przeglądarki mobilne również wymagały podania metatagu znacznika okienka z czymś takim "width=device-width,user-scalable=no"
, aby widoczny obszar okna dokładnie odpowiadał rzutni.
Wszystko to działało pięknie kilka lat temu, kiedy pierwotnie napisałem tę aplikację, ale gdzieś po prostu iOS Safari przestał honorować dowolne opcje meta rzutni obejmujące skalowanie - najwyraźniej zbyt wiele witryn źle zastosowało znacznik, co spowodowało, że tekst był nieczytelnie mały, ale nie do zniesienia. Obecnie, jeśli włączysz mapę w tej przeglądarce, prawdopodobnie zobaczysz nieco powiększony widok, który odcina te przyciski po prawej iu dołu - i nic nie możesz na to poradzić, ponieważ wszystkie dotknięcia są interpretowane jako gesty powiększania / przesuwania mapy zamiast przewijania przeglądarki. Mapa nie jest zbyt przydatna bez funkcji dostępnych za pomocą tych przycisków - i bez prawego górnego przycisku nie można nawet zamknąć mapy. Jedynym wyjściem jest ponowne załadowanie strony, co może spowodować utratę niezapisanych danych.
Na pewno dodam użycie history.pushState
/, onpopstate
aby nakładka mapy zachowywała się jak osobna strona. Możesz wyjść z trybu mapy za pomocą przycisku Wstecz przeglądarki - ale to nie rozwiązuje problemu utraty funkcjonalności z powodu braku przycisków.
Zastanawiałem się nad .requestFullscreen()
wdrożeniem nakładki mapy, ale nie wszędzie jest obsługiwane, że w przeciwnym razie aplikacja byłaby użyteczna. W szczególności najwyraźniej w ogóle nie działa na iPhone'ach, a na iPadzie dostajesz pasek stanu i ogromny przycisk „X” nakładający się na twoją treść - moja skala odległości prawdopodobnie już nie byłaby czytelna. W każdym razie nie jest to semantycznie to, czego naprawdę chcę - potrzebuję pełnego okna , a nie pełnego ekranu.
Jak uzyskać wyświetlanie w pełnym oknie w nowoczesnych przeglądarkach? Wszystkie informacje, które mogę znaleźć na ten temat, mówią o używaniu metatagu rzutni, ale jak już wspomniałem, to już nie działa.
źródło
Odpowiedzi:
Rozwiązanie
Ustaw wysokość div pełnego ekranu na
window.innerHeight
JavaScript, a następnie zaktualizuj go przy zmianie rozmiaru okna.Mam ten sam problem:
https://stackoverflow.com/a/37113430/8662476
Więcej informacji:
źródło
Musisz ustawić wysokość ciała i HTML na 100%
źródło
Próbowałeś tego?
źródło
vw
na myśli szerokość, a nievh
...) Do jakiego elementu sugerujesz, żebym to dodał? Próbowałem w kilku miejscach (<html>
,<body>
i na mapie<div>
), ale nie zauważyłem żadnych różnic.Spróbuj tego:
źródło
shrink-to-fit=yes
jest ustawieniem domyślnym, a Safari nie zwraca już uwagi na opcje skalowania.Ponieważ nie mogę komentować, chciałbym dodać, że powinieneś sprawdzić, czy znacznik body ma wysokość przeglądarki. Możesz również to sprawdzić: Chrome / Safari nie wypełnia 100% wysokości flex rodzica
źródło
To stare rozwiązanie, które rozwiązuje problem ściśle ze sobą powiązany, ale nie dokładnie taki sam, więc nie jestem pewien, czy dotyczy: https://github.com/gajus/brim
Ma to być rozwiązanie podobne do minimal-ui.
Oto kolejne pytanie, które odnosi się do tej odpowiedzi: iOS 8 usunął właściwość rzutni „minimal-ui”, czy istnieją inne rozwiązania „miękkiego pełnoekranowego”?
Daj mi znać, jeśli to w ogóle pomoże.
źródło
Wypróbuj następujący kod dla div
źródło
jeśli używasz,
position: fixed
po prostu użyj standardowej metody CSS, która istnieje od wielu lat.Spowoduje to po prostu automatyczne powiększenie div do pełnego rozmiaru rzutni, a używając opcji fix naprawiono, że jest zablokowany bez względu na to, jak dużo przewija, można wyłączyć przewijanie ciała, jeśli trzeba
więc jeśli dodasz klasę noScroll do tagu html, spowoduje to wyłączenie przewijania. wtedy, gdy chcesz ponownie zezwolić na przewijanie, możesz.
źródło
Możesz to zaimplementować, używając struktury dwuwarstwowej dla elementów sterujących mapy i warstwy mapy. Oznacza to, że tak naprawdę nie potrzebujesz żadnej
javascript
implementacji tego, co chcesz (chociaż w pytaniu nie podano żadnego przykładu kodowania). Można manipulować rzutnia zeCSS
i to jest rzeczywisty sensvw
ivh
aby odpowiedzieć na komentarz Jak 100vw / 100vh niby jest pomoc? , może pomóc, ponieważv
oznacza rzutnię.Zobacz na przykład fragment kodu.
PS: warstwa mapy jest symulowana przez obraz powiększany podczas przewijania.
źródło