Mobile Safariでビューポートのズームを無効にするにはどうすればよいですか?


393

私はこれら3つすべてを役に立たないように試みました:

<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;” />

それぞれがGoogle検索またはSO検索で推奨されている異なる値ですが、「user-scalable = X」値のいずれも機能していないようです

セミコロンの代わりに値をコンマで区切って試しましたが、うまくいきませんでした。それから私はuser-scalable価値があることだけを試しましたが、まだ運がありません。


更新

これをAppleのサイトから入手して動作します。

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

私はそれらを使用しているウェブサイトからメタタグをコピーしたので、問題は非標準的な引用であることがわかりました、おっと


6
ゲームを作成している場合は、おそらくズームの制御が有効です。ただし、他のほとんどすべての場合、これは強く推奨されません。残念ながら、これは多くのモバイル開発者にとって標準的な方法となっています。ユーザーがズームインしてテキストをより簡単に読むことができるようにしたい場合など、ユーザーがそうするのを防ぐのはあまり良くありません。
user2268788 2015年

72
モバイルWebベースのアプリケーションではズームを無効にします。ネイティブiOSアプリを拡大することはできません。また、Webアプリケーションでは必須ではありません。サイトまたはアプリがモバイル向けに最適化されている場合、ユーザーはズームする必要はありません。ズームを無効にするユースケースは常にあります。常にどちらか一方である必要はありません。
Bradley Flood

10
ええ、モバイル向けに最適化されたサイトでズームを無効にすることは悪いことだという論理の方針に従っていません。さらに悪いことに、画面が偶発的なパンとズーム入力を拾っているため、とにかくズームする必要がないサイトで、ビューポートが誤ってパンしてしまいます。現実的に、ユーザーがモバイル向けに最適化されたサイトのコンテンツにズームインする必要がある場合、問題はデザインであり、ズームの不足ではありません。
Nathan Hornby 2016年

3
@NathanHornby:ズームを無効にする問題は、ユーザーの好みを尊重できないことです。さまざまなユーザーがさまざまなテキストサイズを好み、視力が良い若い視聴者はより多くのコンテンツを見る方を好むかもしれませんが、視力が弱い視聴者は巨大なテキストがないものを使用できません。他の人々はパーキンソン病を患っていますが、それでも視力は良いので、非常に大きなボタンを好みますが、一般的に大きなテキストから利益を得ません。
ライライアン

4
@NathanHornbyデザイナーが何か間違ったことをしているわけではありません。それは単に、ユーザーが何らかの理由でズームインしたいということを意味します。ピンチズームは、すべてのタッチスクリーン電話の標準機能です。そのような電話を所有しているユーザーは誰でも、その使い方を知っています。私はそれが古い質問であることを知っていますが、それでも自分の電話の機能を壊そうと主張するすべての開発者から、デザインの見栄えがよくなると思っているので、いつもいらいらしています。
user1751825 2017

回答:


718

コードは、属性の二重引用符を派手な二重引用符として表示しています。派手な引用が実際のソースコードに存在する場合、それが問題であると思います。

これは、iOS 4.2のMobile Safariで動作します。

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

12
それは空想的な引用でした、私は気付かずにウェブサイトからタグをコピーしました、それを指摘してくれてありがとう!
MetaGuru

5
おそらくこれはここでの最後尾ですが、これは「トップレベル」ページで適用する必要があることを指摘する価値があるかもしれません。このメタタグをiframeに適用している場合、メタタグが最上位のページにも適用されていないと機能しません。
founddrama

2
派手な引用を作成するソフトウェアを誰もが作成する理由は、私を超えています。
Traubenfuchs 2015年

3
@Traubenfuchs:タイポグラフィ。
BoltClock

3
これはかなり古い回答であり、user-scalableをnoに設定した場合、これがアクセシビリティの問題の原因となるという問題に遭遇しました。iOS 10以降は正常に動作し、ユーザーは希望どおりにズームできますが、それ以外の場合は入力ボックスをズームできません。大きなフォントサイズを設定する必要もありません。
デビッド

161

iOS 10ソリューションを探している人々にとって、user-scaleable=noSafari for iOS 10 では無効になっています。理由は、Appleが人々がWebページをズームできるようにすることでアクセシビリティを改善しようとしているためです。

リリースノートから

