iPhoneがWebアプリの「選択」にズームインしないようにする


84

私はこのコードを持っています:

<select>
    <option value="c">Klassen</option>
    <option value="t">Docenten</option>
    <option value="r">Lokalen</option>
    <option value="s">Leerlingen</option>
</select>

iPhoneのフルスクリーンWebアプリで実行します。

このリストから何かを選択すると、iPhoneは-select要素にズームインします。そして、何かを選択した後、ズームアウトしません。

どうすればこれを防ぐことができますか?またはズームアウトしますか?

回答:


106

フォントサイズがしきい値よりも小さいため、ブラウザが領域をズームしようとしていることが原因である可能性があります。これは通常、iPhoneで発生します。

メタタグ属性「user-scalable = no」を指定すると、ユーザーは他の場所でズームできなくなります。問題はselect要素のみにあるため、cssで次を使用してみてください。このハックは元々jquerymobileで使用されています。

HTML:

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

CSS:

select{
font-size: 50px;
}

src:iPhoneで選択した後にズームを解除する


20
テキストが表示されている場合(私の場合のように)、ズームを有効にする前に16pxが最小であるように見えます。
マーロンクリエイティブ

5
より明確にするために、この行は自動スケーリングを防止します。– $('<meta>', {name: 'viewport',content: 'user-scalable=no'}).appendTo('head');
Abbas

11
いつからテキストはselect要素に隠されますか?「レイアウトの問題は発生しません」
Bill

1
@Billyつまり、font-sizeに50pxの値を指定すると、ドロップダウン以外のhtml要素では奇妙に見えます。これをレイアウトの問題と呼びました。
Sasi Dhar 2015年

1
しかし、あなたはacessibilityの問題やその他の理由でのユーザースケーラブルは以下の回答を参照できるようにする必要がある場合stackoverflow.com/questions/6483425/...
GOTA

52

user-scalable = noが必要なので、実際にはこの質問に対する決定的な答えがあります

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

4
実際には、width = device-width、initial-scale = 1.0、maximum-scale = 1.0を追加するだけで十分です。最大スケールでユーザーがスケーラブルにする必要はないと思います。
ダン・スマート

1
@DanSmart、少なくとも私の場合(そして何がそれを際立たせているのかわかりません)、最小/最大スケールは十分ではありませんでした-user-scalable = noを追加しても違いはありませんでした。
カローラ2013年

8
これは非常に手間のかかるアプローチのように感じます。user-scalable= noを注意して使用することをお勧めします。Dev.Operaから、「ズームを完全にオフにすることも可能ですが、ズームは多くの人が使用する重要なユーザー補助機能であることに注意してください。したがって、オフにするのは、次のような本当に必要な場合にのみ行う必要があります。特定の種類のゲームとアプリケーション。」
チャーリースタナード2015年

3
ユーザースケーラブルは、iOSの10のように無視される
nickdnk

1
フォントが16pxより大きい場合、入力のフォーカス時にブラウザがズームアウトすることがあります。私にとっては、を追加するだけminimum-scale=1で済みました。これにより、ユーザーがズームできるようになります。
マイクロス

33

これは、この問題に対処する私の場合にはうまくいくようでした:

@media screen and (-webkit-min-device-pixel-ratio: 0) {
select:focus, textarea:focus, input:focus {
        font-size: 16px;
    }
}

Christina ArasmoBeymerによってここに提案さました


2
私の場合、IOS7xの古いユーザースケーラブルでは不十分でした。上記のトリックは共有していただきありがとうございます。
着陸

26

テキストが16ピクセル未満に設定されている場合、iPhoneはフォームフィールドをわずかにズームします。モバイルフォームフィールドのテキストを16ピクセルに設定してから、デスクトップのサイズを上書きして戻すことをお勧めします。

ズームを無効にするという答えは、視力の弱いユーザーにとっては役に立たないかもしれませんが、それでも小さな携帯電話でズームしたい場合があります。

例:

# Mobile first
input, textarea, select {
  font-size: 16px;
}

# Tablet upwards
@media (min-width: 768px) {
  font-size: 14px;
}

それは良い!しかし、テキストが選択ボックスの幅全体にオーバーフローした場合はどうなりますか?この場合、私は何ができますか?
GOTA

開始オプションメッセージが適切であれば、それで十分です。オプションを選択すると、わずかに切り捨てられたとしても、それが何であったかを覚えている可能性があります。しかし、ええ、それが「Coを選択してください...」と言っている場合はもっと問題があります
martinedwards 2018

