Fix font size issue on Mobile Safari (iPhone) where text is rendered inconsistently and some fonts are larger than others?

100,621

Solution 1

Mobile Safari (like Chrome for Android, Mobile Firefox and IE Mobile) increases the font size of wide blocks (at all times), such that if you double-tap to zoom in on that block (which fits the block to the screen width), the text will be legible. If you set -webkit-text-size-adjust: 100% (or none), it won't be able to do this, and so when a user double-taps to zoom in on wide blocks the text will be illegibly small; users will be able to read it if they pinch-zoom in, but then the text will be wider than the screen and they'll have to pan horizontally to read each line of text!

  1. Ideally you would fix this by using Responsive Web Design techniques to make your design adapt to mobile screen sizes (in which case you would no longer have any very wide blocks, so mobile browsers would no longer adjust your font sizes).

  2. If that's not an option, and you're stuck serving a desktop site to mobile users, then see if you can tweak your design so none of your blocks of text are wider than the mobile device's device-width (e.g. 320px for many portrait phones) (you can use mobile-specific css to avoid affecting desktop browsers), then Mobile Safari won't need to increase any font sizes (and browsers which reflow text, like the Android Browser and Opera Mobile, also won't need to change your layout).

  3. Finally if you really need to prevent Mobile Safari from adjusting your font sizes you can set -webkit-text-size-adjust: 100%, but do this only as a last resort since it is likely to cause mobile users to have difficulty reading your text, as it'll either be too small or they'll have to pan from side to side after every line they read. Note that you must use 100% not none because none has nasty side-effects in desktop browsers. There are also equivalent -moz-text-size-adjust and -ms-text-size-adjust properties for Mobile Firefox and IE Mobile.

Edit: for example in your case the simplest is probably the 2nd alternative, so you could try adding the following 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;
    }
}

Though it's not ideal to hardcode 320px like this; you could improve on that by using a variety of CSS media queries, or getting the device-width from JavaScript.

Solution 2

Here's what ultimately worked (tested only on iPhone 4 tho):

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

We awarded the answer to John since his solution was the basis of this one.

Probably not the most elegant answer, but it works.

Solution 3

-webkit-text-size-adjust: none; will cause you to not be able to zoom in mobile devices. You should use 100% instead.

Solution 4

-webkit-text-size-adjust:none;

will probably solve your problem.

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

will still zoom but keeps it 80% smaller than webkits default.

Solution 5

In my case I had a <p> element and I solved this issue by adding:

width: fit-content;

To it. I was able to reproduce this on Safari mobile as well.

Share:
100,621

Related videos on Youtube

Crashalot
Author by

Crashalot

Hello. My friends call me SegFault. Describe myself in 10 seconds? You know those feisty, whip-smart, sometimes funny, and occasionally charming developers who dominate StackOverflow and consider Swift/Ruby/jQuery their native tongue? Yah, I buy coffee for them.

Updated on November 02, 2020

Comments

  • Crashalot
    Crashalot over 3 years

    Our site renders with inconsistent font sizes on mobile Safari -- and as far as we can tell, only Mobile Safari. This very much has stumped us.

    We analyzed the site with Firebug, and the incorrect areas are inheriting the right styles, yet the fonts are still rendered with the wrong sizes.

    1) Visit http://www.panabee.com.

    2) Conduct a search for a domain name.

    The boxes on the left side show the incorrect font sizes. The font size should match the font size on the right side (both box titles and box copy). For instance, the titles, "Variations" and "Twitter," are much larger than the title, "Alternate Endings."

    Any clue why?

    • thirtydot
      thirtydot about 13 years
      No idea then. I've deleted my answer because it was just a guess.
    • Timo Huovinen
      Timo Huovinen about 10 years
    • Carter Pape
      Carter Pape almost 6 years
      for posterity: it's 2018 and this post is still helpful.
  • Crashalot
    Crashalot about 13 years
    Thanks, @Thomas. This isn't quite sufficient because it also disables resizing of the font as users zoom in and out, which is undesirable. The goal is to preserve Safari's resizing based on zooms while also preserving font size consistency as defined by the CSS.
  • Crashalot
    Crashalot about 13 years
    Thanks, @John. When you say "blocks of text," are you referring to the text's parent container, or the actual amount of text? In other words, for the section titles like "Variations" and "Translations" which only contain text a few chars long, I would need to wrap them inside another DOM element (e.g., span with display of inline-block)?
  • John Mellor
    John Mellor about 13 years
    @Crashalot: By blocks of text I mean elements with display:block, like <p> tags. In your case it seems you could just make both your columns 320px wide - see the example CSS I added to my answer above (this could probably be improved to better handle screen size variations). Where possible, test how it looks on real devices. You can optimize further though, for example have expandable sections like en.m.wikipedia.org/wiki/Mobile_Web so the user doesn't have to scroll so much to find the sections that interest them.
  • Crashalot
    Crashalot almost 12 years
    pls note the actual solution is below. we awarded @John the points since he inspired the final solution.
  • testing
    testing over 10 years
    @John: What if I'd use responsive webdesign? What would be the solution there? The only option I came up with is setting a width on the block element (p). But than I'd have to be aware an all sizes and orientation ... I only want that two p elements have the same font-size ...
  • John Mellor
    John Mellor over 10 years
    @testing: Text Autosizing only affects columns of text that are wider (in CSS pixels) than the device's screen width (in density-independent pixels). If you use responsive webdesign you'll have <meta name="viewport" content="width=device-width"> or equivalent, which means your page will never be wider than the device's screen, so Text Autosizing will have no effect, and you don't need to worry about it. (There's a slight caveat in Chrome for Android - crbug.com/252828 - but even that should usually be relatively minor).
  • Claudiu Creanga
    Claudiu Creanga almost 9 years
    For completeness, this is the whole declaration: -webkit-text-size-adjust:100%; -moz-text-size-adjust:100%; -ms-text-size-adjust:100%;
  • Jared Updike
    Jared Updike about 8 years
    Regarding The Quest for Responsive Web Design: there were situations during my Quest where a device-width-specific Responsive Design still broke, with some fonts just randomly changing size when rotated on the iPhone, despite working perfectly on the desktop in Safari and Chrome. This CSS fix ( -webkit-text-size-adjust: 100% ) seems key to allowing a developer/designer to actually achieve a responsive design. I tried weird JavaScript fixes and despite <meta charset="UTF-8" name="viewport" content="width=device-width, initial-scale=1, maximum-scale=1">, nothing but this CSS actually worked.