Mobil Safari'de görünüm alanı yakınlaştırmayı nasıl devre dışı bırakırsınız?


393

Bunların üçünü de boşuna denedim:

<meta name=”viewport” content=”width=device-width; initial-scale=1.0; maximum-scale=1.0; user-scalable=0;” />

<meta name=”viewport” content=”width=device-width; initial-scale=1.0; maximum-scale=1.0; user-scalable=false;” />

<meta name=”viewport” content=”width=device-width; initial-scale=1.0; maximum-scale=1.0; user-scalable=no;” />

her biri google arama veya SO arama tarafından önerilen bulduğum farklı değerlerdir, ancak ' user-scalable = X ' değerlerinin hiçbiri çalışmıyor gibi görünüyor

Ayrıca virgül yerine değerleri sınırlama virgül çalıştı, hayır şans. Sonra SADECE user-scalablemevcut değeri olan çalıştı , hala şans yok.


GÜNCELLEME

Bunu Apple'ın sitesinden aldım ve işe yarıyor:

<meta name="viewport" content="width=device-width, user-scalable=no" />

meta etiketi, bunları kullanan bir web sitesinden kopyaladığım için sorunun standart olmayan tırnaklar olduğu ortaya çıktı


6
Bir oyun yapıyorsanız, yakınlaştırmayı kontrol etmek muhtemelen geçerlidir. Bununla birlikte, hemen hemen tüm diğer durumlarda, kesinlikle önerilmez. Ne yazık ki birçok mobil geliştirici için standart uygulama haline geldi. Bir kullanıcı metni daha kolay okuyabilmek için yakınlaştırmak istiyorsa, vb.
23:15

72
Mobil web tabanlı bir uygulamada yakınlaştırmayı devre dışı bırakıyoruz. Yerel iOS uygulamalarını yakınlaştıramazsınız ve web uygulamamızda gerekli değildir. Siteniz veya uygulamanız mobil cihazlar için optimize edilmişse kullanıcılarınızın zum yapmasına gerek yoktur. Yakınlaştırmayı devre dışı bırakmak için her zaman kullanım örnekleri vardır. Her zaman böyle ya da böyle olmak zorunda değildir.
Bradley Flood

10
Evet, mobil cihazlar için optimize edilmiş bir sitedeki yakınlaştırmayı devre dışı bırakmanın kötü bir şey olduğu mantığını takip etmiyorum . Daha da kötüsü, ekran yine de yakınlaştırmanızı gerektirmeyen bir sitede yanlışlıkla yatay kaydırma ve yakınlaştırma girişi alıyor çünkü görünümün yanlışlıkla kaydırılması. Gerçekçi olarak, kullanıcılarınızın mobil cihazlar için optimize edilmiş sitenizdeki içeriği yakınlaştırması gerekiyorsa, sorun zoom'un değil tasarımdır.
Nathan Hornby

3
@NathanHornby: Yakınlaştırmayı devre dışı bırakma sorunu, kullanıcının tercihlerine saygı gösterilmemesidir. Farklı kullanıcılar farklı metin boyutlarını tercih ederler, iyi görme yeteneği olan genç kitleler daha fazla içerik görmeyi tercih edebilirken, zayıf görme yeteneği olan kitleler dev metin içermeyen hiçbir şeyi kullanamazlar. Diğer insanlar Parkinson'a sahiptir, ancak yine de iyi görme yeteneğine sahiptirler, bu nedenle ekstra büyük düğmeleri tercih ederler, ancak genel olarak büyük metinden faydalanmazlar.
Lie Ryan

4
@NathanHornby Tasarımcının mutlaka yanlış bir şey yaptığı anlamına gelmiyor. Bu, kullanıcının her ne sebeple olursa olsun, yakınlaştırmak istediği anlamına gelir. Sıkıştırma yakınlaştırma, tüm dokunmatik ekranlı telefonların standart bir özelliğidir. Böyle bir telefonun sahibi olan herhangi bir kullanıcı, telefonun nasıl kullanılacağını bilir. Bunun eski bir soru olduğunu biliyorum, ancak telefonumun işlevselliğini bozmakta ısrar eden tüm geliştiriciler tarafından sürekli hayal kırıklığına uğradım çünkü tasarımlarının daha iyi görünmesini sağladığını düşünüyorlar.
user1751825

Yanıtlar:


718

Kodunuz süslü çift tırnak olarak çift tırnak özelliği gösteriyor. Süslü alıntılar gerçek kaynak kodunuzda mevcutsa, sorun olduğunu tahmin ediyorum.

Bu, iOS 4.2'deki Mobil Safari'de benim için çalışıyor.

