【问题标题】:Why is my inline svg not displayed properly on Safari (desktop and mobile)?为什么我的内联 svg 无法在 Safari(桌面和移动设备)上正确显示?
【发布时间】:2023-03-08 10:26:01
【问题描述】:

为什么我的内嵌 svg 无法在 Safari(桌面和移动设备)上正确显示?

我正在尝试在几个 WordPress 网站上使用内联 svg 图形。内联 svg 的原因之一是能够设置图形的样式,而无需手动执行,然后将图形作为文件上传。

由于我是 svg 的新手,我确信代码中会有一些错误,但总体而言,它似乎适用于不同的浏览器/分辨率等。只有在 Safari 上,svg 无法正确显示。它不是水平居中显示,而是显示为偏移到图形的一部分的右侧切割。实际上它看起来好像第一个符号居中,尽管这可能是巧合。

如果我稍微玩一下 viewbox,我可以让它像它应该的那样居中 - 但是 svg 不能在其他浏览器上正确显示。

知道我哪里出错了吗?是我的代码中的错误还是 Safari 的已知错误?

<p style="font-size: 2.3em; text-align: center;"><a href="#"><svg width="135px" viewBox="0 0 563 301" xmlns="http://www.w3.org/2000/svg"
     xmlns:xlink="http://www.w3.org/1999/xlink" style="padding-top: 16px;">
    <!--Definition of one volunteer symbol -->
    <symbol id="volunteer" width="200" height="301" viewBox="0 0 200 301" style="fill: var(--color-1);">
        <circle id="head" cx="101" cy="30" r="30" />
        <path id="body" d="M189.34,44.94c-9.88,10.26-20.74,21.77-31.9,33-4.46,4.49-9.1,9.16-14.49,12.3-8.16,4.76-9.64,11.23-9.58,20.06q.66,86.7.15,173.4c0,5.13-2.44,11.54-6,14.91-2.55,2.39-9.93,2.33-13.37.32s-6.17-7.77-6.24-11.93c-.52-32.66-.28-65.33-.38-98,0-7.29-3.35-10.29-8.38-7.19-2.06,1.26-3,5.73-3,8.74-.15,32.09.07,64.17,0,96.26,0,11.05-7.79,16.8-17.68,13.4-6.87-2.36-8.51-7.92-8.5-14.48Q70,245,70,204.23c0-33-.16-65.91.09-98.86,0-5.46-1.76-8.62-5.82-12.3C45.4,76,27.09,58.43,8.67,41a48,48,0,0,1-4.84-6.1c-4.29-5.66-5.9-11.47.1-16.92,5.29-4.79,12.59-3.43,18.37,2.52,12.07,12.42,24.54,24.46,36.47,37C77.05,76.7,99.14,79,123.19,72.41a27.75,27.75,0,0,0,11.08-6.48C149.65,51.56,165,37.11,179.78,22.15c7.77-7.86,14.16-8.68,21.88-1.1,0,0,3.34,2.5-.66,9.5Z" />
    </symbol>
    <!-- Setting the symbols in place - left, middle, right  -->
    <use xlink:href="#volunteer" x="0" y="0" style="opacity:1.0" />
    <use xlink:href="#volunteer" x="180" y="0" style="opacity:.4" />
    <use xlink:href="#volunteer" x="360" y="0" style="opacity:1.0" />
</svg></a></p>
<h3 style="text-align: center;"><a href="#">Headline</a></h3>
<p style="text-align: center;">Lorem ipsum <a href="#">Link text</a></p>

感谢任何帮助!

【问题讨论】:

  • 它在“扩展”符号/使用(即使用 3 个独立的“硬编码”圆圈和路径)下是否正常工作?

标签: html wordpress svg safari inline-svg


【解决方案1】:

为使用元素添加宽度和高度:

<p style="font-size: 2.3em; text-align: center;"><a href="#">
  <svg width="135px" viewBox="0 0 563 301" xmlns="http://www.w3.org/2000/svg"
     xmlns:xlink="http://www.w3.org/1999/xlink" style="padding-top: 16px;">
    <!--Definition of one volunteer symbol -->
    <symbol id="volunteer"  viewBox="0 0 200 301" style="fill: var(--color-1);">
        <circle id="head" cx="101" cy="30" r="30" />
        <path id="body" d="M189.34,44.94c-9.88,10.26-20.74,21.77-31.9,33-4.46,4.49-9.1,9.16-14.49,12.3-8.16,4.76-9.64,11.23-9.58,20.06q.66,86.7.15,173.4c0,5.13-2.44,11.54-6,14.91-2.55,2.39-9.93,2.33-13.37.32s-6.17-7.77-6.24-11.93c-.52-32.66-.28-65.33-.38-98,0-7.29-3.35-10.29-8.38-7.19-2.06,1.26-3,5.73-3,8.74-.15,32.09.07,64.17,0,96.26,0,11.05-7.79,16.8-17.68,13.4-6.87-2.36-8.51-7.92-8.5-14.48Q70,245,70,204.23c0-33-.16-65.91.09-98.86,0-5.46-1.76-8.62-5.82-12.3C45.4,76,27.09,58.43,8.67,41a48,48,0,0,1-4.84-6.1c-4.29-5.66-5.9-11.47.1-16.92,5.29-4.79,12.59-3.43,18.37,2.52,12.07,12.42,24.54,24.46,36.47,37C77.05,76.7,99.14,79,123.19,72.41a27.75,27.75,0,0,0,11.08-6.48C149.65,51.56,165,37.11,179.78,22.15c7.77-7.86,14.16-8.68,21.88-1.1,0,0,3.34,2.5-.66,9.5Z" />
    </symbol>
    <!-- Setting the symbols in place - left, middle, right  -->
    <use xlink:href="#volunteer" x="0" y="0" width="200" height="301" style="opacity:1.0" />
    <use xlink:href="#volunteer" x="180" y="0" width="200" height="301" style="opacity:.4" />
    <use xlink:href="#volunteer" x="360" y="0" width="200" height="301" style="opacity:1.0" />
</svg></a></p>
<h3 style="text-align: center;"><a href="#">Headline</a></h3>
<p style="text-align: center;">Lorem ipsum <a href="#">Link text</a></p>

https://www.w3.org/TR/SVG11/struct.html#UseElement

引用的“符号”及其内容被深度克隆到生成的树中,除了“符号”被“svg”替换。生成的“svg”将始终具有属性“宽度”和“高度”的显式值。如果在“use”元素上提供了属性“width”和/或“height”,那么这些属性将被传输到生成的“svg”。如果未指定属性“width”和/或“height”,则生成的“svg”元素将为这些属性使用“100%”值。

【讨论】:

  • 有效!感谢您的快速答复。关于为什么会这样的任何指针?我在符号定义中指定了宽度和高度。
  • 我在回答中添加了来自w3.org/TR/SVG11/struct.html#UseElement 的引用。请看一下
  • 啊,好的。在我查看的帮助站点中,我没有看到相关段落“除了‘x’、‘y’、‘width’、‘height’和‘xlink:href’之外,‘use’元素的所有属性都被转移”。再次感谢!
猜你喜欢
  • 2020-10-01
  • 1970-01-01
  • 2023-03-03
  • 2016-11-11
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-10-03
相关资源
最近更新 更多