修复 Mobile Safari (iPhone) 上文本呈现不一致且某些字体比其他字体大的字体大小问题?

Posted

技术标签:

【中文标题】修复 Mobile Safari (iPhone) 上文本呈现不一致且某些字体比其他字体大的字体大小问题?【英文标题】:Fix font size issue on Mobile Safari (iPhone) where text is rendered inconsistently and some fonts are larger than others? 【发布时间】:2011-07-15 06:24:09 【问题描述】:

我们的网站在移动 Safari 上呈现的字体大小不一致——据我们所知,只有 Mobile Safari。这让我们非常难过。

我们用 Firebug 分析了网站,错误的区域继承了正确的样式,但字体仍然以错误的大小呈现。

1) 访问http://www.panabee.com。

2) 进行域名搜索。

左侧的方框显示不正确的字体大小。字体大小应与右侧的字体大小相匹配(框标题和框副本)。例如,标题“Variations”和“Twitter”远大于标题“Alternate Endings”。

有什么线索吗?

【问题讨论】:

那就不知道了。我已经删除了我的答案,因为这只是一个猜测。 相关:***.com/questions/12463360/… 为子孙后代:现在是 2018 年,这篇文章仍然很有帮助。 【参考方案1】:

Mobile Safari(如 android 版 Chrome、Mobile Firefox 和 IE Mobile)会(始终)增加宽块的字体大小,这样如果您双击以放大该块(使该块适合屏幕宽度),文本将清晰易读。如果您设置-webkit-text-size-adjust: 100%(或none),它将无法做到这一点,因此当用户双击放大宽块时,文本将难以辨认;用户可以通过捏拉放大来阅读它,但是文本会比屏幕宽,并且他们必须水平平移才能阅读每一行文本!

    理想情况下,您可以通过使用Responsive Web Design 技术来解决此问题,使您的设计适应移动屏幕尺寸(在这种情况下,您将不再有任何非常宽的块,因此移动浏览器将不再调整您的字体大小)。

    如果这不是一个选项,并且您无法为移动用户提供桌面网站,那么看看您是否可以调整您的设计,使您的文本块都不比移动设备的设备宽度宽 (例如,许多纵向手机为 320 像素)(您可以使用特定于移动设备的 css 以避免影响桌面浏览器),然后 Mobile Safari 不需要增加任何字体大小(以及重排文本的浏览器,如 Android 浏览器和 Opera Mobile,也无需更改布局)。

    最后,如果您真的需要阻止 Mobile Safari 调整字体大小,您可以设置 -webkit-text-size-adjust: 100%,但这样做只能作为最后的手段,因为这可能会导致移动用户难以阅读您的文本,因为它要么太小,要么他们必须在阅读每一行后左右平移。请注意,您必须使用100% 而不是none,因为none has nasty side-effects in desktop browsers。 Mobile Firefox 和 IE Mobile 也有等效的 -moz-text-size-adjust-ms-text-size-adjust 属性。

编辑:例如,在您的情况下,最简单的可能是第二种选择,因此您可以尝试添加以下 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。当您说“文本块”时,您指的是文本的父容器,还是实际的文本量?换句话说,对于像“Variations”和“Translations”这样只包含几个字符长的文本的部分标题,我需要将它们包装在另一个 DOM 元素中(例如,显示 inline-block 的 span)? @Crashalot:文本块是指带有display:block 的元素,例如

标签。在您的情况下,您似乎可以将两个列都设为 320px 宽 - 请参阅我在上面的答案中添加的示例 CSS(这可能会被改进以更好地处理屏幕尺寸变化)。在可能的情况下,测试它在真实设备上的外观。不过,您可以进一步优化,例如拥有像 en.m.wikipedia.org/wiki/Mobile_Web 这样的可扩展部分,这样用户就不必滚动太多就可以找到他们感兴趣的部分。

请注意下面的实际解决方案。自从 @John 启发了最终解决方案后,我们就给他加分了。 @testing:文本自动调整大小仅影响比设备屏幕宽度(与密度无关的像素)更宽(以 CSS 像素为单位)的文本列。如果您使用响应式网页设计,您将拥有 或等效项,这意味着您的页面永远不会比设备的屏幕宽,因此文本自动调整大小将不起作用,你不必担心它。 (Android 版 Chrome 有一点警告 - crbug.com/252828 - 但即使这样通常也相对较小)。 关于响应式网页设计的探索:在我的探索过程中,有一些情况下,特定于设备宽度的响应式设计仍然崩溃,一些字体在 iPhone 上旋转时只是随机改变大小,尽管效果很好在 Safari 和 Chrome 的桌面上。这个 CSS 修复 ( -webkit-text-size-adjust: 100% ) 似乎是让开发人员/设计师真正实现响应式设计的关键。我尝试了奇怪的 JavaScript 修复,尽管 ,但这个 CSS 确实有效.【参考方案2】:

以下是最终奏效的方法(仅在 iPhone 4 上测试过):

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

我们将答案授予约翰,因为他的解决方案是这个解决方案的基础。

可能不是最优雅的答案,但它有效。

【讨论】:

为了完整起见,这是整个声明:-webkit-text-size-adjust:100%; -moz-text-size-adjust:100%; -ms-text-size-adjust:100%;【参考方案3】:

-webkit-text-size-adjust: none; 将导致您无法放大移动设备。你应该改用100%

【讨论】:

【参考方案4】:
-webkit-text-size-adjust:none;

可能会解决您的问题。

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

仍会缩放,但会比 webkits 默认值小 80%。

【讨论】:

谢谢@Thomas。这还不够,因为它还会在用户放大和缩小时禁用字体大小调整,这是不可取的。目标是保持 Safari 基于缩放的大小调整,同时保持 CSS 定义的字体大小一致性。【参考方案5】:

在我的例子中,我有一个 <p> 元素,我通过添加解决了这个问题:

width: fit-content;

给它。我也能够在 Safari 移动版上重现这一点。

【讨论】:

【参考方案6】:

我通过对 ios 应用程序和 IOS Safari 浏览器使用 css hack 修复了字体大小问题。

@supports (-webkit-touch-callout: none) 
       //you can write your custom css for IOS safari browser.
     

【讨论】:

以上是关于修复 Mobile Safari (iPhone) 上文本呈现不一致且某些字体比其他字体大的字体大小问题?的主要内容,如果未能解决你的问题,请参考以下文章

您可以从 Mobile Safari 访问 iPhone 相机吗? [关闭]

为啥在 iOS Safari Mobile (iPhone / iPad) 中没有触发模糊事件?

CSS 背景位置在 Mobile Safari (iPhone/iPad) 中不起作用

iPhone Mobile Safari:强制键盘打开

iOS 7 从 Mobile Safari 访问 iPhone 相机?

iPhone xcode 应用程序可以读取 Safari Mobile 之前存储的 cookie 吗?