<meta name="viewport" content="width=device-width, initial-scale=1.0, maximum-scale=1.0, user-scalable=no" />

12
Bu süslü tırnak, fark etmeden etiketi bir web sitesinden kopyalamıştı, bunu işaret ettiğiniz için teşekkürler!
MetaGuru

5
Belki de burası uzun kuyruktadır, ancak bunun "üst seviye" sayfasında uygulanması gerektiğini belirtmek gerekebilir. Bu meta etiketi bir iframe'e uyguladıysanız, meta etiket en üst sayfaya da uygulanmadığı sürece çalışmaz.
founddrama

2
Neden hiç kimse fantezi alıntılar yaratan bir yazılım parçası oluşturmak benim ötesinde.
Traubenfuchs

3
@Traubenfuchs: Tipografi.
BoltClock

3
Bu oldukça eski bir cevap ve sorun kullanıcı geliyor herhangi bir kullanıcı için ölçeklenebilir eğer bu erişilebilirlik sorunlarına neden olacağını okudum. İOS 10'dan itibaren, kullanıcının isterse yakınlaştırma yapmasına izin verir, ancak giriş kutusunu başka türlü yakınlaştırmaz. Büyük yazı tipi boyutlarını ayarlamanıza da gerek yoktur.
David

161

İOS 10 çözümü arayan kullanıcılar için iOS 10 user-scaleable=noiçin Safari'de devre dışı bırakıldı. Bunun nedeni, Apple'ın kullanıcıların web sayfalarını yakınlaştırmalarına izin vererek erişilebilirliği artırmaya çalışmasıdır.

Sürüm notlarından :

Safari'deki web sitelerindeki erişilebilirliği artırmak için, bir web sitesi görünüm alanında kullanıcı tarafından ölçeklendirilebilir = no ayarlasa bile kullanıcılar yakınlaştırma / uzaklaştırma yapabilirler.

Anladığım kadarıyla şanssızız.


6
Apple tarafından ne korkunç bir karar. Bir sayıyı azaltmak / artırmak için "-" ve "+" düğmelerine sahip bir döndürücü kullanmak artık sayfayı iOS Safari'de sürekli olarak yakınlaştırır ve uzaklaştırır. Presler, yakınlaştırmak için çift dokunma olarak yorumlanıyor ve bunu devre dışı bırakmanın bir yolu yok. iOS Chrome mükemmel çalışıyor. Sinir bozucu.
Paul

5
Her ne kadar bu karardan mahrum kalsam da, bir kullanıcı olarak apple'dan gerçekten mutluyum, çünkü bu özelliği içeride küçük öğeler kullanan birçok web sitesinde zorlamak istedim.
Bishoy Hanna

10
dünya cehenneme gidecek
küçük minik adam

2
Oh tanrım, kim tahmin ederdi? Apple tarafından yapılan bir başka saçma seçim
Emil Pedersen

3
Erişilebilirlik ayarlarında yalnızca bir seçenek eklemek yerine herkesin erişilebilirlik "özelliğini" zorlamak için Apple'a bırakın ...
Lennholm

98

@mattis, iOS 10 Safari'nin kullanıcı tarafından ölçeklenebilir özellik ile yakınlaştırmak için çimdiklemeyi devre dışı bırakmanıza izin vermeyeceği doğrudur. Ancak, 'gesturestart' olayında preventDefault kullanarak devre dışı bırakmak için aldım. Bunu yalnızca iOS 10.0.2'deki Safari'de doğruladım.

document.addEventListener('gesturestart', function (e) {
    e.preventDefault();
});

8
İOS 10'da bunun işe yaradığını gördüm, ancak sayfayı kaydırıp hala kaydırırken kıstırma yakınlaştırma yaparsanız yakınlaştırmaya izin verir. Ardından, siz tekrar kaydırıncaya kadar kendinizi yeni yakınlaştırma düzeyinde sıkışmış görürsünüz. Dolayısıyla, sayfanızın gövdesi kaydırılamazsa bu iyi bir çözüm gibi görünmüyor. :(
Rand Scullard

1
Bir uyarı: Kullanıcı, ekrana zumlayabilecek / yakalayabilecek ve buna yakalanmayacak şekilde ekrana iki kez dokunabilir.
Stephen

