Виправити проблему з розміром шрифту в Mobile Safari (iPhone), коли текст відображався непослідовно, а деякі шрифти більші за інші?


75

Наш сайт відображає невідповідні розміри шрифтів у мобільному Safari - і, наскільки ми можемо зрозуміти, лише в Mobile Safari. Це нас дуже тупило.

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

1) Відвідайте http://www.panabee.com .

2) Проведіть пошук доменного імені.

Поля зліва показують неправильний розмір шрифту. Розмір шрифту повинен відповідати розміру шрифту з правого боку (як заголовки вікон, так і копія поля). Наприклад, заголовки "Варіації" та "Twitter" набагато більші за заголовок "Альтернативні закінчення".

Будь-яка підказка, чому?


Тоді ніякої ідеї. Я видалив свою відповідь, оскільки це була лише здогадка.
тридцять крапок


1
для нащадків: 2018 рік, і ця публікація все ще корисна.
Картер Папе

Відповіді:


148

Mobile Safari (наприклад, Chrome для Android, Mobile Firefox та IE Mobile) збільшує розмір шрифту для широких блоків (у будь-який час), так що якщо двічі торкнутися, щоб збільшити цей блок (який відповідає блоку до ширини екрана) , текст буде розбірливим. Якщо ви встановите -webkit-text-size-adjust: 100%(або none), він не зможе цього зробити, і тому, коли користувач двічі натискає, щоб збільшити широкі блоки, текст буде нерозбірливо малим; користувачі зможуть прочитати його, якщо збільшити, але тоді текст буде ширшим за екран, і їм доведеться панорамувати горизонтально, щоб прочитати кожен рядок тексту!

  1. В ідеалі ви могли б це виправити, використовуючи методи адаптивного веб-дизайну , щоб пристосувати ваш дизайн до розмірів мобільних екранів (у цьому випадку у вас більше не було б дуже широких блоків, тому мобільні браузери більше не коригували б ваші розміри шрифту).

  2. Якщо це неможливо, і ви застрягли обслуговувати настільний сайт для мобільних користувачів, то подивіться, чи зможете ви налаштувати дизайн, щоб жоден з ваших блоків тексту не був ширшим за ширину пристрою мобільного пристрою (наприклад, 320 пікселів для багатьох портретних телефонів ) (ви можете використовувати css для мобільних пристроїв, щоб уникнути впливу браузерів на робочому столі), тоді Mobile Safari не потрібно буде збільшувати будь-який розмір шрифту (а браузерам, які переробляють текст, наприклад, браузер Android та Opera Mobile, також не потрібно буде змінювати ваш макет).

  3. Нарешті, якщо вам дійсно потрібно перешкодити Mobile Safari регулювати розміри шрифту, ви можете встановити це -webkit-text-size-adjust: 100%, але робіть це лише в крайньому випадку, оскільки це може спричинити труднощі у користувачів мобільних пристроїв під час читання вашого тексту, оскільки він буде занадто малим або їм доведеться панорамувати з боку в бік після кожного прочитаного рядка. Зверніть увагу, що ви повинні використовувати 100%не noneтому, що жоден з них не має неприємних побічних ефектів у настільних браузерах . Існують також еквівалентні -moz-text-size-adjustта -ms-text-size-adjustвластивості для Mobile Firefox та IE Mobile.

Редагувати: наприклад, у вашому випадку найпростіший - це, мабуть, друга альтернатива, тому ви можете спробувати додати такий CSS:

/* Mobile browsers only */
@media only screen and (max-device-width: 480px) {
    table#all_results {
        width: auto;
    }
    td#main_box {
        width: 320px;
    }
    td#side_box {
        width: 320px;
    }
}

Хоча не ідеально жорстко кодувати 320px, як це; Ви можете це покращити, використовуючи різні CSS-медіа-запити або отримуючи ширину пристрою з JavaScript.