この答えは機能し、最も目立たない方法を提供するようです。ありがとう!
DeBraid

5

私はパーティーに少し遅れていますが、css操作だけでこの問題を解決するかなりきちんとした回避策を見つけました。私の場合、デザイン上の理由でフォントサイズを変更できず、ズームも無効にできませんでした。

テキストが16ピクセル未満に設定されている場合、iPhoneはフォームフィールドをわずかにズームするため、iPhoneをだましてフォントサイズを16ピクセルと見なし、それを自分のサイズに変換することができます。

たとえば、テキストが14pxの場合の例を見てみましょう。16pxよりも小さいため、ズームします。したがって、0.875に従ってスケールを変換できます。

次の例では、それに応じて他のプロパティを変換する方法を示すためにパディングを追加しました。

.no-zoom {
    font-size: 16px;
    transform-origin: top left;
    transform: scale(0.875);            //  14px / 16px
    padding: 4.57px;                    // 4px / 0.875
}

お役に立てば幸いです。


それは厄介ですが、巧妙なハックであり、私はハックが好きではありません...しかし、この場合、それはこのページの最良の答えであり、ズームを停止する必要があり、それでもデザインをそのままにしておきたい場合は代替手段がありません。どうもありがとう!:)
roNn23

2

これを試して:

function DisablePinchZoom() 
{
    $('meta[name=viewport]').attr("content", "");
    $('meta[name=viewport]').attr("content", "width=yourwidth, user-scalable=no");
}

function myFunction() 
{
    $('meta[name=viewport]').attr("content", "width=1047, user-scalable=yes");
}


<select id="cmbYo" onchange="javascript: myFunction();" onclick="javascript: DisablePinchZoom();">
</select>

DisablePinchZoomはonchangeの前に起動されるため、onchangeの起動時にズームが無効になります。onchange機能では、最後に初期状態に戻すことができます。

iPhone5Sでテスト済み


2

フォントサイズが16px未満の場合、iOSはページをズームして、より大きな入力フィールドを表示します。

いずれかのフィールドをクリックすると、ページがズームされます。クリックすると、16pxになり、デフォルト値に変更されます

以下のスニペットは私には問題なく機能し、モバイルデバイスを対象としています。

@media screen and (max-width: 767px) {
 select:active, input:active,textarea:active{
        font-size: 16px;
 }
}


1

すべての「選択」フォントサイズを16pxに設定します

select {font-size:16px; }


0

単独での行動については何もできないと思います。

試すことができることの1つは、ページがまったくズームしないようにすることです。これは、ページが電話用に設計されている場合に適しています。

<meta name="viewport" content="width=device-width" />

もう1つ試すことができるのは、一般的な「select」ステートメントの代わりにJavaScriptコンストラクトを使用することです。メニューを表示する非表示のdivを作成し、javascriptでクリックを処理します。

幸運を!


0

ここで答えたように:入力「テキスト」タグの自動ズームインを無効にする-iPhoneのSafari

ユーザーがピンチズームする機能を無効にすることなく、Safariがユーザー入力中にテキストフィールドを自動的にズームインしないようにすることができます。maximum-scale=1他の回答で提案されているユーザースケール属性を追加するだけですが、省略してください。

ズームすると「浮く」フォームがレイヤーにある場合は、これは価値のあるオプションです。これにより、重要なUI要素が画面から移動する可能性があります。

<meta name="viewport" content="width=device-width, initial-scale=1, maximum-scale=1">


0

このCSSを追加して、Iosのデフォルトのスタイルを無効にしてみてください。

-webkit-appearance: none;

これは、input [type = search]などの特別なスタイルを取得する他の要素でも機能します。


0

これについて数時間読んでいて、最良の解決策はここにあるこのjqueryです。これは、iOSSafariの「次のタブ」オプションにも役立ちます。ここにも入力がありますが、自由に削除または追加してください。基本的に、マウスダウンはフォーカスイベントの前に起動し、ブラウザをだまして16pxと考えさせます。さらに、フォーカスアウトは「次のタブ」機能でトリガーされ、プロセスを繰り返します。

$(function(){
    $('input, select').on("mousedown focusout", function(){
        $('input, select').css('font-size','16px');
    });
    $('input, select').on("focus", function(){
        $('input, select').css('font-size','');
    });
})
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.