Saya sedang mengerjakan aplikasi web satu halaman, yang biasanya akan digunakan pada perangkat seluler. Salah satu fiturnya adalah mode peta, yang sementara mengambil alih seluruh jendela browser; skala jarak dan beberapa kontrol terpasang pada empat sudut peta. Berikut adalah screenshot kecil dari peta sehingga Anda dapat mengetahui apa yang saya bicarakan:
Peta diimplementasikan sebagai <div>
dengan position: fixed
dan keempat koordinat nol; Saya juga mengatur sementara <body>
untuk overflow: hidden
sementara peta terlihat untuk menangani kasus tampilan aplikasi yang mendasarinya digulir menjauh dari asal. Itu cukup untuk membuat peta berfungsi persis seperti yang saya inginkan di browser desktop. Peramban seluler juga mengharuskan saya memberikan tag meta viewport dengan sesuatu seperti "width=device-width,user-scalable=no"
untuk membuat area jendela yang terlihat persis sama dengan viewport.
Ini semua bekerja dengan indah beberapa tahun yang lalu ketika saya awalnya menulis aplikasi ini, tetapi di suatu tempat sepanjang iOS Safari berhenti menghormati salah satu opsi meta viewport yang melibatkan penskalaan - tampaknya terlalu banyak situs yang salah menerapkan tag, menghasilkan teks yang sangat kecil, namun tidak nyaman. Saat ini, jika Anda mengaktifkan peta di peramban ini, Anda akan mendapatkan tampilan yang sedikit diperbesar, yang memotong tombol-tombol di kanan dan bawah - dan Anda tidak dapat melakukan apa-apa, karena semua sentuhan ditafsirkan sebagai gerakan zoom / pan untuk peta, daripada pengguliran browser. Peta tidak terlalu berguna tanpa fitur yang diakses melalui tombol-tombol itu - dan tanpa tombol kanan atas, Anda bahkan tidak bisa menutup peta. Satu-satunya jalan keluar adalah memuat ulang halaman, yang dapat menyebabkan hilangnya data yang belum disimpan.
Saya pasti akan menambahkan penggunaan history.pushState
/ onpopstate
agar overlay peta berperilaku seperti halaman terpisah. Anda bisa keluar dari mode peta menggunakan tombol Kembali browser - tetapi itu tidak mengatasi hilangnya fungsionalitas karena tombol yang hilang.
Saya telah mempertimbangkan menggunakan .requestFullscreen()
untuk menerapkan hamparan peta, tetapi tidak didukung di mana-mana bahwa aplikasi akan dapat digunakan. Secara khusus, tampaknya tidak berfungsi sama sekali pada iPhone, dan pada iPad Anda mendapatkan bilah status dan tombol 'X' besar yang menumpangkan konten Anda - skala jarak saya kemungkinan tidak akan dapat dibaca lagi. Lagipula itu bukan apa yang sebenarnya saya inginkan - saya perlu jendela penuh , bukan layar penuh.
Bagaimana cara membuat tampilan jendela penuh bekerja pada browser modern? Semua informasi yang saya dapat temukan pada subjek berbicara tentang penggunaan tag meta viewport, tetapi seperti yang saya sebutkan tidak lagi berfungsi.
sumber
Jawaban:
Larutan
Atur tinggi div layar penuh
window.innerHeight
dengan JavaScript dan kemudian perbarui ukuran jendela.Masalah yang sama disini:
https://stackoverflow.com/a/37113430/8662476
Info lebih lanjut:
sumber
Anda perlu mengatur tinggi badan dan html menjadi 100%
sumber
Sudahkah Anda mencoba ini?
sumber
vw
pada lebar, bukanvh
...) Elemen apa yang Anda sarankan agar saya tambahkan ini? Aku mencoba di beberapa tempat (<html>
,<body>
, dan peta<div>
), tapi melihat tidak ada perbedaan.coba ini:
sumber
shrink-to-fit=yes
adalah default, dan Safari tidak lagi memperhatikan opsi penskalaan.Karena saya tidak dapat berkomentar, saya ingin menambahkan bahwa Anda harus memeriksa apakah tag tubuh Anda adalah ketinggian browser. Anda mungkin juga ingin memeriksa ini: Chrome / Safari tidak mengisi tinggi 100% induk fleksibel
sumber
Ini adalah solusi lama, dan mengatasi masalah yang terkait erat, tetapi tidak persis sama, jadi saya tidak yakin apakah itu berlaku: https://github.com/gajus/brim
Seharusnya solusi yang mirip dengan minimal-ui.
Inilah pertanyaan lain yang merujuk jawaban ini: iOS 8 menghapus properti viewport "minimal-ui", apakah ada solusi "soft fullscreen" lainnya?
Beri tahu saya jika ini membantu sama sekali.
sumber
Coba kode berikut untuk div
sumber
jika Anda menggunakan
position: fixed
cukup gunakan metode CSS standar yang telah ada selama bertahun-tahun.Ini hanya akan membuat ukuran auto div ke ukuran penuh dari viewport, dan menggunakan kepemilikan tetap terkunci di tempatnya tidak peduli berapa banyak mereka menggulir, Anda dapat menonaktifkan body scroll jika Anda perlu dengan
jadi jika Anda hanya menambahkan kelas noScroll ke tag html itu akan menonaktifkan gulir. maka ketika Anda ingin mengizinkan pengguliran lagi Anda bisa.
sumber
Anda bisa menerapkan ini menggunakan struktur dua lapisan untuk kontrol peta Anda dan lapisan peta Anda. Artinya Anda sebenarnya tidak memerlukan apa pun
javascript
untuk mengimplementasikan apa yang Anda inginkan (walaupun tidak ada contoh pengkodean yang diberikan dalam pertanyaan). Anda dapat memanipulasi viewport denganCSS
dan itulah arti sebenarnya darivw
danvh
untuk menjawab komentar Anda Bagaimana seharusnya 100vw / 100vh membantu? , dapat membantu karenav
singkatan viewport.Lihat cuplikan misalnya.
PS: layer peta disimulasikan oleh gambar yang diperbesar dengan scroll.
sumber