如果您正在进行响应式设计,则使用的是 viewport <meta>
标签。这些告诉浏览器应该以什么宽度渲染视窗。如果您不使用此标签,它将以设备的默认值渲染,这几乎肯定不是您想要的。但即使您使用的是 viewport <meta>
,您放入其中的值也存在细微差别。
我只想在这里关注一个细微的差别。
自从我开始进行响应式设计以来,我一直主要使用这个。
<meta name="viewport" content="width=device-width">
这意味着“浏览器,以您自然的宽度渲染此网站。”
如果我们看 iPhone,1-5 的宽度为 320 像素。6 的宽度为 375 像素,6+ 的宽度为 414 像素。还有无数其他设备,它们有各种各样的视窗宽度。该元标签将告诉它们都以其宽度渲染。很棒。
使用上面完全相同的标签,iPhone 在横向旋转时会表现出奇怪的缩放行为。

输入 initial-scale 值!如果您改用这个
<meta name="viewport" content="width=device-width, initial-scale=1">
它保持相同的缩放

我这么说更好。
我不会怀疑 initial-scale
也修复了其他错误。我没有在一个庞大的设备实验室上进行测试。但这将非常有趣。如果您知道任何更深层的细节,请告诉我。
虽然 initial-scale=1
非常有用,但 maximum-scale
对无障碍性来说是个坏消息。
我已经这样做了!
很棒。你比我领先很多。很多代码片段都包含了这个,这很好。我甚至可能曾经删除过它,并且没有立即注意到任何不良情况,因此一直保持这样。我就是那么笨。
记住,您需要的不仅仅是元标签
IE 10 在 Snap 模式和 Windows Phone 8 中需要 CSS 中的 @viewport 内容,因此请记住 使用这些内容。
很好。但是如果访问(出于某种原因)从横向开始呢?然后会发生什么?有任何不良情况吗?
据我所知,从横向开始应该没有问题。
1.0 和 1 之间有区别吗?
没有
我也认为更改
user-scalable
属性对无障碍性也不好。为了了解响应式网页设计为何有效(从技术上讲)……以及深入了解视窗,请观看此视频……
此外,Mobile Web Handbook 还深入探讨了视窗元标签为何有效的技术细节……
https://shop.smashingmagazine.com/mobile-web-handbook.html
我发现该视频和书籍对移动视窗世界提供了很好的见解……
除了
我还将此添加到 CSS 中
这可以防止文本放大。到目前为止效果很好。来源:https://mdn.org.cn/en-US/docs/Web/CSS/text-size-adjust
当您绝对、毫无疑问地必须杀死房间里的每一个缩放因子时。不接受任何替代品。
去年我对此进行了长时间的讨论,并进行了一些测试,结果表明,在几乎所有我能想到的示例中,不使用 initial-scale=1 都是不好的。
结果在这里
http://community.sitepoint.com/t/mobile-viewport-orientations-initial-scale-1-0/38495/11
(对非网站链接表示歉意)。
没有初始缩放,您会在旋转中遇到缩放错误(有时在双重旋转中会遇到复合效果),并且横向模式的媒体查询会被忽略。添加 initial scale=1 后不会出现此类问题。
这是我一直使用的东西
我讨厌这样做网站
这是一个危险的做法,它会阻止所有缩放 - 这被广泛认为对无障碍性不利。人们无法缩放以更好地阅读。您无法放大图像以更清楚地查看内容。既令人讨厌,又对无障碍性不利。
对于常规的基于内容的网站,设置 user-scalable=no 通常是个坏主意,没错。但是,如果您正在开发具有复杂 UI 的 Web 应用程序,那么通常希望这样做,尤其是在您希望获得更像原生应用程序的体验时。
我们不应该创建用户不需要放大就能更好地阅读的网站吗?这不是响应式网页设计存在的意义吗?
我们不应该假设我们知道用户想要什么。
如果有人想或需要放大图像怎么办?我认为对所有用户将要或需要对您的网站进行的操作做出笼统的假设风险极大,而且几乎总是错误的。取消缩放的能力非常烦人,而且 IMO 也是一种糟糕的做法。
为什么不设计您的网站,这样即使有人想要缩放也不重要(或者干脆不要担心这个问题)?
你说得对。允许用户缩放不会造成任何伤害,因为它不会影响页面渲染。感谢您的建议;)
作为设计师,您如何确定您的访问者不需要缩放?
我也使用 maximum-scale。但我不知道这到底是怎么回事。但我了解了一些新的东西。但这看起来比 maximum-scale=1 更新,我使用的是 1.0。那么 user-scable 是什么呢?
当您将视窗内容属性设置为
"width=device-width, initial-scale=1.0, maximum-scale=1, user-scalable=no"
时,您说“人们无法缩放以更好地阅读”是无知的。在 iOS、Windows Phone 和 Android 上,用户可以进入无障碍性设置并使用“缩放”或“放大镜”工具以更好地阅读文本。在台式机上,用户可以使用 Ctrl+ 放大网站。
将视窗内容属性设置为
"width=device-width, initial-scale=1.0, maximum-scale=1, user-scalable=no"
的重要性在我的网站 ProfessedTechnology 上尤为突出。没有它,网站看起来会非常荒谬!例如,仅在 iPhone 上使用"width=device-width"
,网站在纵向模式下看起来会很正常,但在横向模式下会被放大 3 倍!仅使用"initial-scale=1.0, maximum-scale=1"
,在 Windows Phone 上也会出现相同的效果!此外,没有"user-scalable=no"
,您可以放大,但看起来很愚蠢,因为它会放大特定区域,看起来很傻!故事的寓意是,有些网站应该固定缩放,而有些网站不应该固定缩放,这完全取决于网站的设计。如果用户真的需要放大文字,他们可以使用操作系统的辅助功能工具!它们的存在是有原因的!
说明:如果我的评论中显得自吹自擂,我深感抱歉,因为我写评论时非常疲倦。其次,我知道辅助功能工具非常糟糕,但请记住,在网页上进行捏合缩放是苹果公司推广的功能,所以说禁用缩放对辅助功能不利并非完全有力的论据。缩放和放大镜工具是为辅助功能而设计的,而不是为捏合缩放功能而设计的。
这对于表单来说很好。当你在移动设备上点击一个表单,它会放大你,这很烦人。但是,禁用图像缩放并非最佳实践。那么,如何在不阻止用户放大图像的情况下,阻止表单上令人厌烦的放大呢?
Andrew,
删除用户缩放确实会打开移动操作系统,使其在输入字段获得焦点时进行放大/缩放。这个 Stack Overflow 线程中有很多解决方案:http://stackoverflow.com/questions/2989263/disable-auto-zoom-in-input-text-tag-safari-on-iphone
简而言之,将字体大小设置为 16px,或者更理想的是,如果 1em 等于 16px,则将字体大小设置为 1em,可以阻止大多数移动浏览器放大。这在我的一个最近的网站上奏效了。
我会追捕你……:) 说真的,别这样做。我的视力不好,我需要放大才能阅读文本!
@Valerio: user-scalable=no
请不要阻止我在手机上缩放。否则我根本无法阅读;)
我一直使用 initial-scale=1 元标签。但我不知道 IE10 和 Windows 手机需要 CSS 修复。
来吧,IE — 玩游戏。你应该是一个“现代”浏览器!
干杯
我
@viewport 规则是标准,而不是元标签。元标签是苹果公司与第一款 iPhone 一起推出的,并已成为一种事实上的“标准”,但 IE 实际上在这里是前瞻性的。
说实话,我从来没有注意到 iOS 设备上的缩放。
也许我一直都做错了,或者也许是因为我总是设置默认的 body 字体大小,然后根据媒体查询增加/减少这个值。
这改变了我的生活!哈哈,谢谢您!
恕我直言,这篇文章的标题错了,应该是“修复 iPhone 浏览器旋转错误”;)
不过,很高兴知道;)
不,它不应该!苹果公司关于此方面的文档明确指出要像这样操作,而不是使用 device-width。
事实上,这恰恰证明了我的观点;)
这篇文章在某些苹果设备以外的世界里有多大相关性?
在完全不同的设备上的其他测试用例中是否存在任何可能的副作用?
它有点假设 Mobile Safari/WebKit 是标准,其他浏览器应该与之保持一致。我们曾经遇到过这种情况,并称之为 IE6;)
我还没有任何链接或数据,但我相当确定这修复了 iOS 之外的错误。我认为这个错误与 webkit 相关,webkit 的影响范围更广。
有人需要 maximum-scale=1 的用例吗?
有些人举例说这是不好的,因为你的用户无法放大图像。好吧,如果你正在制作一个响应式网站,并且你的用户需要放大才能阅读文字或图片,那么你可能需要重新考虑一下你是否做对了。;-)
以 CSS-tricks 为例。没有必要放大任何地方。另一方面,Codepen 完全不响应,因此需要放大。
在我几年前写这篇文章的时候 - https://alwaystwisted.com/articles/2013-01-10-dont-do-this-in-responsive-web-development - 基本上是在抱怨那些设置最大缩放比例的混蛋,这样就没有机会放大。
我也碰巧在 Windows 8(不是 8.1)中发现了一个错误,除非你包含初始缩放比例。因为是两年前的事情,而且看到了
我愚蠢地没有在我的文章中记录下来。我实在想不起来为什么我一直保留它,并一直把它放在我的 html 中。
我已经使用“meta name=”viewport” content=”initial-scale=1″”一段时间了。
添加“width=device-width”充其量是多余的,而且我不知道省略它会造成什么问题。(请随时纠正我!)
据我所知,“缩放错误”是故意的。device-width 始终是纵向方向的宽度,不会改变,无论你是旋转还是第一次在横向方向加载页面(所以对于 iPhone 5 之前的版本,device-width 始终是 320px)。
Chris,
看起来 CSS Tricks 仍然使用
这是有原因的吗?
感谢这篇文章!
我想在更改它之前进行测试。CSS-Tricks 确实会放大,但空间填充得很好。我相信下次我重新审视这里的一些设计内容时,我会处理这个。
好的,这就是我的猜测。顺便说一下,我似乎已经使用 initial-scale=1 几年了;到目前为止,一切顺利。不幸的是,没有时间或预算进行设备实验室测试,不过;)
我始终使用 initial-scale=1,这修复了比我能数得过来的更多问题!不仅是苹果设备,很多 IE 问题也得到了解决。
另一方面:我从不阻止用户缩放。我的一个主管有视力问题,不让我在测试了缩放因子之前将任何东西推送到生产环境。我们已经就这是否意味着网站实际上并非总是看起来很棒进行了几次对话。对他来说,允许他缩放很重要;对我来说,重要的是他不认为我的作品比其他作品差,因为我没有计划在页面上进行 3000% 的缩放。^_^
发现了一些很酷的东西,将成为我的 CSS 重置的一部分。
这将防止 Safari iOS 在按下输入字段时在 iPad 或 iPhone 上放大。通常,你会看到这种情况发生在开发人员将搜索字段放在移动友好菜单中的时候。你点击搜索字段,砰,你的网站就超出了它漂亮的画布。