SafariのWebサイトでのアクセシビリティを改善するために、Webサイトがビューポートでuser-scalable = noを設定している場合でも、ユーザーがピンチズームできるようになりました。

だから私が理解している限り、私たちは運が悪い。


6
アップル社はなんとひどい決断をしたのでしょう。「-」および「+」ボタン付きのスピナーを使用して数値を増減させると、iOS Safariでページが繰り返しズームインおよびズームアウトされるようになりました。プレスは、ズームするためにダブルタップとして解釈され、それを無効にする方法はありません。iOS Chromeは完全に動作しています。イライラする。
ポール

5
私はその決定にうんざりしていますが、内部で小さな要素を使用している多くのWebサイトでこの機能を強制したかったので、ユーザーとしてのAppleから本当に満足しています。
Bishoy Hanna 2016

10
世界は地獄に行くだろう
小さな小さな男

2
あら、誰だと思ったの?Appleによる別のばかげた選択
Emil Pedersen 2017

3
アクセシビリティ設定でオプションを追加するだけでなく、すべてのユーザーにアクセシビリティ「機能」を強制するのはAppleにお任せください...
Lennholm

98

@mattisは正しいです。iOS10 Safariでは、ピンチを無効にしてユーザースケーラブルな属性でズームすることはできません。ただし、「gesturestart」イベントでpreventDefaultの使用を無効にするようにしました。これはiOS 10.0.2のSafariでのみ確認しました。

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

