Запретить iPhone увеличивать масштаб при выборе в веб-приложении

У меня есть такой код:

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

Запуск в полноэкранном веб-приложении на iPhone.

При выборе чего-либо из этого списка iPhone увеличивает изображение select-элемента. И не уменьшает масштаб после выбора чего-либо.

Как я могу предотвратить это? Или уменьшить масштаб?


person seymar    schedule 26.06.2011    source источник


Ответы (12)


Вероятно, это связано с тем, что браузер пытается увеличить область, поскольку размер шрифта меньше порогового значения, обычно это происходит на iphone.

Присвоение атрибута метатега «user-scalable = no» ограничивает возможность масштабирования в другом месте. Поскольку проблема связана только с элементом select, попробуйте использовать следующее в своем CSS, этот хак изначально использовался для jquery mobile.

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

person Sasi Dhar    schedule 20.11.2012
comment
Если текст виден (как в моем случае), кажется, что 16 пикселей - это минимум до включения масштабирования. - person Marlon Creative; 15.02.2013
comment
Чтобы было понятнее, эта строка предотвратит автомасштабирование: $('<meta>', {name: 'viewport',content: 'user-scalable=no'}).appendTo('head'); - person Abbas; 14.02.2014
comment
С каких это пор текст скрыт в элементе выбора ?? Не принесет никаких проблем с версткой - person Bill; 10.03.2014
comment
var iOS = (navigator.userAgent.match (/ (iPad | iPhone | iPod) / g)? true: false); if (iOS) {$ ('элемент-для-применения-к'). css ('размер-шрифта', '50 пикселей'); } - person Brad; 08.05.2014
comment
@Billy Элемент select в мобильном браузере не отображается как в настольном браузере. Мобильная ОС, такая как android / iOS, открывает собственное представление для фактического выбора значения. Так что размер шрифта вообще не имеет значения, я это имел в виду. Спасибо - person Sasi Dhar; 25.06.2015
comment
@Billy Я хочу сказать, что когда font-size имеет значение 50 пикселей, это выглядит странно на других элементах html, кроме раскрывающегося списка, что я назвал проблемой макета. - person Sasi Dhar; 04.11.2015
comment
См. Ответ @martinedwards ниже, где выясняется, что этот трюк работает для всего, что больше 16 пикселей. Так что это не обязательно должен быть монстр размером 50 пикселей. - person jdgregson; 14.02.2017
comment
Tywm. WTF с этим яблочным бс? масштабирование полей ввода, изменение стиля текстовых номеров телефонов и т. д. - person Molod; 03.03.2017
comment
Но если вам нужно разрешить масштабирование пользователем для проблем доступности или по любой другой причине, см. Ответ ниже stackoverflow.com/questions/6483425/ - person gota; 24.01.2018
comment
Этот прием работает с типами ввода. Но когда я выбираю любое значение из раскрывающегося списка (я использую angular ui-select), оно увеличивается. Я попытался увеличить размер шрифта списков в раскрывающемся списке, но это не сработало. Любая помощь? - person Jayesh Dhandha; 30.01.2019
comment
@Abbas, как я могу сделать это в ванильном JS? - person Telarian; 17.10.2019
comment
@Telarian stackoverflow.com/questions / 18982228 / - person Abbas; 17.10.2019
comment
Привет, проблема была устранена только с помощью метатега. Мне вообще не понадобилось свойство font-size. - person Jean Manzo; 30.12.2020
comment
Я думал, user-scalable=no не работает в iOS! это работает? - person Mohammad Kermani; 13.01.2021

user-scalable = no - это то, что вам нужно, так что на этот вопрос есть окончательный ответ

<meta name="viewport" content="width=device-width, minimum-scale=1.0, maximum-scale=1.0, user-scalable=no">
person sciritai    schedule 28.06.2011
comment
На самом деле, добавления width = device-width, initial-scale = 1.0, maximum-scale = 1.0 должно быть достаточно. Я не верю, что вам нужна масштабируемость для пользователя с максимальным масштабом. - person Dan Smart; 24.11.2011
comment
@DanSmart, по крайней мере, в моем случае (и я не знаю, что его отличает), минимального / максимального масштаба было недостаточно - добавление user-scaleable = no имело значение. - person corolla; 13.06.2013
comment
Это кажется очень жестким подходом - я рекомендую с осторожностью использовать user-scalable = no. от Dev.Opera, это также можно полностью отключить масштабирование, однако имейте в виду, что масштабирование - важная функция доступности, которую используют многие люди. Поэтому отключение должно происходить только в случае крайней необходимости, например, для определенных типов игр и приложений. - person Charlie Stanard; 20.01.2015
comment
user-scalable в iOS 10 игнорируется. - person nickdnk; 15.09.2017
comment
Если ваш шрифт больше 16 пикселей, браузер может уменьшить масштаб при фокусировке ввода. Мне нужно было только добавить minimum-scale=1, что также сохраняет возможность увеличения пользователем. - person Micros; 28.08.2019

В моем случае это сработало при решении этой проблемы:

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

Предлагаемый здесь от Кристина Арасмо Беймер