Дякую, @ John. Коли ви говорите "блоки тексту", ви маєте на увазі батьківський контейнер тексту або фактичну кількість тексту? Іншими словами, для заголовків розділів, таких як "Варіації" та "Переклади", які містять лише текст довжиною в кілька символів, мені потрібно було б обернути їх всередині іншого елемента DOM (наприклад, простір із відображенням вбудованого блоку)?
Крашалот,

@Crashalot: Під блоками тексту я маю на увазі елементи з display:block, наприклад, тегами <p>. У вашому випадку, здається, ви можете просто зробити обидві колонки шириною 320 пікселів - див. Приклад CSS, який я додав до своєї відповіді вище (це, можливо, можна було б покращити, щоб краще обробляти зміни розміру екрана). Де це можливо, протестуйте, як це виглядає на реальних пристроях. Ви можете подальшу оптимізацію, наприклад, мати розширювані розділи, такі як en.m.wikipedia.org/wiki/Mobile_Web, тому користувачеві не доведеться так сильно прокручувати, щоб знайти розділи, які його цікавлять.
Джон Меллор,

будь ласка, зверніть увагу, що фактичне рішення наведено нижче. ми присудили @John бали, оскільки він надихнув остаточне рішення.
Crashalot

@ John: Що, якби я використовував адаптивний веб-дизайн? Яке там рішення? Єдиний варіант, який я придумав, це встановлення ширини для елемента блоку ( p). Але тоді я мав би знати про всі розміри та орієнтацію ... Я хочу лише, щоб два pелементи мали однаковий розмір шрифту ...
тестування

1
@testing: автоматичне розміщення тексту впливає лише на стовпці тексту, які є ширшими (у пікселях CSS), ніж ширина екрану пристрою (у пікселях, що не залежать від щільності). Якщо ви використовуєте адаптивний веб-дизайн, у вас буде <meta name = "viewport" content = "width = device-width"> або еквівалент, що означає, що ваша сторінка ніколи не буде ширшою за екран пристрою, тому розмір тексту не матиме ефекту, і вам не потрібно турбуватися про це. (У Chrome для Android є невелика застереження - crbug.com/252828 - але навіть це, як правило, має бути відносно незначним).
Джон Меллор,

41

Ось що в кінцевому підсумку вдалося (протестовано лише на iPhone 4 tho):

/* Mobile browsers only */
@media only screen and (max-device-width: 480px) {      
        td#main_box { -webkit-text-size-adjust:100% }               
}

Відповідь ми присудили Джону, оскільки його рішення було покладено в основу цього.

Можливо, не найелегантніша відповідь, але вона працює.


3
Для повноти, це ціла декларація:-webkit-text-size-adjust:100%; -moz-text-size-adjust:100%; -ms-text-size-adjust:100%;
Клаудіу Креанга

6

-webkit-text-size-adjust: none;призведе до того, що ви не зможете збільшувати масштаб мобільних пристроїв. Вам слід використовувати 100%замість цього.


3
-webkit-text-size-adjust:none;

напевно вирішить вашу проблему.

target-element { -webkit-text-size-adjust:80% } 

як і раніше збільшує масштаб, але зберігає його на 80% менше, ніж веб-комплекти за замовчуванням.


2
Дякую, @Thomas. Цього недостатньо, оскільки він також відключає зміну розміру шрифту, оскільки користувачі збільшують і зменшують масштаб, що небажано. Мета полягає в тому, щоб зберегти зміну розміру Safari на основі масштабування, одночасно зберігаючи узгодженість розміру шрифту, як визначено CSS.
Крашалот

1

У моєму випадку у мене був <p>елемент, і я вирішив цю проблему, додавши:

width: fit-content;

До нього. Мені вдалося відтворити це і на мобільному телефоні Safari.


0

Я вирішив проблему з розмірами шрифтів, використовуючи hack css для додатка IOS та браузера safari IOS.

@supports (-webkit-touch-callout: none) {
       //you can write your custom css for IOS safari browser.
     }
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.