8
iOS 10ではこれが機能することがわかりましたが、ページをスクロールし、スクロールしながらピンチズームすると、ズームできます。次に、もう一度スクロールするまで、新しいズームレベルで止まっています。したがって、ページの本文がスクロール可能でない限り、これは良い解決策のようには見えません。:(
Rand Scullard

1
注意点の1つ:ユーザーは画面をダブルタップできますが、画面は拡大または縮小できますが、これで捕捉されません。
スティーブン、

1
それでも、画面をダブルタップしてズームできる場合があります。:(
Jarzka

4
「ダブルタップ」とはgesturestart何ですか?dblclick
lowtechsun 2017年

3
もう1つの注意点は、ズームのダブルタップアスペクトを無効にする場合です。Mobile Safariは「touch-action:操作」もサポートしています(「基本サポート」に該当し、ダブルタップイベントを無効にします。ドキュメントはこちら:developer.mozilla.org/en-US/docs/Web/CSS/touch-action
jeremypress

15

iOS 10までのiphoneのサファリ「ビューポート」は解決策ではありません。この方法は好きではありませんが、このjavascriptコードを使用したため、役に立ちました。

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

3
それはする必要がありますevent.scale !== 1
aleclarson

@aleclarson event.scale> 1 include条件event.scale!== 1
Arthur Tsidkilov

@aleclarson Mobile Safariでのズームを防ぐにはそれで十分です、私はこの方法が好きではないと書きました、通常はビューポートを使用する必要があるためですが、IOS iphone 6以降では機能しません(あなたのevent.scaleと思います) !== 1の方が正しいはずですが、これはすべて正しくありません。これは一種のハッキングです)
Arthur Tsidkilov

@aleclarson!==を使用すると、Android 4.4のネイティブブラウザーが機能しなくなるようです。event.scaleは未定義です。
James Pizzurro 2017年

3
@JamesPizzurroええ、使用できますevent.scale !== undefined && event.scale !== 1
aleclarson '19 / 06/19

11
user-scalable=0

これはiOS 10では機能しなくなりました。Appleはこの機能を削除しました。

グロスプラットフォームアプリを作成しない限り、iOSでズームWebサイトを無効にできる方法はありません。


そんなつまらない…彼らがこれを削除した理由は何か?
Stephen Tetreault 2017

3
@smt彼らは、ウェブ体験がアプリストアでのアプリ体験と競合することを望んでいません。
Marvin Danig

2
@marvindanigはい...すべてのプラットフォームで他のWebページアプリケーションに簡単にアクセスできるアプリを簡単に作成できるアプリを作成するには99ドルの費用がかかります。また、ユーザーと開発者が壁に囲まれた庭を避けることができる場合、Appleは「ウェブ体験」を好きではありません。アップルの力とお金についてのすべて:(
humanityANDpeace

新しいiOSバージョンでこれを機能させることは実際に可能です。私の回答をご覧ください:stackoverflow.com/a/62165035
Feross

7

ヘッドタグに以下を追加してみてください:

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

さらに

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

最後に、スタイル属性として、またはcssファイルに、Webkitベースのブラウザ用に次のテキストを追加します。

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

新しいiOSバージョンでは機能しません
Feross

7

私はそれをiOS 12で次のコードで動作させました:

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

最初のifステートメントで、iOS環境でのみ実行されることを確認します(Androidで実行すると、スクロール動作が壊れます)。また、passiveオプションがに設定されていることに注意してくださいfalse


私のiOS 12.3.1では動作しません。ここにテストリンクがあります:https
Jess

4

これはIOS 10.3.2で正常に動作します

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

@arthurと@aleclarsonに感謝


iOS 13はfalseを{passive:false}に変更します
wayofthefuture

4

次のコードをHTMLヘッダーに追加することで、この動作を止めることができました。デスクトップブラウザはマウスホイールの使用時にズームをサポートするため、これはモバイルデバイスで機能します。これはデスクトップブラウザでは大した問題ではありませんが、これを考慮することが重要です。

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

CSSスタイルシートへの次のルール

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


新しいiOSバージョンでは機能しません
Feross

3

contentタグ内の他のディレクティブが、ページのレイアウト方法に関するAppleの最良の推測/発見的方法を台無しにする場合があります。ピンチズームを無効にするために必要なのは、すべてです。

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

新しいiOSバージョンでは機能しません
Feross

2

Safari 9.0以降では、以下に示すよう、ビューポートメタタグで縮小に合わせることができます

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

新しいiOSバージョンでは機能しません
Feross

0

ばかばかしいことに、ピクセル単位の幅のラッパーdivがありました。他のブラウザはこれを処理するのに十分にインテリジェントであるように見えました。幅をパーセント値に変換すると、Safariモバイルでも問題なく機能しました。とてもうるさい。

.page{width: 960px;}

.page{width:93.75%}

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

0

CSS touch-actionプロパティの使用は、最もエレガントなソリューションです。iOS 13.5でテスト済み。

ピンチズームジェスチャーを無効にし、ダブルタップしてズームするには:

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

アプリでもパン、つまりスクロールが必要ない場合は、次のようにします。

body {
  touch-action: none;
}

-3

WAI WCAG 2.0 AAアクセシビリティ要件に準拠するために、ピンチズームを無効にすることはできませ。(WCAG 2.0:SC 1.4.4テキストレベルAAのサイズ変更)。詳細については、こちらをご覧ください。 モバイルアクセシビリティ:WCAG 2.0およびその他のW3C / WAIガイドラインをモバイルに適用する方法、2.2ズーム/拡大


13
これが答えではありません...と私は、原則としてこれを取ることができないので、多くのクライアントはまだ..ブロックズームに頼む

9
アクセシビリティズームは、ページの責任ではありません(そのためのアプリでもありません)。アクセス可能なズームツールを提供するのは、オペレーティングシステムの責任です。現在、すべてのOSがこのような機能を提供しています。これは画面ズームとして適用され、ページのズーム自体に干渉することはありません。これはアクセシビリティを目的としていないためです。
Bruno Finger

4
このようなものには常に有効なユースケースがあります。何らかの理由で、ほとんどすべてのWeb資料は、Webはブログを作成するためだけのものであると想定しているようです。JavaScriptの有効な使用例eval()があるように、ズームを無効にするためにもあります。バーコードスキャン時のページズーミングを防ぐため、Bluetoothスキャナーと組み合わせて使用​​するwebアプリに使用しています。
user128216 2015

3
アクセシビリティの推奨事項の目的には完全に同意しますが、ズームが望ましくない、または必要とされない場合や、ユーザーエクスペリエンスが損なわれる場合があることは間違いありません。さらに、クライアントもそうです。
チャックルバット

2
html / javascriptアプリでは、これらのガイドラインは適用されないと思います。結局のところ、ネイティブアプリでズームインとズームアウトができるのでしょうか?
ヨルゲンSigvardsson

-5

これはiphoneなどで動作するはずです。

<meta name="viewport" content="width=device-width, initial-scale=1 initial-scale=1.0, maximum-scale=1.0, user-scalable=no">
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.