Chrome,CSS - 缩放敏感布局

7

设置:

我有一个简单的圆角框,其中包含标题,并根据文本量扩展,如Dan Cederholm的《弹性网页设计》(ISBN 0-321-34693-9)所讨论的那样。

它在Google Chrome中缩放时出现问题,右边距消失。

在IE和FireFox中没有问题。

示例:

在jsFiddle上的示例

在Chrome浏览器中,当缩放到110%或其他缩放比例时会失败。在IE或FireFox中没有任何问题。

问题:

  1. 有什么想法是什么导致了这个问题?

  2. 一般来说,什么会使布局对缩放敏感(如果存在这样的普遍规则)?

  3. Dan Cederholm的书真的是“弹性”的吗?


2
浏览器缩放容易出现舍入误差,非常糟糕。 - Diodeus - James MacFarlane
@Diodeus:虽然很糟糕,但用户还是在使用它...而且问题只出现在Chrome浏览器中。有什么想法吗? - awrigley
1
我在这个问题上的成功有限。全面讨论这个问题会很有趣。我希望有更多关于这个主题的帖子。 - Diodeus - James MacFarlane
当我缩放时,Chrome中没有看到任何奇怪的东西。你所说的“右边距”消失是什么意思?看起来根本没有右边距。 - brentonstrine
我认为问题高度敏感,取决于使用的特定CSS。就像有些会,有些不会。 - awrigley
我在Chrome中也没有看到任何问题。在缩放时,一切看起来与FF完全相同。我在Chrome版本19.0.1084.56上进行了测试。请检查您的版本并向我反馈 :) - Sófka
2个回答

6

你需要兼容到哪个版本?

我的意思是,如果可以放弃支持IE7/8,应该使用CSS3圆角。如果需要支持IE8/7,应该考虑在这种情况下使用优雅降级。在所有浏览器中都追求完美可能不值得花费时间和精力,因为当浏览器永远不会再更新时,这个目标是无法实现的。

1)可能是什么原因引起的?

那是一个相当广泛的问题,我无法重现这个问题,或者在Chrome 20(beta)中找到一个问题,所以我将列出一些可能会出错的事情。

  • 一般浏览器的四舍五入误差,浏览器不精确,不是设计为亚像素精度的。
  • 将px值与其他值混合使用,不同的舍入方式使值相加的结果不同。
  • 内联元素的定位受到页面上其他内联元素的影响(这些通常很难跟踪)。
  • 父元素属性(例如带有溢出隐藏、固定大小的父元素,在jsfiddle中可能是问题所在)。
  • 浏览器中的错误。
  • 以上因素的组合。

在这种情况下,jsfiddle在页面上有大量的容器和框架(设置了隐藏的溢出、固定的高度/宽度、基于像素),即使在“全屏”视图中也是如此。因此,如果您真的想确保,可以在自己的电脑上创建一个html文件进行打开/测试。

2)总的来说,什么会使布局对缩放敏感(如果存在这样的一般规则...)?

在当今的浏览器中,这可能并不是特别相关,因为缩放功能通常非常先进,甚至可以轻松缩放基于完整像素的布局。唯一真正存在问题的浏览器是仍在使用的IE7。IE7的缩放能力很糟糕,因此您应该仅使用基于%或em的文本值。
唯一“官方”的相关指南可以在 WCAG 2.0中找到,这是w3无障碍性指南/技术的概述。

因此,浏览器可以进行缩放,现代浏览器在这方面没有问题,但它们并不是为了准确性而设计的,而且由于混合单位(em、%、px),这也是一项不可能完成的任务。

3) 丹·塞德霍姆的书真的防弹吗...?

在我开始之前,我没有读过这本书... 我从未读过生活中的CSS书籍(有很多其他资源),但我最首要的技能是梦想它。

让我们从“什么是防弹?”开始。在网页设计中,“防弹”意味着它将在任何地方都能正常工作,并且不会崩溃。这单独就应该给你一个线索。

当他写那本书时,它很可能是防弹的,但网络是一个充满活力的地方,即使我看最新的博客文章,它的发布日期是去年12月。自那时以来,至少有3个新版本的Chrome发布了(粗略估计),甚至还有更多的Firefox版本。这次微软坐在了他的屁股上(如果他们决定进行快速发布时间表,我们就会陷入麻烦)。

事情发生了变化,新的错误肯定会在此期间引入。

无论是什么导致它出错,没有什么是真正防弹的,只是非常接近你想要的总是发生,浏览器之间略有差异。

这并不意味着这是一本糟糕的书,看他的简历,他绝对是一个网页设计领域的专家,因此他在很多方面可能是正确的。我只希望他能解释为什么要以某种方式完成某些事情,因为这样会让你比仅仅学会做事更加明智。

A: "You always use EMs for text! EMs are annoying! Why do you do that anyway?!"
B: "I dunno, read somewhere I should..."
A: "Lets just use pixels! Pixels always work."
B: "Hmmm ok."

你刚刚失去了IE7的支持。(这是否是一件坏事,另当别论)


1
我在考虑这种可能性,即jQuery的height()方法没有考虑缩放。也许问题比我希望的更加复杂。 :( - Steven Soroka
jsfiddle 中没有包含任何JavaScript代码... 但这对我来说听起来很奇怪,因为在Chrome中,元素上设置的高度会按比例缩放到计算出的高度上(所以100像素 @ 150% = 实际上是150像素)。但你可以轻松地测试一下。创建一个带有红色背景的div(外部div,应该有overflow: hidden属性使边距位于其内),以及一个绿色背景的内部div。添加按钮以在缩放后引发填充和/或高度增加的操作。比较缩放时的结果(截屏)和缩放时的结果... - sg3s
如果这是问题的话,我唯一建议你尝试使用基于百分比的布局和jQuery进行修改。 - sg3s
@StevenSoroka 如果您想检测缩放级别,您可能需要阅读这个相关的问题:https://dev59.com/0XI-5IYBdhLWcg3wta1q - sg3s

5

首先,你正在使用background-image,这是我希望你能提到的。

1)正如在您发布下面的评论中提到的那样,这只是div的舍入误差,这会裁剪background-image。

2)我没有来源,但根据我的经验,使用文本作为测量对象的对象会受到缩放的影响,图片有时不会相对于其他所有内容进行缩放,并且具有预定“设置”大小的内容(例如文本区域,单选按钮等)。

3)没有什么是百分之百可靠的,尤其是像Web这样不断变化的东西,它在不同的浏览器上行为也不同。职业的危险。


注意:我理解为什么你使用图像而不是硬核检查,但不应该假设人们知道这一点 :) - Fewfre

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接