【问题标题】:How to fix the erratic font sizing behavior of iOS Safari?如何修复 iOS Safari 不稳定的字体大小行为?
【发布时间】:2020-05-25 03:15:51
【问题描述】:
iOS 上的

Safari(我使用的是 iOS 13,最新版本)具有某种自动字体大小调整行为,如有必要,会放大字体以使其在 iPhone 上易于阅读。基本上,如果您的布局足够简单和灵活以允许不同的字体大小,这是响应式布局的替代方案。

很多人不喜欢这种行为,当你在谷歌上搜索它时,你大多会得到如何防止它的食谱。

但我确实喜欢这种行为,并希望将其用于主要由文本组成的简单网站。

问题在于 Safari 不会以这种方式处理所有文本,而且(至少对我而言)完全不清楚这种行为取决于什么。

因此,例如,如果您的正文文本为 14 像素,并且希望某些文本具有更大的字体大小(标题,无论......),比如 18 像素,可能会发生 Safari 会放大 14 像素的文本,但不会放大 18 像素的文本。结果是,应该比正文大的文本实际上更小,这当然破坏了整个布局。更改字体 sometimes 似乎具有相同的意外效果。正如我所说,当 Safari 执行此操作和不执行此操作时,它似乎完全不稳定。我已经为此奋斗了一个多星期,它几乎让我发疯。

这是一个简单的示例(但请注意,只有将其放在网络服务器上并在 iOS 上的 Safari 中观看,您才会看到此问题)。

<!DOCTYPE html>

<head>
    <meta http-equiv="content-type" content="text/html; charset=utf-8" />
    <title>Size Test</title>

    <style>
        body {
            font-size: 14px;
            font-family: serif;
        }

        .Head {
            color: red;
            font-family: sans-serif;
        }
    </style>

</head>

<body>
    <p>Lorem ipsum dolor sit amet, consetetur sadipscing elitr, sed diam nonumy
       eirmod tempor invidunt ut labore et dolore magna aliquyam erat, sed diam
       voluptua. Lorem ipsum dolor sit amet, consetetur sadipscing elitr, sed diam
       nonumy eirmod tempor invidunt ut labore et dolore magna aliquyam erat, sed
       diam voluptua.</p>
    <p class="Head">Foo Bar</p>
    <!-- <p class="Head">Foo Bar</p> -->
    <p>Lorem ipsum dolor sit amet, consetetur sadipscing elitr, sed diam nonumy
       eirmod tempor invidunt ut labore et dolore magna aliquyam erat, sed diam
       voluptua.</p>
</body>

</html>

如您所见,我有一个只更改字体类型的标题类(红色只是为了指出问题)。这足以让 iOS 上的 Safari 在放大字体时忽略它;也就是说,虽然字体大小不应该改变,但实际上 Foo Bar 行比文本的其余部分要小得多。

但是,只要您至少两次使用这个类,这种情况就会发生变化。因此,如果您取消注释代码示例中的第二个 Foo Bar 行,那么在 iOS 上的 Safari 中,both 行会突然以正确的字体大小显示.当然,这种行为完全是荒谬的。如果我只需要这个类一次,我不能为了让 Safari 正确显示它而使用它两次。

经过看似无休止的尝试和错误,我找到了一个解决方法:如果段落包含至少 1 个 &lt;br&gt; 标记和至少 1 个字符,iOS 上的 Safari 将始终正确显示字体大小. (同样,这完全没有意义......)

因此,如果您使用&lt;p class="Head"&gt;Foo Bar&lt;br&gt;&amp;nbsp;&lt;/p&gt;,然后将 .Head 类的下边距设置为足够大的负值以补偿意外的第二行,它确实有效 - iOS 上的 Safari 将始终显示放大的字体大小,即使该类仅使用一次(至少在我的测试中是这样)。

当然,这是一个非常丑陋的解决方法。

所以,我的问题基本上是是否有人知道一个不那么丑陋但同样可靠的解决方法。

【问题讨论】:

    标签: html css ios fonts safari


    【解决方案1】:

    这个回复有点晚了,但请尝试将以下内容添加到您的脑海中,然后相应地调整您的字体大小。

    &lt;meta name="viewport" content="width=device-width, initial-scale=1"&gt;

    我附上了三张图片。第一个是您的代码,标题上的字体较小,第二个是您的代码,删除了注释部分(即有效的版本),第三个是视口。

    更多阅读(当你说不稳定这个词时,首先想到的是这个):

    https://developer.mozilla.org/en-US/docs/Mozilla/Mobile/Viewport_meta_tag

    【讨论】:

    • 现在很有趣,谢谢!不幸的是,它有一些副作用(其他一些字体现在突然比预期的大),最重要的是,我需要在我的实际代码中使用固定宽度而不是 device-width(在这种情况下,您的建议似乎没有不再工作),但这可能指向正确的方向。如果正确的 viewport 设置可以解决此问题,我将进一步调查并在此处报告。
    • 是的,我只是在学习,但据我所知,将上述行放在所有文件中是标准做法。我认为这条线是相当标准的,也许可以与 CSS 的其余部分一起玩,也许重新考虑你如何处理设计。字体大小将由默认值驱动,但您可以通过执行 html { font-size: 14px } 之类的操作来解决此问题。然后你可以用“em”来定义其余的字体。但是,我不确定,我知道它适用于固定百分比,例如字体大小:80%(这将是设备默认值的 80%)。
    猜你喜欢
    • 2018-09-24
    • 1970-01-01
    • 1970-01-01
    • 2014-06-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-10-20
    • 2011-02-07
    相关资源
    最近更新 更多