【发布时间】:2013-09-28 22:00:15
【问题描述】:
请考虑我们有一个简单的 SVG 文件,其中包含圆角半径等于 10 的圆角矩形的代码:
<svg xmlns="http://www.w3.org/2000/svg" width="100" height="100">
<rect fill="#FACE8D" x="0" y="0" width="100" height="100" rx="10" ry="10" />
</svg>
Chrome 中的外观如下:
现在我们将此图像用作 CSS 中 border-image 属性的值:
.box {
@include border-image(url('rounded-rectangle.svg') 10);
border-width: 10px;
background: #FFF;
width: 50px;
height: 50px;
}
现在让我们看看它在不同浏览器和设备中的样子:太棒了,图像按预期跨越了元素的边界。
但是,当我们最终在配备视网膜屏幕的设备上查看这些内容时,我们会遇到一些完全的废话:SVG 似乎增长了两倍。我们所看到的只是一个巨大的角落。
如果我们用类似的 PNG 替换那个 SVG,一切都很好。看一下(iOS 5.1 出于某种原因将元素的内部部分涂上了图像颜色,但这不是本题的主题):
问题是:这可以处理吗?也许,我有一些错误的 SVG?或者我需要用一些棘手的东西设置视口元标记来阻止border-image 缩放?
这个问题很重要。首先,SVG 之所以流行,主要是因为视网膜。它是一种装饰事物的工具,而不必担心它们看起来像双倍像素的垃圾。
其次,border-image 属性的机制和语法与 -webkit-mask-box-image 专有属性非常相似,使用它仍然是圆角包含绝对定位的子块的唯一方法(例如,Google Maps v3只能通过它在 Chrome 和 Safaries 中四舍五入)。当我们需要为 UI 元素设置一些棘手的轮廓时,这个属性在使用 Web 组件的移动开发中非常有价值。可悲的是,通过这个属性,它的 SVG 尺寸翻了一番,就像border-image。
更新。似乎这个问题可能是由 iOS 6.0 中引入的updated SVG processor 引起的:在视网膜上 SVG 尺寸以 CSS 像素计算,而坐标以视网膜像素计算。有somebugs跟踪与我的问题类似。
【问题讨论】:
-
只是在黑暗中拍摄,尝试用
viewBox属性替换尺寸:<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 100 100"> -
我遇到了同样的问题,但这并没有解决我的问题。
-
现在 viewBox 的值“100”在理论上意味着“100px”。所以它应该真的变小了。然而,它看起来实际上是它的两倍。您是否尝试过转换为物理单位?在 96 的标准 SVG/CSS dpi 下,100 像素约为 1.04 英寸。尝试将 SVG 和矩形的宽度和高度设置为“1.04in”,看看会发生什么。半径为“0.1 英寸”。可能是一个长镜头。
标签: html svg mobile-safari css