MrJ*_*eno 12 html javascript css viewport google-developer-tools
昨天,我观察到一些非常奇怪的行为,并就此写了一个很长的问题。正如@tacoshy正确指出的那样,这个问题缺乏重点。因此,在这篇文章中,我将重点关注一个问题:
为什么在 Chrome 开发者工具中调整窗口大小的行为与调整“响应框”大小的行为不同?
- 元素<head>包含以下视口元标记
<meta name="viewport" content="width=device-width, initial-scale=1" />
Run Code Online (Sandbox Code Playgroud)
在下面显示任何视频之前,已在 Chrome-devtools
Settings > Preferences > Reset defaults and reload
和中执行了以下操作
The kebab-icon in the responsive view > Reset to defaults
一个 React 应用程序,其状态 ( ) 会在调整大小事件触发时windowWidth更新。window.innerWidth我还有一个容器 divmin-width设置为windowWidth. 简而言之,容器应该始终具有min-width与window.innerWidth. 该容器包含一个min-width静态设置为 400px 的 div。
当我只打开 Chrome 开发人员工具并通过更改开发人员工具的宽度来调整可见窗口的大小时,这是观察到的行为:
window.innerWidth对应于窗口的大小。window.visualViewport.scale)仍为 1。现在我们尝试在Chrome开发者工具响应模式下:
window.visualViewport.width将产生几乎相同的行为
window.screen.width会产生不同但也是错误的行为:windowWidth为 100vw 会产生与上面完全相同的行为。上面关于布局破坏的所有示例都有一个共同点:比例开始下降,而不是视口的实际宽度下降。因此,人们可以想象,更新包含的视口元标记minimum-scale=1可以解决问题,而且确实如此!使用
<meta
name="viewport"
content="width=device-width, initial-scale=1, minimum-scale=1"
/>
Run Code Online (Sandbox Code Playgroud)
产生以下行为:
正如您所看到的,比例保持为 1 并且布局没有破坏。事实上,添加minimum-scale=1、innerWidth和visualViewport.width都会screen.width在 Chrome 开发者工具的响应式视图中产生相同的预期行为。
不幸的是,解决这不是问题,问题仍然是:
为什么在 Chrome 开发者工具中调整窗口大小的行为与调整“响应框”大小的行为不同?
在 Firefox 开发人员工具响应式视图中查看页面时,不会反映这种奇怪的缩放行为。
Chrome-Dev-Tools 中的移动视图是否强制缩放?
完全相同的问题,通过添加元标记解决:
<meta name="viewport" content="width=device-width, initial-scale=1.0">
Run Code Online (Sandbox Code Playgroud)
显然,这确实在 2020 年 1 月解决了问题,但今天并没有解决问题(正如我们在此处看到的那样)。
也可以通过添加解决:
<meta name="viewport" content="width=device-width, initial-scale=1.0">
Run Code Online (Sandbox Code Playgroud)
这一次已经出现了。
与我的行为完全相同,但所选的解决方案是 jQuery-hack。摆姿势的人还提到了倾斜手机然后再次倾斜回来时类似的缩放问题,我也经历过(当在视口元标记中添加最小宽度=1时,它就会消失)。
看起来这个问题曾经通过添加来解决
<meta name="viewport" content="width=device-width, initial-scale=1.0">
Run Code Online (Sandbox Code Playgroud)
但现在需要
<meta name="viewport" content="width=device-width, initial-scale=1, minimum-scale=1">
Run Code Online (Sandbox Code Playgroud)
在这种情况下我的问题仍然是
另一方面,Edge 似乎确实反映了这种行为。
这个问题涉及的事情很多,所以很难回答。但是,经过我自己的研究(今晚我遇到了同样的问题),我发现以下细节有些有用。我认为,当没有“元视口”标签时,浏览器对移动设备默认行为的近似在某种程度上是模拟尝试处理面向桌面的页面的设备行为的“最大努力”。也许这会有所帮助:
viewport元标记)告诉浏览器如何针对不同的屏幕尺寸缩放或调整内容大小时,使用此宽度。viewport元标记的情况下在 Chrome DevTools 中使用设备模拟时,您可能会注意到内容会缩放,就像在 980 像素宽的屏幕上呈现一样。这是因为模拟正在模仿移动浏览器处理无响应网站的行为。viewport元标记 ( <meta name="viewport" content="width=device-width, initial-scale=1">) 指示浏览器使用实际设备宽度进行渲染,而不是默认的 980 像素。此标记可确保内容的大小和缩放适合设备,从而无需默认宽度。老实说,我认为 Chrome(和 Firefox 等)团队应该更详细地了解他们提供的模拟行为,但要理解,“我们会尽力而为”,而没有“元视口”标签对我有帮助。一旦<meta name="viewport"...设置完毕,它的播放效果应该会更加一致。
(注意:我正在关注这个问题,因为我想更多地了解这些没有充分记录的微妙行为)