最近有一些关于关闭响应式设计的讨论:Bruce Lawson、Webmonkey,我之前也写过关于它。 需要明确的是,我非常喜欢响应式设计,但我希望我们都能同意,对工具教条主义毫无意义。
命运使然,我收到了一位读者的邮件
我使用的是 13 英寸的 MacBook Air,并且在浏览网页时经常使用缩放功能,因为我的视力不太好。
您的网站在这方面很难操作,因为全局百分比宽度会压缩内容。我在很多 RWD 网站上都发现了这个“bug”。这使得我很难访问内容。
他们是正确的。缩放几次没什么大不了的,但当你缩放四五次时,内容就会变得非常混乱。

出于好奇,我问道:“如果页面扩展到超出浏览器窗口宽度,对你来说是否更好?这样你也可以水平滚动?”
是的,我更喜欢水平滚动。我认为如果我通过放大导致页面中断,那么我也应该负责水平滚动。
听到这个很有意思,因为水平滚动是网页设计师普遍厌恶的事情之一,我们不惜一切代价避免它。即使在固定宽度时代也是如此。我们应该提升到*倒吸一口凉气* 1024px 宽度的网站吗?不!这可能会导致水平滚动!
需要明确的是,我仍然认为这是一件坏事,只是有趣的是有人认为如果他们“破坏”了页面,就应该“负责”这样做。他们需要感觉自己需要“破坏”网站才能阅读它,这真让人沮丧。
这是我的错。但是基于 EM 的媒体查询可以解决!有点!
我的媒体查询使用的是像素。如果将它们更改为 EM,那么当您放大时,EM 大小会发生变化,媒体查询应该会在像素媒体查询无效的地方生效。所以我就是这么做的,效果很好!**但是请注意:您必须刷新屏幕才能看到媒体查询生效,**它不会随着缩放而发生。我希望它能这样做,但我怀疑经常这样做的人知道需要刷新。根据我的经验,至少 Chrome 对每个站点的首选缩放级别特别持久。
我的基本字体大小是 16px,所以我只需对所有这些进行“在项目中查找”并进行转换。
@media (max-width: 1200px) { }
变成
@media (max-width: 75em) { }
幸运的是,我使用了花哨的 Sass @content 混合宏,因此通过更改一个混合宏就更改了绝大多数内容。
请注意,我甚至在较小的宽度下降低了我的字体大小,但浏览器缩放足以使文本更大。
此外,感谢 Lyza Gardner 几乎一年前向我们展示了基于 em 的媒体查询的优势。
假设过大?
所以现在我已经“修复”了这个问题,并且布局在放大时不再“中断”。但这对于给我写信的读者来说绝对更好吗?他们明确告诉我他们更喜欢水平滚动,而这不是我提供的解决方案。我假设没有水平滚动的未中断布局更好。但谁知道呢,也许他们不喜欢移动布局,即使我不限制您可以做什么。永远都在跳舞。
媒体查询至少在 Firefox 中可以无需刷新就生效!
哦,知道了,太棒了。Chrome 仍然不行。我希望他们有一天能做到。
Firefox 18 对我来说不行。基于 EM 的媒体查询似乎与我在 Chrome 中看到的没有任何效果。
好吧,现在我觉得自己很傻。不是一个人,而是两个人抢先一步!
糟糕!没关系。一切正常,只是我的显示器太大。Firefox 最大化到 2560 x 1440 并完全放大后看起来像这样 http://cl.ly/image/0o0s2t3v3M3v,如果您想知道的话。
它们也可以在 Chrome 中生效!您只需调整页面大小以触发媒体查询即可。
我认为一些 JavaScript 技巧可以让浏览器认为每次有人放大浏览器时页面都已调整大小。
Chris,感谢您的帖子。非常有趣。
值得注意的是,Firefox 不需要刷新即可应用新的基于 em 的媒体查询规则。
糟糕,John 抢先一步!
好吧,现在我觉得自己很傻。不是一个人,而是两个人抢先一步!
“重复”帖子可以帮助我们更好地了解受众的集体想法。我仍然觉得这很有帮助。
Firefox 会在您缩放页面时触发媒体查询(无需页面重新加载),很好地缩放内容并保持内容美观。另一方面,WebKit 浏览器不会这样做,需要页面刷新。我很好奇这是否会在未来发生变化,如果对此有足够的关注。
感谢您的提醒,Chris!我以后一定会坚持使用 EM 作为我的容器。
页面刷新仅在某些浏览器中是必要的 - Firefox 做了“正确”的事情,媒体查询会在您缩放时生效。
我本以为您使用了基于 em 的媒体查询,因为我最初是从您那里了解到它们的。
这位读者提出的观点很好。我们将来都应该更加小心。
这都是 Chrome 的错,因为在 Firefox 中不会发生这种情况,在 Firefox 中,您甚至可以通过缩放 6 倍来模拟视网膜。
像素已死!只要您在响应式设计中使用过像素,您就是在做错事。
我们在新的 http://etchapps.com 构建中基于 em 的媒体查询取得了良好的效果,尽管让 JS 和 CSS 协同工作很有趣……
非常感谢您的读者提出这个问题。我遇到过同样的问题,很久以前甚至写过博客文章。Apple.com 根本没有响应式设计,但在手机上却易于阅读,因为您可以轻松放大文本。许多(尽管不是全部)响应式网站会取消这种功能,我只能放弃阅读网站上的任何内容。网页设计社区最终会解决这个问题。
你不能让每个人都满意,但你可以围绕首选体验进行设计。我很好奇,如果最初的访客也使用移动设备,他们是否会更喜欢预裁剪/缩放的视口。
我认为在某些极端情况下,人们确实希望在小设备上获得密集的桌面视图(如果您的网站响应性过强),或者实际上希望字体更小,但这可以通过设计本身来修复。考虑少数人的意见是好的。问题的一部分还在于,媒体查询在错误的人手中可能会伪造缩放并以用户不希望的方式更改设计元素,或者完全扰乱用户的查看环境。因此,请注意缩放和平移的用户。
跑题了——但是,我不知道你们是不是也这样,但那个动画 GIF 真是烦人 >_< 。如果可以停留在您想要查看网站“断裂”阶段的帧上,而无需一遍又一遍地观看这个该死的循环……那就太棒了 :p
正题——用户给您发送邮件告知问题很好,但更重要的是,他/她愿意为破坏网站承担“责任”,因此愿意处理水平滚动。
但是,这种类型的用户很可能在整个地球上都只有一个(好吧,不是一个……两个)。大多数用户远没有您收邮件的那位用户那么理解,因此他们会继续做的事情就是离开网站。
尽管如此,该用户的反馈还是提供了一个解决方案,该方案使上面我提到的“大多数”用户受益。
天哪,我们真是幸运,那个用户给您发了那条消息。
非常感谢他/她以及您。
我以前也多次听到过这种情况,主要来自老年人。
是否可以通过一个按钮(即一些小 JavaScript)锁定 CSS 将读取的浏览器宽度?
以便浏览器(或至少是它的 CSS 解析器)认为页面仍然(例如:1920px)宽。
这样,缩放就很容易了,因为所有响应式代码都突然“锁定”了。
也许比使用 EM(需要刷新)更容易理解。
谁来补充一下?
另一个可以为您管理断点的 Compass 扩展程序恰如其分地命名为“Breakpoint”,它允许您以像素为单位指定媒体查询断点,但编译后的 CSS 将包含 em。
Breakpoint 非常方便,因为我们检查、调试,并且(在大多数情况下)以基于 px 的单位思考屏幕,但正如许多人指出的那样,最好使用基于 em 的媒体查询。Breakpoint 允许您同时拥有这两种方式!
这个扩展看起来很不错。
但是,文档没有清楚说明何时使用
$breakpoint-to-ems: true;
。您究竟在哪里设置此命令?
谢谢。
我通常将
$breakpoint-to-ems
标志放在我的配置部分中,该部分位于任何实际样式之前。无论哪种方式,都需要在使用生成媒体查询的任何 mixin 之前设置它。如果 Breakpoint 对您来说不够 DRY,还有一个名为 Respond-to 的包装扩展程序,它输出与 Breakpoint 相同的代码,但将一些重复的配置捕获到单个变量中。我实际上更喜欢使用 Respond-to 而不是普通的 Breakpoint。
抱歉要问,但您所说的“配置部分”是什么意思?我仍然不清楚需要将此指令放在哪里,如果它是一个标志,当您让 Sass 开始监视(sass –watch…)时,或者您是否将该标志放在 .scss/_mixins.scss 文件中的某个位置。
提前感谢。
希望可以编辑我的评论……
Chris,不用担心,我认为在查看项目的
_breakpoint.scss
文件后,我找到了答案。我看到$breakpoint-to-ems: false !default;
只是一个变量。但是,它显示
!default
,那是什么意思呢?再次感谢。
Ricardo,
false
是$breakpoint-to-ems
的默认值,但如果您在 Sass 文件的开头将该变量设置为true
,那么您只需要这样做。我指的是配置部分,它是我为每个项目创建的部分。它不是由我们讨论的任何工具定义的。我在声明任何样式之前对其进行@import,因此它是一种设置将在我的 Sass 项目中使用的全局变量的便捷方法。
轻微的琐事。在使用 Safari 时,放大会压缩响应式容器内的内容。但是,当使用手势缩放(即在元素上双击触控板)时,它可以正常放大。类似于它在触摸设备上的缩放方式。
我认为这很棒。桌面浏览器确实应该允许您以两种方式放大。一种方式利用网站的媒体查询,另一种方式应该是更类似于移动设备的捏合缩放样式,其中您可以获得原始布局,只是更大。
很棒的东西。我从未想过缩放,但它确实让这个网站 http://i-cart.org 看起来很糟糕。现在切换到 em,效果还不错。
使用 em 的另一个好处是,如果用户希望您的网站占据他们屏幕的一半,从而触发您的媒体查询之一,他们可以缩小以恢复“完整桌面”版本,或者放大以查看更多类似移动设备的版本。它使用户能够更加灵活地控制您的网站。
美味。
我发现,随着设备和多浏览器使用率的不断提高,创建一个对所有人都有效的网站是一场噩梦,同时还要牢记硬件性能差、浏览器过旧和支持技术的用户……在网站使用数据表明用户基础非常广泛的项目中。我最近的项目遇到了这个问题,但考虑到新技术的用户的“渐进增强”并专注于一些核心可访问性方面(有效的对比度和标记中的角色),使用流体和响应式媒体查询的混合,可以实现 90% 以上有效的网站。
它正在工作。
Firefox 18.0
Ubuntu 12.10
我将尝试这个。
谢谢。
好吧,在 90 年代,我们只有一个屏幕尺寸——15 英寸,一些 HTML 标签,而且没有太多东西需要混合。今天,我们有了从 3 英寸到 30 英寸的屏幕,以及许多需要组合的标签,挑战更大。我认为设计最好的方法是拥有响应式设计师,始终准备好满足客户的需求,使用他所能使用的每种方法。Chris 在本文中向我们展示了一种方法。
谁能想到响应式网页设计会有缺点?
不过,这很有趣,因为现在的趋势是字体大小越来越大,因为屏幕分辨率越来越高。我见过一些字体大小为 17/18 像素的网站。
我真的很讨厌字体越来越大。我喜欢清晰的小 11 像素(Photoshop 中的 9pt)像素字体。我不确定为什么我这么喜欢它们,但它们绝对为页面增添了一些魅力。(看看 Facebook 并将最小字体减小 1 像素)。我并不是说大而清晰的字体看起来不好,但我怀念像素字体。
此外,制作响应式设计需要更多的计划,我仍然没有找到制作响应式布局的正确工作流程。
这只是 Chrome 的错误行为。它根据物理设备像素而不是虚拟 CSS 像素评估其媒体查询。我认为这是错误的。Firefox 做对了。
例如:浏览器窗口宽度为 1000 设备像素,您放大 200%,html 元素现在宽度为 500 CSS 像素,但任何 500px 的媒体查询都不会触发,因为 Chrome 仍然认为视口宽度为 1000px。
即使在缩放时,Firefox 也会正确更新 window.devicePixelRatio 以反映 CSS 像素和设备像素之间的比例。
例如:放大到 200%,window.devicePixelRatio 现在设置为 2,因为屏幕上的像素数量是页面上的两倍。对于可以利用全分辨率的响应式图像来说,这是一个好消息,即使在放大时也是如此。
Chrome 不会这样做,window.devicePixelRatio 仍然为 1。
谢谢 :-)
你好,
我是那个向 Chris 提问这个问题的用户。
更深入地说,我认为 Macbook Air(非视网膜但像素密度高)用户遇到此问题的原因与 iPad Mini 和“恼人的视口”问题相同。
Apple 需要更多地考虑其高像素密度设备的视口。
几个月前,Cloud Four 的 Lyza Gardner 写了一篇关于这个主题的非常详细的博客文章。她详细介绍了它的工作原理和原因。这篇文章可能与本文一起阅读。
真正吸引我的是她解释说,通过使用基于 em 的媒体查询,你的网站会根据内容而不是视口大小做出响应。所以,如果有人完全放大访问你的网站,媒体查询就会生效,因为 em 是相对于你的缩放比例的。然而,使用 px 它们不会生效,因为 px 是与视口相关的。
从那以后我就一直在使用 em。
文章在这里
http://blog.cloudfour.com/the-ems-have-it-proportional-media-queries-ftw/
我喜欢大字体,希望它能闪闪发光或有一些特殊效果。
真是太巧了。昨天,我正在与大学的在线媒体委员会开会,讨论即将进行的重新设计的进展。有几个评论提到,当他们通过电话引导某人浏览网站时,似乎每个人都放大了 – 甚至包括教职工。评论大致是,“天哪,这看起来真的很挤压,很奇怪。”我之前没意识到基于 em 的媒体查询可以“解决”这个问题,我准备试一试。
对于任何与仅具备一般网络知识的用户打交道的人来说,这都是有关可访问性的智慧。
嗨,Chris,
值得注意的是,WebKit 中存在一个 bug,导致缩放不会触发媒体查询:http://alastairc.ac/2012/01/zooming-bug-in-webkit/
FF、IE 和 Opera 都能正确处理,但 Safari 和 Chrome 仍在赶上来。
我与有可访问性问题的人(包括使用缩放)进行可用性测试,在非 WebKit 浏览器中,RWD 通常在笔记本电脑和台式机上运行良好。
当然,这与人们是否更喜欢桌面布局(正如 Bruce 最近所写)以及移动设备上的选项非常有限的问题不同。
我的天,那是一个动画 GIF?太棒了!很棒的文章!
这是一个很棒的想法,伙计,我最近更多地使用 EM 了,我创建的网站允许人们创建所见即所得风格的打印产品预览,而 EM 允许我通过媒体查询调整预览大小,而无需为每个断点编写大量的 CSS。我之前没有想到在实际的媒体查询中使用 EM,但现在一切都说得通了。我还使用了将输入和文本区域文本放大到 16px 的技巧,以避免用户在 iOS 上添加内容时出现的缩放影响。
当查看此网站时,用户仍然需要缩放,这真是令人遗憾。文本已经很大了。
感谢分享,Chris。
我发现如果在媒体查询中使用 REM 单位,它会在你缩放时更新。
查看以下演示
http://fvsch.com/code/bugs/rem-mediaquery/
干杯!
我在所有桌面浏览器中测试了基于像素的 @media 查询,似乎只有 Chrome 存在此问题……
当然,如果你要使用 em,你应该全面使用它们。
@Matthew – 演示很棒,所以看来“em”是最佳选择。
媒体查询中对 rem 单位的支持似乎并不一致。它在 Chrome 中有效,并在你缩放时更新。在 Safari 中,媒体查询(以及其中的所有样式)都被忽略了。在 Firefox 中,媒体查询被忽略,但媒体查询内的样式会被应用。就我个人而言,我喜欢 Chrome 的行为,但这只是我个人的看法。这正是我期望 em 所做的。
@chris coyier:你将原始媒体查询的尺寸除以 16px,因为你的“基本字体大小是 16px”。但它似乎与你的基本字体大小无关(我认为是设置为 HTML 或 BODY 元素的字体大小)。我设置了一个 jsFiddle,其基本字体大小为 50px,请参阅 jsfiddle.net/lmeurs/jML58/。
很棒的文章,但是移动设备上的捏合缩放呢?我看到,当使用 Bootstrap 时,我拥有的两段话喜欢在主页上相互挤压,而不是像标准的 PC/Mac 浏览器那样堆叠。
我该如何解决这个问题?我在我的评论中发布了我的网站,我使用 Android Google Chrome 查看了它,但是我在 iPad 的 Safari 等其他移动设备上测试过,它也是同样的问题。
http://www.surakusa.com
好吧,现在即使你在像素中声明断点,当我们缩放它(cmd+)时,网站也会变得响应式。