Як вимкнути масштабування вікна перегляду на мобільному Safari?


393

Я спробував усі ці три безрезультатно:

<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 пошуком, але жодне із значень " масштабування користувача" = X ", здається, не працює

Я також спробував розставити знаки через крапку з комою, не пощастило. Тоді я спробував ТОЛЬКО мати user-scalableзначення присутнє, все ще не пощастило.


ОНОВЛЕННЯ

Отримав це з сайту Apple, і він працює:

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

виявляється, що проблема полягала в нестандартних цитатах, оскільки я скопіював метатег з веб-сайту, який їх використовує, whoops


6
Якщо ви робите гру, можливо, контроль масштабування є дійсним. Однак майже у всіх інших випадках це слід сильно не рекомендувати. На жаль, це стало стандартною практикою для багатьох мобільних розробників. Якщо користувач хоче збільшити масштаб, щоб легше читати текст і т. Д. Заважати їм робити це не дуже приємно.
користувач2268788

72
Ми вимикаємо масштабування на мобільному веб-додатку. Ви не можете збільшувати масштабність програм Native iOS, і це не потрібно в нашій веб-програмі. Якщо ваш веб-сайт або додаток оптимізовано для мобільних пристроїв, вашим користувачам не потрібно буде збільшувати масштаб. Завжди є випадки використання для відключення масштабування. Це не завжди повинно бути так чи інакше.
Бредлі Флуд

10
Так, я не дотримуюся принципу логіки, що відключення масштабування на оптимізованому для мобільного сайту місці - це погано . Що ще гірше - випадкове панорамування вікна перегляду, оскільки на екрані відбувається випадкове панорамування та збільшення масштабу даних на сайті, який не вимагає збільшення масштабу в будь-якому випадку. Реально, якщо ваші користувачі потребують збільшення розміру вмісту на вашому веб-сайті, оптимізованому для мобільних пристроїв, проблема полягає в дизайні, а не в недостатньому масштабі.
Натан Хорнбі

3
@NathanHornby: Проблема вимкнення масштабування - це недотримання поваг користувача. Різні користувачі віддають перевагу різному розміру тексту, молодша аудиторія з хорошим зором може вважати за краще бачити більше вмісту, тоді як аудиторія із слабким зором не може використовувати те, що не має гігантського тексту. Інші люди мають Паркінсони, але все ще мають хороший зір, тому вони віддають перевагу надзвичайно великим кнопкам, але загалом не користуються великим текстом.
Лежи Райан

4
@NathanHornby Це не означає, що дизайнер обов'язково зробив щось не так. Це просто означає, що користувач з будь-якої причини хоче збільшити масштаб. Пінч-зум - це стандартна функція всіх телефонів із сенсорним екраном. Будь-який користувач, який володіє таким телефоном, знає, як ним користуватися. Я знаю, що це давнє запитання, але я все ще постійно переживаю розробників-ноу-хау, які наполягають на порушенні функціональності мого телефону, тому що вони думають, що це робить їх дизайн виглядати краще.
користувач1751825

Відповіді:


718

Ваш код відображає подвійні лапки атрибутів як фантастичні подвійні лапки. Якщо модні котирування є у вашому фактичному вихідному коді, я б здогадався, що це проблема.

Це працює для мене на мобільному Safari в iOS 4.2.

<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

3
@Traubenfuchs: Типографія.
BoltClock

3
Це досить стара відповідь, і я підійшов до проблеми, яку я прочитав, що якщо встановити значення "масштабування користувача", це не спричинить проблеми з доступністю. Як і в iOS 10, він працює чудово, дозволяючи користувачеві збільшувати його за бажанням, але не збільшувати поле введення в іншому випадку. Не потрібно також встановлювати великі розміри шрифту.
Девід

161

Для людей, які шукають рішення для iOS 10, user-scaleable=noвін відключений у Safari для iOS 10. Причина полягає в тому, що Apple намагається покращити доступність, дозволяючи людям збільшувати масштаб веб-сторінок.

З приміток до випуску :

Щоб покращити доступність веб-сайтів у Safari, користувачі тепер можуть скористатися масштабуванням, навіть коли веб-сайт встановлює користувацький масштабування = немає у вікні перегляду.

Наскільки я розумію, нам не пощастило.


6
Яке жахливе рішення Apple. Використовуючи спінер із кнопками "-" та "+" для зменшення / збільшення числа, тепер неодноразово збільшує та зменшує сторінку на iOS Safari. Преси інтерпретуються як подвійне торкання для збільшення, не вимикаючи цього способу. iOS Chrome працює бездоганно. Розчарування.
Пол

5
Хоча я відвернувся від цього рішення, але я дуже радий яблуку як користувачеві, оскільки хотів застосувати цю функцію на багатьох веб-сайтах, які всередині використовували невеликі елементи.
Бішо Ханна

10

2
О, єси, хто б здогадався? Ще один смішний вибір, який зробив Apple
Еміль Педерсен

3
Залиште це Apple, щоб змусити "функцію" доступності для всіх, а не просто додавати для неї опцію в налаштуваннях Доступності ...
Леннгольм,

98

@mattis вірно, що iOS 10 Safari не дозволить вам відключити прищіпка для збільшення масштабу за допомогою атрибута, що масштабується користувачем. Однак я отримав це для відключення використання prevenDefault у події 'gesturestart'. Я перевірив це лише на Safari в iOS 10.0.2.

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