person Triptoph    schedule 04.06.2013
comment
В моем случае IOS 7x старого масштабируемого пользователем было недостаточно. Вышеупомянутое помогло, спасибо, что поделились. - person landed; 01.03.2014

На iPhone поля формы будут немного увеличены, если размер текста меньше 16 пикселей. Я бы предложил установить текст поля мобильной формы на 16 пикселей, а затем изменить размер обратно на рабочий стол.

Ответы об отключении масштабирования бесполезны для доступности / слабовидящие пользователи все еще могут захотеть увеличить масштаб на мобильных устройствах меньшего размера.

Пример:

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

# Tablet upwards
@media (min-width: 768px) {
  font-size: 14px;
}
person martinedwards    schedule 01.10.2015
comment
Это хорошо! Но что, если мой текст выходит за пределы всей ширины поля выбора? Что мне делать в таком случае? - person gota; 24.01.2018
comment
Если ваше начальное сообщение о вариантах подходит, этого должно быть достаточно. Как только они выбрали вариант, даже если он немного усечен, они, скорее всего, запомнят, что это было. Но да, большая проблема, если там написано: Пожалуйста, выберите компанию ... - person martinedwards; 26.04.2018
comment
Этот ответ работает и предлагает наименее навязчивый метод. Спасибо! - person DeBraid; 03.07.2020

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

Поскольку iPhone будет немного увеличивать поля формы, если размер текста меньше 16 пикселей, мы можем обмануть iPhone, чтобы он подумал, что размер шрифта составляет 16 пикселей, а затем преобразовать его в наш размер.

Например, давайте возьмем пример, когда наш текст имеет размер 14 пикселей, поэтому он увеличивается, потому что он меньше 16 пикселей. Следовательно, мы можем преобразовать масштаб в соответствии с 0,875.

В следующем примере я добавил отступ, чтобы показать, как соответствующим образом преобразовать другие свойства.

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

Я надеюсь, что это помогает!

person Layor Zee    schedule 10.04.2018
comment
Это неприятный, но также умный хакер, и я не люблю хаков ... но в данном случае это лучший ответ на этой странице, и нет альтернативы, если вам нужно остановить масштабирование, но все же вы хотите сохранить дизайн в том виде, в каком он есть . Большое спасибо! :) - person roNn23; 14.07.2020

iOS масштабирует страницу, чтобы отобразить поле ввода большего размера, если размер шрифта меньше 16 пикселей.

Только щелчок по любому полю, масштабирование страницы. поэтому при щелчке мы делаем его равным 16 пикселей, а затем изменяем значение по умолчанию

приведенный ниже фрагмент отлично подходит для меня и ориентирован на мобильные устройства.

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

person nand-63    schedule 08.02.2019

Попробуй это:

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 в конце вы можете восстановить исходную ситуацию.

Проверено на iPhone 5S

person Dario Brizio    schedule 09.06.2014

Установите для всех шрифтов 'select' размер 16 пикселей

выберите {font-size: 16px; }

person nasty    schedule 20.08.2019

Я не думаю, что вы ничего не можете поделать с этим поведением в одиночку.

Одна вещь, которую вы можете попробовать, - это вообще не допускать масштабирования страницы. Это хорошо, если ваша страничка рассчитана на телефон.

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

Еще вы можете попробовать использовать конструкцию JavaScript вместо универсального оператора select. Создайте скрытый div для отображения вашего меню, обработайте клики в javascript.

Удачи!

person Vineel Shah    schedule 26.06.2011

Как здесь ответили: Отключить автоматическое увеличение Тег ввода текста - Safari на iPhone

Вы можете запретить Safari автоматически увеличивать масштаб текстовых полей во время ввода данных пользователем без отключения возможности масштабирования пользователем с помощью щипка. Просто добавьте maximum-scale=1, но не учитывайте атрибут масштаба пользователя, предложенный в других ответах.

Это полезный вариант, если у вас есть форма в слое, которая «плавает» вокруг при увеличении, что может привести к тому, что важные элементы пользовательского интерфейса будут перемещены за пределы экрана.

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

person daxmacrog    schedule 28.09.2018

Попробуйте добавить этот CSS, чтобы отключить стиль iOS по умолчанию:

-webkit-appearance: none;

Это также будет работать с другими элементами, получившими особый стиль, например input [type = search].

person Abdul Sheikh    schedule 01.01.2019

Я читал об этом несколько часов, и лучшее решение - это jquery здесь. Это также помогает с опцией «следующая вкладка» в iOS Safari. У меня здесь тоже есть вводные, но вы можете их удалить или добавить по своему усмотрению. По сути, mousedown срабатывает перед событием focus и заставляет браузер думать, что это 16 пикселей. Кроме того, фокусировка сработает на функции «следующая вкладка» и процесс повторится.

$(function(){
    $('input, select').on("mousedown focusout", function(){
        $('input, select').css('font-size','16px');
    });
    $('input, select').on("focus", function(){
        $('input, select').css('font-size','');
    });
})
person Nimrod5000    schedule 11.04.2019