1
Yine de bazen ekrana iki kez dokunarak yakınlaştırmaya izin verir. :(
Jarzka

4
"Çift dokunuş" un karşılığı gesturestartnedir? dblclick ?
lowtechsun

3
Yakınlaştırmanın çift dokunma özelliğini devre dışı bırakmak istiyorsanız başka bir not. Ayrıca, Mobil Safari destekler 'dokunmatik eylem: manipülasyon' (çift musluk olayları devre dışı bırakır 'temel destek', altına düştüğünde Belgelerine buradan. Developer.mozilla.org/en-US/docs/Web/CSS/touch-action
jeremypress

15

IPhone 10 kadar iOS için safari "viewport" bir çözüm değil, bu şekilde sevmiyorum, ama bu javascript kodunu kullandım ve bana yardımcı oldu

 document.addEventListener('touchmove', function(event) {
    event = event.originalEvent || event;
    if(event.scale > 1) {
      event.preventDefault();
    }
  }, false);

3
O olmalıevent.scale !== 1
aleclarson

@aleclarson event.scale> 1, koşul event.scale! == 1 içerir
Arthur Tsidkilov

@aleclarson Mobil Safari'de yakınlaştırmayı önlemek için yeterlidir, normalde görünüm alanı kullanmak zorunda olduğum için bu şekilde sevmediğimi yazdım, ancak IOS iphone 6 ve daha üstü üzerinde çalışmıyor (event.scale olduğunu düşünüyorum ! == 1 daha doğru olmalı, ancak tüm bunlar doğru değil, bir tür
hack'tir

@aleclarson Görünüşe göre! == Android 4.4'teki yerel tarayıcıyı bozuyor; event.scale tanımlanmamış.
James Pizzurro

3
@JamesPizzurro Evet, kullanabilirsinizevent.scale !== undefined && event.scale !== 1
aleclarson

11
user-scalable=0

Bu artık iOS 10'da çalışmıyor. Apple özelliği kaldırdı.

Brüt platform uygulaması yapmadığınız sürece şimdi iOS'ta yakınlaştırma web sitesini devre dışı bırakmanın bir yolu yoktur.


Böyle bir serseri ... Bunu neden kaldırdıklarına dair bir fikrin var mı?
Stephen Tetreault

3
@ smt, web deneyiminin uygulama mağazasındaki uygulama deneyimiyle rekabet etmesini istemiyorlar.
Marvin Danig

2
@marvindanig evet ... 99 $ ücret aldıkları için kolayca diğer platformlar için daha erişilebilir bir web sayfası uygulaması yapılabilecek bir uygulama üretebilirler. Ayrıca Apple, kullanıcıların + geliştiricilerin duvarlı bahçeden kaçınabileceği anlamına gelirse "web deneyimini" sevemez. Her şey Apple'ın gücü ve parası hakkında :(
humanityANDpeace

Aslında bunu daha yeni iOS sürümlerinde çalıştırmak mümkündür. Cevabımı bakınız: stackoverflow.com/a/62165035
Feross

7

Kafa etiketinize aşağıdakileri eklemeyi deneyin:

<meta name="viewport" content="width=device-width, initial-scale=1.0, 
minimum-scale=1.0, maximum-scale=1.0, user-scalable=no">

bunlara ek olarak

<meta name="HandheldFriendly" content="true">

Son olarak, bir stil özelliği olarak veya css dosyanıza webkit tabanlı Tarayıcılar için aşağıdaki metni ekleyin:

html {
    -webkit-text-size-adjust: none
}

Daha yeni iOS sürümlerinde çalışmaz
Feross

7

Aşağıdaki kodla iOS 12'de çalıştım:

if (/iPad|iPhone|iPod/.test(navigator.userAgent)) {
  window.document.addEventListener('touchmove', e => {
    if(e.scale !== 1) {
      e.preventDefault();
    }
  }, {passive: false});
}

İlk if ifadesiyle yalnızca iOS ortamlarında yürütülmesini sağlarım (Android'de yürütülürse kaydırma behivour kırılacaktır). Ayrıca,passive ayarlanmış seçeneğefalse .


İOS 12.3.1'imde çalışmıyor, işte test bağlantısı: https://output.jsbin.com/liqiraj
Jess

4

Bu IOS 10.3.2'de iyi çalışıyor

    document.addEventListener('touchmove', function(event) {
        event = event.originalEvent || event;
        if (event.scale !== 1) {
           event.preventDefault();
        }
    }, false);

teşekkür ederim @ arthur ve @aleclarson


iOS 13, false değerini {passive: false} olarak değiştirdi
wayofthefuture

4

HTML başlığına aşağıdakileri ekleyerek bu davranışı durdurmayı başardım. Masaüstü tarayıcılar fare tekerleğini kullanırken yakınlaştırmayı desteklediğinden bu, mobil cihazlarda çalışır. Masaüstü tarayıcılarda önemli bir şey değil, ancak bunu dikkate almak önemlidir.

<meta name="viewport" content="width=device-width, initial-scale=1.0, minimum-scale=1.0, maximum-scale=1.0, user-scalable=no" />

ve CSS stil sayfasına aşağıdaki kural

html {
	-webkit-text-size-adjust: none;
	touch-action: manipulation;
}


Daha yeni iOS sürümlerinde çalışmaz
Feross

3

bazen contentetiketteki diğer direktifler, Apple'ın sayfanızı nasıl düzenleyeceğinize dair en iyi tahmin / buluşsal yöntemini bozabilir, tutam yakınlaştırmayı devre dışı bırakmak için ihtiyacınız olan tek şey.

<meta name="viewport" content="user-scalable=no" />

Daha yeni iOS sürümlerinde çalışmaz
Feross

2

Safari 9.0 ve sonraki sürümlerde, aşağıda gösterildiği gibi görünüm alanı meta etiketinde sığdırmak için daralt özelliğini kullanabilirsiniz

<meta name="viewport" content="width=device-width, initial-scale=1.0, shrink-to-fit=no">

Daha yeni iOS sürümlerinde çalışmaz
Feross

0

Aptalca bir genişlik piksel olarak ölçülen bir sarıcı div vardı. Diğer tarayıcılar bununla başa çıkacak kadar zeki görünüyordu. Genişliği bir yüzde değerine dönüştürdüğümde, Safari mobil cihazında da iyi çalıştı. Çok sinir bozucu.

.page{width: 960px;}

için

.page{width:93.75%}

<div id="divPage" class="page">
</div>

0

CSS touch-actionözelliğini kullanmak en zarif çözümdür. İOS 13.5'te test edildi.

Sıkıştırma zum hareketlerini devre dışı bırakmak ve yakınlaştırmak için iki kez hafifçe vurmak için:

body {
  touch-action: pan-x pan-y;
}

Uygulamanızın kaydırmaya , yani kaydırmaya da ihtiyacı yoksa , bunu kullanın:

body {
  touch-action: none;
}

-3

WAI WCAG 2.0 AA erişilebilirlik gereksinimlerine uymak için hiçbir zaman yakınlaştırma yakınlaştırmayı devre dışı bırakmamalısınız . (WCAG 2.0: SC 1.4.4 Metin AA seviyesini yeniden boyutlandır). Bununla ilgili daha fazla bilgiyi buradan edinebilirsiniz: Mobil Erişilebilirlik: WCAG 2.0 ve Diğer W3C / WAI Kuralları Mobil Cihazlara Nasıl Uygulanır, 2,2 Yakınlaştırma / Büyütme


13
Bu bir cevap değil .. ve birçok müşteri henüz yakınlaştırmayı engellemek istiyor .. Bu yüzden bunu genel bir kural olarak kabul

9
Erişilebilirlik yakınlaştırma sayfanın (bu konu için hiçbir uygulama) sorumluluğu değildir. Erişilebilir bir yakınlaştırma aracı sağlamak işletim sisteminin sorumluluğundadır. Günümüzde her işletim sistemi, ekran yakınlaştırma olarak uygulanan böyle bir özellik sağlar ve erişilebilirlik için tasarlanmadığı için sayfanın yakınlaştırmasına engel olmamalıdır.
Bruno Finger

4
Bunun gibi şeyler için her zaman geçerli kullanım örnekleri vardır. Nedense, hemen hemen tüm web literatürü, web'in sadece blog yazmak için olduğunu varsayar. JavaScript'ler için geçerli kullanım örnekleri olduğu gibi eval(), yakınlaştırmayı devre dışı bırakmak için de vardır. Bir barkod tarandığında sayfanın yakınlaştırılmasını önlemek için bir Bluetooth tarayıcı ile birlikte kullanılan bir web uygulaması için kullanıyorum.
user128216

3
Erişilebilirlik önerilerinin amaçlarına tamamen katılıyorum, ancak yakınlaştırmanın istenmediği veya gerekli olmadığı veya kullanıcı deneyimini kırabileceği zamanlar olduğu konusunda hiçbir soru yok. Artı, bilirsiniz, müşteriler.
Chuck Le Butt

2
Bir html / javascript uygulamasında, bu yönergelerin geçerli olmadığını söyleyebilirim. Sonuçta, yerel bir uygulama yakınlaştırma ve uzaklaştırma yapmanıza izin verir mi?
Jörgen Sigvardsson

-5

Bu bir iphone vb üzerinde çalışıyor olmalıdır.

<meta name="viewport" content="width=device-width, initial-scale=1 initial-scale=1.0, maximum-scale=1.0, user-scalable=no">
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.