【问题标题】:SVG not rendering as expected in mobile browsersSVG 在移动浏览器中未按预期呈现
【发布时间】:2014-09-29 19:11:18
【问题描述】:

我使用 Inkscape 生成了 SVG 图像。该图像似乎在桌面浏览器中按预期呈现。在移动设备上,它在右侧被切断,并且 SVG 内的元素的位置被关闭。

这是 Inkscape 生成的 SVG 代码:

<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<!-- Created with Inkscape (http://www.inkscape.org/) -->

<svg
   xmlns:dc="http://purl.org/dc/elements/1.1/"
   xmlns:cc="http://creativecommons.org/ns#"
   xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
   xmlns:svg="http://www.w3.org/2000/svg"
   xmlns="http://www.w3.org/2000/svg"
   xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
   xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
   viewBox="0 0 216 40"
   preserveAspectRatio="xMidYMid meet"
   id="svg2"
   version="1.1"
   inkscape:version="0.48.5 r10040"
   width="100%"
   height="100%"
   sodipodi:docname="Blisscount.svg">
    id=&quot;svg2&quot;
    version=&quot;1.1&quot;
    inkscape:version=&quot;0.48.5 r10040&quot;
    sodipodi:docname=&quot;Blisscount.svg&quot;&gt;

    <defs
   id="defs4" />
<sodipodi:namedview
   id="base"
   pagecolor="#ffffff"
   bordercolor="#666666"
   borderopacity="1.0"
   inkscape:pageopacity="0.0"
   inkscape:pageshadow="2"
   inkscape:zoom="3.959798"
   inkscape:cx="108.05012"
   inkscape:cy="13.083765"
   inkscape:document-units="px"
   inkscape:current-layer="g2989"
   showgrid="true"
   inkscape:snap-grids="false"
   inkscape:window-width="1024"
   inkscape:window-height="706"
   inkscape:window-x="-8"
   inkscape:window-y="-8"
   inkscape:window-maximized="1"
   showguides="true"
   inkscape:guide-bbox="true">
  <inkscape:grid
     type="xygrid"
     id="grid3762"
     empspacing="5"
     visible="true"
     enabled="true"
     snapvisiblegridlinesonly="true" />
</sodipodi:namedview>


/&gt;
    <metadata
   id="metadata7">
  <rdf:RDF>
    <cc:Work
       rdf:about="">
      <dc:format>image/svg+xml</dc:format>
      <dc:type
         rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
      <dc:title />
    </cc:Work>
  </rdf:RDF>
</metadata>
<g
   inkscape:groupmode="layer"
   id="layer2"
   inkscape:label="block"
   transform="translate(0,-60)" />
<g
   inkscape:label="Layer 1"
   inkscape:groupmode="layer"
   id="layer1"
   transform="translate(0,-1012.3622)"
   style="display:inline">
  <g
     id="g2989">
    <g
       id="g3039">
      <text
         xml:space="preserve"
         style="font-size:50px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;line-height:125%;letter-spacing:0px;word-spacing:0px;fill:#333333;fill-opacity:1;stroke:none;font-family:Calibri;-inkscape-font-specification:Calibri"
         x="37.767944"
         y="1049.1346"
         id="text2985"
         sodipodi:linespacing="125%">lisscount </text>
      <g
         id="g3013">
        <rect
           y="1012.3622"
           x="0"
           height="40"
           width="40"
           id="rect3760"
           style="fill:#0079c1;fill-opacity:1;fill-rule:nonzero;stroke:none" />
        <text
           xml:space="preserve"
           style="font-size:50px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;line-height:125%;letter-spacing:0px;word-spacing:0px;fill:#ffffff;fill-opacity:1;stroke:none;font-family:Calibri;-inkscape-font-specification:Calibri"
           x="5.3881836"
           y="1048.1581"
           id="text3012"
           sodipodi:linespacing="125%">B</text>
      </g>
    </g>
  </g>
</g>
</svg>

它应该是这样的:

Inkscape 环境中的屏幕截图。

-

来自 Firefox 环境的屏幕截图。

-

这就是它在移动浏览器上的样子。

这是我正在使用的 HTML:

<a id="logo_container" href="index.php">
    <object class="main_title" data="../global/img/Blisscount.svg" type="image/svg+xml">
        <img src="../global/img/Blisscount.png" alt="Blisscount" />
    </object>
</a>

这是 CSS:

#logo_container {
    height: 50px;
    width: 216px;
    position: relative;
    display: inline-block;
    z-index: 1;
    font-size: 50px;
    line-height: 40px;
}
.main_title {
    height: 100%;
    width: 100%;
    z-index: -1;
    vertical-align: middle;
    pointer-events: none;
    font-size: 50px;
    line-height: 40px;
    cursor: pointer;
}

【问题讨论】:

  • 您是否尝试过:&lt;div id="mySvg"&gt;&lt;svg ...&gt;...&lt;/svg&gt;&lt;/div&gt; - 而不是将其嵌入到对象中? - 喜欢codepen.io/anon/pen/dEqeu?editors=100
  • 我没有尝试过,因为 svg 文件太长了。为什么会有所作为?
  • 只是想知道移动浏览器在呈现&lt;object&gt; 标记时是否存在问题。就这样。我正在再次查看您的 CSS,看起来您的字体大小和行高可能相互勾结(在 &lt;a&gt; 标记或 &lt;object&gt; 标记中。
  • 啊,我明白了.. 我会试一试的。我已经广泛测试了css。绝对不是那样。我只是尝试删除其中一种字体设置,但没有任何区别。一旦我尝试直接放入 SVG,我会回复你
  • 另一件事是,如果您查看我提供的图像,看起来移动浏览器正在使用更大的字体或类似的东西呈现文本。可能是不同的字体,因为“i”上的点看起来是方形的,而桌面版本是圆形的

标签: html css svg render


【解决方案1】:

问题确实是缺少字体。

解决方案是将文本转换为 SVG 路径。 例如,在 Inkscape 中,您可以选择文本并转到路径->对象到路径(或 shift+command+c

如果不这样做,请搜索“ text to outline”

【讨论】:

    【解决方案2】:

    查看 SVG 的内容,我看到了 Calibri 字体的使用...也许您的移动浏览器没有它(这也是 'i' 看起来如此方正的原因)

    【讨论】:

      【解决方案3】:

      看起来移动浏览器不支持字体系列 Calibri,因此将 SVG 文本呈现为 Arial。 Arial 是一种更大的字体,它解释了右侧的文本被截断以及字母“B”未对齐。

      【讨论】:

      • 哈,我也只是在输入答案:)
      猜你喜欢
      • 2021-03-12
      • 2021-12-21
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-02-23
      • 2018-10-01
      • 2014-09-29
      • 2017-01-26
      相关资源
      最近更新 更多