缩小以适应视口元属性有啥作用?

Posted

技术标签:

【中文标题】缩小以适应视口元属性有啥作用?【英文标题】:What does the shrink-to-fit viewport meta attribute do?缩小以适应视口元属性有什么作用? 【发布时间】:2016-02-19 10:47:06 【问题描述】:

我找不到这方面的文档。是 Safari 特有的吗?

ios 9 (here) 最近出现了一个错误,解决方案是将shrink-to-fit=no 添加到视口元数据中。

这段代码有什么作用?

【问题讨论】:

【参考方案1】:

这是一个可以帮助您的页面不缩小以适应的标签,如果将其设置为“no”,则由浏览器默认设置完成,如下所示:<meta name="viewport" content="width=device-width, initial-scale=1.0, shrink-to-fit=*no*"> 然后它将覆盖浏览器的默认过程以遵循你的,即不要缩小以适应。

我希望这可以澄清,如果不尝试复制您的 head 标签中的代码或使用您喜欢的编辑器,刷新并加载浏览器并更改您会发现的分辨率。

【讨论】:

【参考方案2】:

作为 iOS 使用率的统计数据,表明 iOS 9.0-9.2.x 的使用率目前为 0.17%。如果这些数字确实表明这些版本在全球范围内的使用,那么从您的视口元标记中删除缩小以适应的可能性就更大了。

9.2.x 之后。 IOS 在其浏览器上删除此标签检查。

您可以查看此页面https://www.scottohara.me/blog/2018/12/11/shrink-to-fit.html

【讨论】:

【参考方案3】:

至少在撰写本文时,它是 Safari 特定的,在 Safari 9.0 中引入。来自“Safari 有什么新功能?” documentation for Safari 9.0:

视口变化

使用"width=device-width" 的视口元标记会导致页面缩小以适应超出视口边界的内容。您可以通过将"shrink-to-fit=no" 添加到您的元标记来覆盖此行为,如下所示。添加的值将阻止页面缩放以适应视口。

<meta name="viewport" content="width=device-width, initial-scale=1.0, shrink-to-fit=no">

简而言之,将其添加到视口元标记可恢复 Safari 9.0 之前的行为。

示例

这是一个有效的视觉示例,显示了在两种配置中加载页面时的差异。

红色部分是视口的宽度,蓝色部分位于初始视口之外(例如left: 100vw)。请注意,在第一个示例中,当省略 shrink-to-fit=no(从而显示视口外的内容)时页面如何缩放以适应后一个示例中的蓝色内容。

这个例子的代码可以在https://codepen.io/davidjb/pen/ENGqpv找到。

未指定收缩以适应

收缩适应=否

【讨论】:

对不起,我还是不明白这段代码的作用。可以换一种方式解释吗?谢谢! @Dani 默认情况下,Safari 会缩小页面以适应任何溢出视口的内容(第一个示例显示蓝色区域可见;即溢出)。指定shrink-to-fit=no 可以防止这种行为,只保留缩放级别并将溢出的内容留在屏幕外。在您的 iDevice(或 iOS 模拟器)上尝试 Codepen 示例并尝试更改设置。也许以交互方式查看变化会有所帮助。 啊,我明白了。但为什么有人希望他们的部分内容隐藏在较小的屏幕上呢? @Dani 各种原因,但简单的例子是将内容放置在视口之外的滑块/轮播,或者其他会溢出并导致其余内容的大型非响应内容(例如图像/表格)使用默认的shrink-to-fit 行为使页面变小。使用shrink-to-fit=no,页面保持在预期大小,让内容溢出视口。用户(通常)仍然可以滚动或缩小以查看溢出内容,但初始视口与设备大小匹配。 @davidjb 我认为最新的 iOS 11 已修复此问题。我无法重现此错误。

以上是关于缩小以适应视口元属性有啥作用?的主要内容,如果未能解决你的问题,请参考以下文章

元视口标签是如何使用的,它有啥作用?

设置元标记视口时媒体查询不起作用

友元函数有啥作用,它主要用在哪些情况下?

视口单元在 Cordova 移动应用程序中不起作用

在 Android Webview 中使用元视口宽度

HTML 页面未在 iPhone/iPad 上纵向调整大小