11 月,随着 Chrome 108 的发布,Chrome 将对布局视口在显示屏幕键盘 (OSK) 时的行为做出一些更改。经过此项更改,Android 版 Chrome 将不再调整布局视口的大小,而只会调整视觉视口的大小。这将使 Android 版 Chrome 的行为与 iOS 版 Chrome 和 iOS 版 Safari 的行为保持一致。
下面简要介绍了相关背景信息,包括具体变化、Chrome 进行这项更改的原因,以及您可以采取哪些措施来做好准备。
布局视口和视觉视口
访问某个网站时,您无法在网页加载后看到整个网页的内容。而是会为您提供一个视口,供您查看网页的一部分。此视口也称为布局视口。当网页内容过大时,浏览器会提供滚动机制。
使用 position: fixed
定位元素时,这些元素将相对于该布局视口进行布局。当您向下滚动页面时,布局视口会保持原位,使用 position: fixed
的元素也会保持原位。
除了此布局视口之外,浏览器还提供视觉视口。它表示视口当前可见的部分。在缩放级别 1 下,此视觉视口的大小与布局视口相同。
通过双指张合放大,您可以缩小视觉视口相对于布局视口的大小。
视口大小调整行为
当将焦点置于输入区域或任何其他可编辑区域时,设备(主要是触摸屏设备)可以显示屏幕键盘。此键盘通常称为虚拟键盘,可让用户在可编辑区域中输入内容。
在这种情况下,浏览器会针对不同的视口以以下某种方式做出响应:
- 仅调整视觉视口的大小,并偏移布局视口。
- 调整视觉视口和布局视口的大小。
- 请勿调整布局视口或视觉视口的大小,而是将虚拟键盘叠加在两者之上。
这三种行为如下所示:
系统会根据访问者使用的浏览器和操作系统组合,使用其中一种行为,这超出了您的控制范围。
映射各种调整大小行为
在 Interop 2022 的视口调查工作中,我们针对每种主要浏览器和操作系统组合,调查了与视口相关的各种方面。
测试的方面之一是显示 OSK 时的调整大小行为。这导致了以下分类:
第 1 组
调整视觉视口大小,而不会更改布局视口的浏览器。
- iOS 上的 Safari
- iPadOS 上的 Safari
- ChromeOS 上的 Chrome
- iOS 设备,Chrome 浏览器
- iPadOS 上的 Chrome
- iOS 版 Edge
- iPadOS 上的 Edge
第 2 组
同时调整视觉视口和布局视口大小的浏览器。
- Android 上的 Chrome
- Android 版 Firefox
- Android 设备上的 Edge
- iOS 版 Firefox
第三组
不调整任何视口大小的浏览器:
- 默认情况下不显示 - 在 Android 版 Chrome 中,您可以通过 VirtualKeyboard API 选择启用此行为
每种行为的副作用
在显示 OSK 时,各种视口调整大小方式的这种差异会导致网站的布局和大小调整行为无法互操作。
在第 1 组的浏览器中,显示 OSK:
- 视口相关单位的计算值保持不变。
- 设计为占据整个视觉空间的元素会保持其大小。
- 使用
position: fixed
的元素会保持原位,并且可能会被 OSK 遮挡。
在第 2 组中的浏览器中,显示 OSK:
- 与视口相关的单位的计算值会缩小。
- 设计为占据整个视觉空间的元素会缩小。
- 使用
position: fixed
的元素可能会出现在布局的其他位置。
除非您采用 User-Agent 嗅探或依赖于大量脚本,否则您无法知道使用的是哪种行为。您也无法更改此行为,因为它由用户访问时所用的浏览器和操作系统组合决定。
在 Chrome 108 中更改默认行为
从 Chrome 108 开始,Android 版 Chrome 将调整其视口大小调整行为,以便在显示屏幕键盘时不再调整布局视口的大小。
这将使 Android 设备上的 Chrome 的行为与 iOS、iPadOS、Windows 和 CrOS 设备上的 Chrome、iOS 和 iPadOS 设备上的 Safari 以及 iOS、iPadOS 和 Windows 设备上的 Edge 保持一致。
得益于这项变更,无论 Chrome 运行在哪个操作系统上,作者都可以知道系统会使用哪种行为。此外,它还支持稳定的视口相关单位:显示或隐藏 OSK 不会影响这些单位。
选择启用其他行为
如果您希望自己的网站使用 Android 108 之前的大小调整行为,请不要担心。Chrome 108 中还推出了视口元标记的扩展。
您可以通过 interactive-widget
键告知 Chrome 您希望采用哪种大小调整行为。
interactive-widget
的接受值包括:
resizes-visual
:仅调整视觉视口的大小,而不会调整布局视口的大小。resizes-content
:同时调整视觉视口和布局视口的大小。overlays-content
:请勿调整任何视口的大小。
如需重新选择启用 Android 版 Chrome 的“旧”行为,请将视口 meta 标记设置为以下内容:
<meta name="viewport" content="width=device-width, initial-scale=1.0, interactive-widget=resizes-content">
如果您未在视口宽度元标记中添加 interactive-widget
,Chrome 将使用默认行为,即 resizes-visual
。
直观地说,这些设置对各种视口的影响如下:
您可以在浏览器中访问此演示网站,试用每种值的效果。
测试和反馈
我们预计现有网站会出现一些细微差异,但这些差异不会造成阻塞,因为 Android 版 Chrome 108 现在的行为与 iOS 版 Safari 类似。因此,在 iOS 设备上使用 Safari 正常显示的网站在 Android 设备上使用 Chrome 108 也应该能正常显示。
不过,我们还是鼓励网站作者在 Chrome 108 中积极测试其网站。Chrome 108 将于 2022 年 10 月 27 日进入 Beta 版测试阶段。具体而言,请留意使用 position: fixed
和/或依赖于与视口相关的单位的元素。
您可以通过 crbug.com 报告反馈。请务必在报告标题中添加“屏幕键盘”。