【发布时间】:2011-09-27 14:35:03
【问题描述】:
我有一个特定于 Webkit 浏览器(Safari 和 Chrome,Mac 和 PC 上)的问题。
我正在使用 Raphael JS 呈现 SVG 数据,并使用响应式布局通过浏览器窗口缩放 SVG。使用 JQuery 将 SVG 设置为 100% 宽度/高度。包含元素的宽度以百分比设置,以在页面调整大小时保持布局的比例。
问题在于 Webkit 没有正确计算高度,它在 SVG 图像周围添加了额外的像素(有时是数百个);这破坏了布局。
如果您在 Webkit 浏览器中打开以下链接,您将看到绿色的额外像素区域。如果您在 safari 中使用开发人员检查器,您会看到报告的 SVG 大小大于显示的 SVG。
http://e-st.glam.ac.uk/simulationgames/svgheightbug/index.html
如果您在 Firefox 或 Opera 中打开链接,您会看到布局正常(这里的绿色是我故意设置的边距造成的)。
IE8 遇到了类似的问题,使用 height:auto 已修复,但这在 Webkit 中不起作用。
还有其他人遇到过这个问题吗?有人有解决办法吗?
我认为这可能是一个 Webkit 错误(已经检查了夜间构建,问题仍然存在),但在我记录它之前,我想先检查以确保没有其他人有解决方案。
【问题讨论】:
-
我仍在努力了解您想要什么。我已将您的示例缩减为(希望)是一个更简单的测试用例:phrogz.net/SVG/find-a-room.xhtml 如果此文件显示您的问题,请描述您想要看到的内容,以及您所看到的内容(以及操作系统/浏览器/版本) ) 你看到这个了。
-
好的,我遇到的问题出现在所有版本的 Webkit 中(也就是说,Safari OS X 和 Windows、iOS 上的 Safari Mobile、Chrome OS X 和 Windows)。问题是,尽管 SVG 以正确的大小显示(其高度与宽度成比例确定,并且由于其容器以百分比设置,因此可以很好地无限缩放)其高度未正确报告,从而导致容器SVG 的位置比显示的 SVG 高。
-
从逻辑上讲,HTML通过里面的内容来定义容器的高度;除非设计师明确限制。因此,SVG 容器的高度(在上面的示例中
)应该与显示的 SVG 的高度相同。 -
使用 Safari Develop 工具检查 SVG,我的浏览器屏幕的当前宽度,SVG 的尺寸为 516x1075px。您可以用肉眼看到 SVG 不高于其宽度。 SVG 在宽度 516px 处的高度为 526px(原始高度 288px / 原始宽度 282px * 当前宽度 516 = 526px),这是 SVG 显示的尺寸。但是因为高度值计算不准确
认为它的高度应该是 1075,因此是绿色区域。 -
以下 Javascript/JQuery 代码修复了该问题。 function fixWebkitHeightBug(){ /* 调整校园元素的大小 */ var CampusW = 282; var 校园H = 288; var curCampusW = $('#campus').width(); var newCampusH = heightInRatio(campusH,campusW,curCampusW); $('#campus').height(newCampusH);函数 heightInRatio(oH,oW,nW){ 返回 (oH / oW * nW); } } $(window).resize(function() { fixWebkitHeightBug(); }); $(document).ready(function() { fixWebkitHeightBug(); });