Saya membuat halaman HTML <input>
dengan tag type="text"
. Ketika saya mengkliknya menggunakan Safari di iPhone, halaman menjadi lebih besar (zoom otomatis). Adakah yang tahu cara menonaktifkan ini?
html
iphone
zoom
mobile-safari
html-input
Eduardo Montenegro
sumber
sumber
Jawaban:
Browser akan memperbesar jika ukuran font kurang dari
16px
dan ukuran font default untuk elemen formulir adalah11px
(setidaknya di Chrome dan Safari).Selain itu,
select
elemen harus memilikifocus
pseudo-class terpasang.Ini tidak perlu menggunakan semua di atas, Anda dapat hanya gaya elemen yang Anda butuhkan, misalnya: hanya
text
,number
, dantextarea
:Solusi alternatif untuk mewarisi elemen input dari gaya induk:
sumber
select, textarea, input[type="text"], input[type="password"], input[type="datetime"], input[type="datetime-local"], input[type="date"], input[type="month"], input[type="time"], input[type="week"], input[type="number"], input[type="email"], input[type="url"], input[type="search"], input[type="tel"], input[type="color"] { font-size: 16px; }
select:focus
. Sedang mengalami masalah yang sama juga.Anda dapat mencegah Safari memperbesar secara otomatis pada bidang teks selama input pengguna tanpa menonaktifkan kemampuan pengguna untuk mencubit zoom. Cukup tambahkan
maximum-scale=1
tetapi tinggalkan atribut skala pengguna yang disarankan dalam jawaban lain.Ini adalah opsi yang bermanfaat jika Anda memiliki formulir di lapisan yang "mengapung" di sekitar jika diperbesar, yang dapat menyebabkan elemen UI penting bergerak dari layar.
<meta name="viewport" content="width=device-width, initial-scale=1, maximum-scale=1">
sumber
Baru: iOS masih akan memperbesar, kecuali jika Anda menggunakan 16px pada input tanpa fokus.
Saya menambahkan latar belakang karena iOS tidak menambahkan latar belakang pada pilih.
sumber
@media screen and (-webkit-min-device-pixel-ratio:0) and (max-device-width:1024px)
untuk membatasi efek ke iPhone, tetapi jangan memodifikasi situs web saat dilihat di Chrome.@supports (-webkit-overflow-scrolling: touch)
, karena fitur css ini hanya ada di iOSJika situs web Anda dirancang dengan tepat untuk perangkat seluler, Anda dapat memutuskan untuk tidak mengizinkan penskalaan.
Ini menyelesaikan masalah yang akan 'mengambang' di laman atau formulir seluler Anda.
sumber
Singkatnya jawabannya adalah: setel ukuran font elemen formulir ke setidaknya 16px
sumber
font-size: 100%
nilai dan mengambil 16px yang diperlukan.sumber
1em
, atau100%
). Jika Anda mengatur ukuran font khusus, Anda dapat mengaturfont-size
dalam cuplikan Anda16px
untuk menghindari pembesaran otomatis.1em
juga1rem
solusi yang tepat karena keduanya bisa kurang dari16px
dan Safari membutuhkan setidaknya16px
untuk tidak memperbesar.Cara yang tepat untuk memperbaiki masalah ini adalah mengubah meta viewport ke:
sumber
Tidak ada cara bersih yang bisa saya temukan, tapi ini sebuah retas ...
1) Saya perhatikan bahwa peristiwa mouseover terjadi sebelum zoom, tetapi zoom terjadi sebelum mousedown atau acara fokus.
2) Anda dapat secara dinamis mengubah tag viewport META menggunakan javascript (lihat Mengaktifkan / menonaktifkan zoom pada iPhone safari dengan Javascript? )
Jadi, coba ini (ditunjukkan dalam jquery untuk kekompakan):
Ini jelas merupakan peretasan ... mungkin ada situasi di mana mouseover / down tidak selalu menangkap entri / keluar, tetapi itu bekerja dengan baik dalam pengujian saya dan merupakan awal yang solid.
sumber
Tambahkan user-scalable = 0 ke meta viewport sebagai berikut
Bekerja untuk saya :)
sumber
Saya baru-baru ini (hari ini: D) harus mengintegrasikan perilaku ini. Agar tidak memengaruhi bidang desain asli, termasuk kombo, saya memilih untuk menerapkan transformasi pada fokus bidang:
sumber
Seperti yang telah ditunjukkan oleh banyak jawaban lain, ini dapat dicapai dengan menambahkan
maximum-scale
keviewport
tag meta . Namun, ini memiliki konsekuensi negatif dengan menonaktifkan zoom pengguna di perangkat Android . ( Ini tidak menonaktifkan zoom pengguna pada perangkat iOS sejak v10 .)Kita dapat menggunakan JavaScript untuk menambahkan
maximum-scale
meta secara dinamisviewport
saat perangkat iOS. Ini mencapai yang terbaik dari kedua dunia: kami memungkinkan pengguna untuk memperbesar dan mencegah iOS memperbesar ke bidang teks pada fokus.Kode:
sumber
addMaximumScaleToMetaViewport
? Apakah hanya untuk alasan semantik?Retas Javascript yang berfungsi pada iOS 7. Ini didasarkan pada jawaban @dlo tetapi acara mouseover dan mouseout digantikan oleh touchstart dan touchend events. Pada dasarnya skrip ini menambahkan batas waktu setengah detik sebelum zoom diaktifkan kembali untuk mencegah zoom.
sumber
Ini bekerja untuk saya:
sumber
Saya menggunakan solusi Christina di atas, tetapi dengan sedikit modifikasi untuk bootstrap dan aturan lain untuk diterapkan pada komputer desktop. Ukuran font default Bootstrap adalah 14px yang menyebabkan zoom. Berikut ini mengubahnya menjadi 16px untuk "kontrol bentuk" di Bootstrap, mencegah zoom.
Dan kembali ke 14px untuk browser non-seluler.
Saya mencoba menggunakan .form-control: focus, yang membuatnya pada 14px kecuali pada fokus yang mengubahnya menjadi 16px dan itu tidak memperbaiki masalah zoom dengan iOS8. Paling tidak pada iPhone saya menggunakan iOS8, ukuran font harus 16px sebelum fokus agar iPhone tidak memperbesar halaman.
sumber
Saya melakukan ini, juga dengan jQuery:
Tentu saja, beberapa elemen lain di antarmuka mungkin harus diadaptasi jika
16px
ukuran font ini merusak desain.sumber
Setelah beberapa saat mencoba saya datang dengan solusi ini
Pada "mousedown" itu mengatur ukuran font input ke 16px. Ini akan mencegah pembesaran. Pada acara fokus itu mengubah ukuran font kembali ke nilai awal.
Tidak seperti solusi yang diposting sebelumnya, ini akan memungkinkan Anda mengatur ukuran font input ke apa pun yang Anda inginkan.
sumber
Setelah membaca hampir setiap baris di sini dan menguji berbagai solusi, ini, terima kasih kepada semua yang berbagi solusi mereka, apa yang saya hasilkan, uji dan bekerja untuk saya di iPhone 7 iOS 10.x:
Ini memiliki beberapa kontra, meskipun, terasa "lompatan" sebagai akibat dari perubahan ukuran font cepat terjadi antara "hover" ed dan "fokus" ed negara - dan dampak redraw pada kinerja
sumber
Terinspirasi oleh jawaban @jirikuchta, saya memecahkan masalah ini dengan menambahkan sedikit CSS ini:
Tidak ada JS, dan saya tidak melihat ada flash atau apa pun.
Perlu dicatat bahwa dengan
viewport
withmaximum-scale=1
juga berfungsi, tetapi tidak ketika halaman dimuat sebagai iframe, atau jika Anda memiliki beberapa skrip lain yang memodifikasiviewport
, dll.sumber
Elemen pseudo suka
:focus
tidak berfungsi seperti biasanya. Dari iOS 11, deklarasi reset sederhana dapat ditambahkan sebelum gaya utama Anda (asalkan Anda tidak menimpanya dengan ukuran font yang lebih kecil).Perlu disebutkan bahwa untuk pustaka CSS seperti Tachyons.css maka mudah untuk secara tidak sengaja menimpa ukuran font Anda.
Misalnya kelas:
f5
setara dengan:fontSize: 1rem
yang baik-baik saja jika Anda tetap menggunakan skala font tubuh di default.Namun: jika Anda memilih kelas ukuran font:
f6
ini akan sama denganfontSize: .875rem
tampilan kecil di atas. Dalam hal itu, Anda harus lebih spesifik tentang deklarasi reset Anda:sumber
Omong-omong, jika Anda menggunakan Bootstrap , Anda bisa menggunakan varian ini:
sumber
Saya harus "memperbaiki" perbesaran otomatis ke masalah kontrol formulir untuk situs web Universitas Belanda (yang menggunakan 15px dalam kontrol formulir). Saya datang dengan serangkaian persyaratan berikut:
Inilah yang saya kemukakan sejauh ini:
Beberapa catatan:
sumber
Alih-alih hanya mengatur ukuran font ke 16px, Anda dapat:
scale()
transformasi CSS dan margin negatif untuk mengecilkan bidang input ke ukuran yang benar.Misalnya, anggap bidang input Anda awalnya ditata dengan:
Jika Anda memperbesar bidang dengan meningkatkan semua dimensi sebesar 16/12 = 133,33%, kemudian mengurangi penggunaan sebesar 12/12
scale()
= 75%, bidang input akan memiliki ukuran visual yang benar (dan ukuran font), dan tidak akan ada pembesaran pada fokus.Karena
scale()
hanya memengaruhi ukuran visual, Anda juga perlu menambahkan margin negatif untuk mengurangi ukuran logis bidang.Dengan CSS ini:
bidang input akan memiliki ukuran font logis 16px sementara tampaknya memiliki teks 12px.
Saya memiliki posting blog tempat saya membahas sedikit lebih detail, dan memiliki contoh ini sebagai HTML yang dapat dilihat:
Tidak ada input zoom di Safari di iPhone, pixel sempurna
sumber
Bahkan dengan jawaban-jawaban ini, saya perlu tiga hari untuk mencari tahu apa yang sedang terjadi dan saya mungkin perlu solusinya lagi di masa depan.
Situasi saya sedikit berbeda dari yang dijelaskan.
Di tambang, saya memiliki beberapa teks yang dapat diedit di div di halaman. Ketika pengguna mengklik div BERBEDA, tombol macam, saya secara otomatis memilih beberapa teks di div yang dapat diedit (rentang pilihan yang sebelumnya telah disimpan dan dihapus), menjalankan perintah teks kaya perintah pada pilihan itu, dan membersihkannya lagi.
Ini memungkinkan saya untuk secara tak terlihat mengubah warna teks berdasarkan interaksi pengguna dengan div warna di tempat lain di halaman, sambil menjaga pemilihan yang biasanya disembunyikan untuk membiarkan mereka melihat warna dalam konteks yang tepat.
Nah, di Safari iPad, mengklik div warna mengakibatkan keyboard di layar muncul, dan tidak ada yang saya lakukan yang akan mencegahnya.
Saya akhirnya mengetahui bagaimana iPad melakukan ini.
Ini mendengarkan touchstart dan urutan touchend yang memicu pemilihan teks yang dapat diedit.
Ketika kombinasi itu terjadi, itu menunjukkan keyboard di layar.
Sebenarnya, ia melakukan dolly zoom di mana ia memperluas halaman yang mendasarinya saat memperbesar pada teks yang dapat diedit. Saya butuh satu hari hanya untuk memahami apa yang saya lihat.
Jadi solusi yang saya gunakan adalah mencegat touchstart dan touchend pada div warna tertentu. Dalam kedua penangan saya berhenti propagasi dan menggelegak dan mengembalikan false Tetapi dalam acara touchend saya memicu perilaku yang sama dengan klik yang dipicu.
Jadi, sebelumnya, Safari memicu apa yang saya pikir "touchstart", "mousedown", "touchend", "mouseup", "click", dan karena kode saya, pilihan teks, dalam urutan itu.
Urutan baru karena intersep hanyalah pemilihan teks. Segala sesuatu yang lain dicegat sebelum Safari dapat memprosesnya dan melakukan hal-hal keyboard-nya. Touchstart dan touchend intercepts mencegah peristiwa mouse untuk memicu juga, dan dalam konteks ini benar-benar baik-baik saja.
Saya tidak tahu cara yang lebih mudah untuk menggambarkan ini, tetapi saya pikir penting untuk memilikinya di sini karena saya menemukan utas ini dalam satu jam sejak pertama kali menemukan masalah ini.
Saya 98% yakin perbaikan yang sama akan bekerja dengan kotak input dan yang lainnya. Mencegah acara sentuh dan memprosesnya secara terpisah tanpa membiarkannya menyebar atau menggelembung, dan pertimbangkan untuk melakukan pilihan apa pun setelah batas waktu yang singkat hanya untuk memastikan Safari tidak mengenali urutan sebagai pemicu keyboard.
sumber
Saya melihat orang-orang di sini melakukan beberapa hal aneh dengan JavaScript atau fungsi viewport dan mematikan semua pembesaran perangkat secara manual. Itu seharusnya tidak menjadi solusi menurut saya. Menambahkan potongan CSS ini akan mematikan zoom otomatis di iOS tanpa mengubah ukuran font Anda ke nomor tetap seperti 16px.
Secara default, saya menggunakan ukuran font 93,8% (15px) pada kolom input dan dengan menambahkan potongan CSS saya ini tetap pada 93,8%. Tidak perlu mengubah ke 16px atau menjadikannya nomor tetap.
sumber
Menyetel ukuran font (untuk bidang input) sama dengan ukuran font tubuh, tampaknya yang mencegah peramban memperkecil atau memperbesar. Saya sarankan untuk menggunakan
font-size: 1rem
sebagai solusi yang lebih elegan.sumber
Karena zoom-in otomatis (tanpa zoom-out) masih bersifat anonim di iPhone, inilah JavaScript berdasarkan saran dlo yang bekerja dengan fokus / blur.
Pembesaran dinonaktifkan segera setelah input teks difusi dan diaktifkan kembali saat input dibiarkan.
Catatan: Beberapa pengguna mungkin tidak menghargai mengedit teks dalam input teks kecil! Oleh karena itu, saya pribadi lebih suka mengubah ukuran teks input saat mengedit (lihat kode di bawah).
Kode berikut akan mengubah ukuran teks input menjadi 16 piksel (dihitung, yaitu, dalam ukuran zoom saat ini) selama elemen memiliki fokus. Karena itu iPhone tidak akan secara otomatis memperbesar.
Catatan: Faktor zoom dihitung berdasarkan window.innerWidth dan tampilan iPhone dengan 320 piksel. Ini hanya akan berlaku untuk iPhone dalam mode potret.
sumber
Butuh beberapa saat untuk menemukannya tetapi inilah kode terbaik yang saya temukan ...... http://nerd.vasilis.nl/prevent-ios-from-zooming-onfocus/
sumber
Berdasarkan jawaban Stephen Walsh ... Kode ini berfungsi tanpa mengubah ukuran font input pada fokus (yang terlihat lumpuh), ditambah lagi masih berfungsi dengan FastClick , yang saya sarankan tambahkan ke semua situs seluler untuk membantu menghadirkan "tajam". Sesuaikan "lebar viewport" Anda agar sesuai dengan kebutuhan Anda.
sumber
Sebuah komentar untuk jawaban teratas tentang pengaturan ukuran font ke 16px bertanya bagaimana itu solusi, bagaimana jika Anda menginginkan font yang lebih besar / lebih kecil.
Saya tidak tahu tentang Anda semua, tetapi menggunakan px untuk ukuran font bukan cara terbaik, Anda harus menggunakan em.
Saya mengalami masalah ini di situs responsif saya di mana bidang teks saya lebih besar dari 16 piksel. Saya mengatur wadah formulir saya ke 2rem dan bidang input saya disetel ke 1.4em. Dalam kueri seluler saya, saya mengubah ukuran font html tergantung pada viewport. Karena html default adalah 10, bidang input saya menghitung hingga 28px di desktop
Untuk menghapus zoom-otomatis, saya harus mengubah input ke 1.6em. Ini meningkatkan ukuran font saya menjadi 32px. Hanya sedikit lebih tinggi dan hampir tidak terlihat. Di iPhone 4 & 5 saya mengubah ukuran font html saya menjadi 15px untuk potret dan kembali ke 10px untuk lanskap. Tampaknya sweet spot untuk ukuran piksel itu adalah 48px itulah sebabnya saya berubah dari 1.4em (42px) menjadi 1.6em (48px).
Hal yang perlu Anda lakukan adalah menemukan sweet spot pada ukuran font dan kemudian mengubahnya mundur dalam ukuran rem / em Anda.
sumber
Ini adalah retas yang saya gunakan di salah satu proyek saya:
Berakhir dengan gaya dan skala awal yang saya inginkan tetapi tidak ada zoom pada fokus.
sumber