SVG <Image> 标签仅在 iPhone 上部分呈现
SVG <Image> tag only partially rendering on iPhone
我一直在基于 HTML、SVG 和 Javascript 在我的 PC 上开发网页“游戏”。它通过 SVG 标签将地球的大图像加载到 SVG 视图中。在我的电脑上测试这没有问题,但是最近我将它发布到 public 网页(http://rbarryyoung.com/EarthOrbitalSimulator.html) and discovered that only the bottom right quarter of the SVG is rendering on both SVG views on my iPhone and iPad. Like this:
起初,我以为它只是 SVG 视口中的图像,但后来我意识到整个 SVG 视口除了右下象限外都是黑色的。 SVG 视口的大小正确,看起来好像有超过 3/4 的黑色遮罩(或只有 1/4 呈现)。
这是我认为相关的 HTML 代码行,包含第一个 SVG 视图(第 67 行)的 Div 标记:
<div id="divSvg1"
style="position:relative; z-index:1; margin:15px;
top:100px;
width:640px; height:640px;
background-color:black;
float:left;"
>
SVG 标签(第 104 行):
<svg id="svgEa"
style="width:100%; height:100%;"
viewBox="-7500 -7500 15000 15000"
preserveAspectRatio="xMidYMid meet"
clip-path="url(#svgEaClip)"
transform="scale(1.0,1.0)"
version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">
<!-- NOTE: All internal units are in KM (or %) -->
以及嵌入的图像标签(从第 160 行开始):
<g id="gEaAll" transform="scale(1.0,1.0)" >
<!-- ... -->
<g id="gEaSurfaceFacingBottom" class="eaSurfaceFacing">
<g id=gEarthImage>
<!-- ... -->
<image x="-6413" y="-6413" width="12826" height="12826" href="eosImages/globe-arctic 8bit.png" />
</g>
</g>
第二个 SVG 视图是带有阴影( 标记)的第一个具有相同问题的缩放视图。
我已经在我的 PC 上测试了这个,在 Chrome、Edge 和 IE 的两个屏幕上,它在所有这些屏幕上都能正常工作。我还在我的 iPhone 上用 Safari 和 Edge 测试过这个,在我的 iPad 上用 Safari、Chrome 和 Edge 测试过,但都出现了同样的故障。我已经在 SVG 之外尝试了 PNG 文件的一个裸
标签,并且在这些平台上工作正常。
我没有任何 Android 平台可以测试,所以如果有人想尝试并告诉我,我可以在此处添加这些结果。
我对此进行了研究,虽然有很多关于 iOS 不渲染图像的内容,但大多数都是完全无法渲染,而不是这种非常具体的局部渲染,以及更不具体的内容SVG 差异。最终我没有找到任何似乎是相同问题的东西。
总而言之,我的问题是:是什么导致了这个问题,或者我做错了什么,我该如何解决? (我知道我需要为移动设备设置不同的 style/CSS 布局,但我仍然需要知道需要更改哪些内容才能正确渲染)
更新
查看@fussionweb 的回答。
原回答:
您可以在 clip-path
之前尝试使用 -webkit-
前缀。这似乎是与 clip-path 有关的 safari 问题。
为您的 <rect />
添加 X 和 Y 坐标。在您的情况下,您的 Clip-Path Rectangle 不在精确坐标中。
这是适合我的代码
<clipPath>
<rect x="-7500px" y="-7500px" width="100%" height="100%" />
<cliPath>
在第 114 行和第 301 行用您的 <clipPath>
替换此代码。
这是截图
此外,这是一个在我的 Mac Safari 以及 windows Chrome 中运行的现场演示,我在那里使用了您的代码的一部分。
我一直在基于 HTML、SVG 和 Javascript 在我的 PC 上开发网页“游戏”。它通过 SVG
起初,我以为它只是 SVG 视口中的图像,但后来我意识到整个 SVG 视口除了右下象限外都是黑色的。 SVG 视口的大小正确,看起来好像有超过 3/4 的黑色遮罩(或只有 1/4 呈现)。
这是我认为相关的 HTML 代码行,包含第一个 SVG 视图(第 67 行)的 Div 标记:
<div id="divSvg1"
style="position:relative; z-index:1; margin:15px;
top:100px;
width:640px; height:640px;
background-color:black;
float:left;"
>
SVG 标签(第 104 行):
<svg id="svgEa"
style="width:100%; height:100%;"
viewBox="-7500 -7500 15000 15000"
preserveAspectRatio="xMidYMid meet"
clip-path="url(#svgEaClip)"
transform="scale(1.0,1.0)"
version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">
<!-- NOTE: All internal units are in KM (or %) -->
以及嵌入的图像标签(从第 160 行开始):
<g id="gEaAll" transform="scale(1.0,1.0)" >
<!-- ... -->
<g id="gEaSurfaceFacingBottom" class="eaSurfaceFacing">
<g id=gEarthImage>
<!-- ... -->
<image x="-6413" y="-6413" width="12826" height="12826" href="eosImages/globe-arctic 8bit.png" />
</g>
</g>
第二个 SVG 视图是带有阴影(
我已经在我的 PC 上测试了这个,在 Chrome、Edge 和 IE 的两个屏幕上,它在所有这些屏幕上都能正常工作。我还在我的 iPhone 上用 Safari 和 Edge 测试过这个,在我的 iPad 上用 Safari、Chrome 和 Edge 测试过,但都出现了同样的故障。我已经在 SVG 之外尝试了 PNG 文件的一个裸 标签,并且在这些平台上工作正常。
我没有任何 Android 平台可以测试,所以如果有人想尝试并告诉我,我可以在此处添加这些结果。
我对此进行了研究,虽然有很多关于 iOS 不渲染图像的内容,但大多数都是完全无法渲染,而不是这种非常具体的局部渲染,以及更不具体的内容SVG 差异。最终我没有找到任何似乎是相同问题的东西。
总而言之,我的问题是:是什么导致了这个问题,或者我做错了什么,我该如何解决? (我知道我需要为移动设备设置不同的 style/CSS 布局,但我仍然需要知道需要更改哪些内容才能正确渲染)
更新
查看@fussionweb 的回答。
原回答:
您可以在 clip-path
之前尝试使用 -webkit-
前缀。这似乎是与 clip-path 有关的 safari 问题。
为您的 <rect />
添加 X 和 Y 坐标。在您的情况下,您的 Clip-Path Rectangle 不在精确坐标中。
这是适合我的代码
<clipPath>
<rect x="-7500px" y="-7500px" width="100%" height="100%" />
<cliPath>
在第 114 行和第 301 行用您的 <clipPath>
替换此代码。
这是截图
此外,这是一个在我的 Mac Safari 以及 windows Chrome 中运行的现场演示,我在那里使用了您的代码的一部分。