8
На iOS 10 я виявив, що це спрацювало, але якщо прокрутити сторінку, а потім піч-масштабувати, продовжуючи прокручувати, це дозволяє масштабувати. Тоді ви опинитесь застряглими на новому рівні збільшення, поки не прокрутите знову. Тому це не виглядає як хороше рішення, якщо тіло сторінки не прокручується. :(
Ранд Скаллард

1
Одне застереження: користувач може ще двічі торкнутись екрана, який зможе / може збільшити масштаб, і це не зачепить.
Стівен

1
Ще іноді дозволяє масштабувати, подвійним натисканням на екран. :(
Jarzka

4
Чим еквівалентний "подвійний дотик" gesturestart? dblclick ?
lowtechsun

3
Ще одна примітка, якщо ви хочете вимкнути режим збільшення подвійного торкання масштабування. Мобільний Safari також підтримує "сенсорні дії: маніпулювання" (підпадає під "базову підтримку", яка вимикає події подвійного натискання. Документація тут: developer.mozilla.org/en-US/docs/Web/CSS/touch-action
jeremypress

15

для iphone safari до iOS 10 "viewport" - це не рішення, мені це не подобається, але я використовував цей код 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 включає умову event.scale! == 1
Артур Цидкілов

@aleclarson для запобігання масштабуванню на мобільному Safari достатньо, я написав, що мені це не подобається, зазвичай для нього доводиться використовувати вікно перегляду, але на iOS iphone 6 і вище він не працює (я думаю, що ваш event.scale ! == 1 має бути правильніше, але все це не правильно, це свого роду хакерство)
Артур Цидкілов

@aleclarson Здається, використовуючи! == розбиває власний браузер в Android 4.4; event.scale не визначено.
Джеймс Піцурро

3
@JamesPizzurro Так, ви можете використовуватиevent.scale !== undefined && event.scale !== 1
aleclarson

11
user-scalable=0

Це більше не працює на iOS 10. Apple вилучила цю функцію.

Зараз ви не можете відключити веб-сайт масштабування на iOS, якщо ви не зробите грубу програму платформи.


Такий облом ... Будь-яка ідея, чому вони це зняли?
Стівен Тетро

3
@smt вони не хочуть, щоб веб-досвід змагався з додатком у магазині додатків.
Марвін Даніг

2
@marvindanig так ... оскільки вони беруть 99 $ гонорару, щоб створити додаток, який ще можна було б зробити більш доступним додатком для веб-сторінок для всіх платформ. Також Apple не може сподобатися "веб-досвіду", якщо це означає, що користувачі + розробники можуть уникнути огородженого саду. Його все про владу і грошей компанії 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 додайте наступний текст для веб-браузерів:

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});
}

З першим, якщо оператор я впевнений, що він буде виконуватись лише в iOS-середовищах (якщо він буде виконаний в Android, Behivour прокрутки буде зламаний). Також зверніть увагу на passiveпараметр, встановлений на false.


Не працюю на моєму iOS 12.3.1, ось тест-посилання: https://output.jsbin.com/liqiraj
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 на {
pasive

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

Я нерозумно мав оболонку, яка мала ширину в пікселях. Інші веб-переглядачі здавалися досить розумними, щоб вирішити це. Після того, як я перетворив ширину в відсоткове значення, він добре працював і на мобільному Safari. Дуже дратує.

.page{width: 960px;}

до

.page{width:93.75%}

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

0

Використання touch-actionвластивості CSS - це найелегантніше рішення. Тестовано на 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 Змінити розмір тексту АА). Більше про це можна прочитати тут: Мобільна доступність: Як WCAG 2.0 та інші Керівні принципи W3C / WAI застосовуються до мобільних пристроїв, збільшення 2.2 / збільшення


13
Це не відповідь .. і багато клієнтів поки просять заблокувати масштаб .. тому я не можу сприймати це як загальне правило

9
Збільшити доступність - це не відповідальність сторінки (ані жодної програми з цього питання). Відповідальність операційної системи - забезпечити доступний інструмент масштабування. Кожна ОС сьогодні надає таку функцію, яка застосовується як масштабування екрана , і вона не повинна перешкоджати самому масштабуванню сторінки, оскільки це не призначено для доступності.
Бруно Фінгер

4
Завжди є дійсні випадки використання таких матеріалів. З якоїсь причини, здається, вся веб-література припускає, що Інтернет лише для створення блогів. Так само, як є дійсні випадки використання для JavaScript eval(), так і для відключення масштабування. Я використовую його для веб-програми, яка використовується в поєднанні зі сканером Bluetooth, щоб запобігти масштабуванню сторінки при скануванні штрих-коду.
користувач128216

3
Я повністю погоджуюся з цілями рекомендацій щодо доступності, але не виникає сумнівів у тому, що бувають випадки, коли масштабування не потрібне чи потрібне, або навіть може порушити роботу користувачів. Плюс, знаєте, клієнти.
Чак Ле Бутт

2
Я б сказав, що в програмі html / javascript ці вказівки не застосовуються. Зрештою, чи дозволить нативній програмі збільшити чи зменшити масштаб?
Йорген Зіґвардссон

-5

Цей повинен працювати над iphone тощо.

<meta name="viewport" content="width=device-width, initial-scale=1 initial-scale=1.0, maximum-scale=1.0, user-scalable=no">
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.