0

Problem

My <radialGradient> for the ellipses below won't show in Chrome based browsers, but will show the other content. Whereas firefox will show both.

I read this page, and this page, and they gave clues that it was a radialGradient issue, but I'm not dealing with any external files like the first page has, nor trying a conical gradient like the other one.

Goal

I want to have my first <svg> tag strictly for <defs> only, so I can reference parts later on to cut down the file size, and keep it clean. And to get rid of blank space, I added style="display: none;" to this first <svg> tag.

What I tried

Once I do the above, I add my other <svg>'s (email, SMS, etc) to reference them many times. Again, the first blank svg with the defs does not show (which is good), and the <path>, ellipses, etc. will show fine in Firefox, but not Chrome.

The ellipses will only show in Chrome when I take off style="display: none;" from the first svg, even though they're in the same element.

When I noticed it might be a <radialGradient> issue, I added fill:yellow;stroke:purple;stroke-width:2 to my ellipses style attribute, and that makes the ellipse show with that styling, so I know the ellipse is there, but the gradient won't show inside it.

Anyone know why the <radialGradient> will not show up in Chrome based browsers while style="display: none;" is on the first svg??? Or does anyone have any work arounds to fix this / do this more efficiently??? I know I can put everything in 1 svg, but I need them all separate so I can style them with css more easily, since they're all icons.

Thanks!

<!DOCTYPE html>
<html>
  <body>


    <svg
        version="1.1"
        xmlns="http://www.w3.org/2000/svg"
        xmlns:xlink="http://www.w3.org/1999/xlink"
        style="display:none;"
        >

          <defs>

            <symbol id="ellipsesymbol" viewBox="0 0 126 76">
              <radialGradient id="_Radial1" cx="0" cy="0" r="1" gradientUnits="userSpaceOnUse" gradientTransform="matrix(62.5,0,0,37.5,62.5069,37.5066)">
                <stop offset="0" style="stop-color:#000;stop-opacity:0.5"/>
                <stop offset="0.62" style="stop-color:#170725;stop-opacity:0.58"/>
                <stop offset="0.82" style="stop-color:#4e187f;stop-opacity:0.78"/>
                <stop offset="1" style="stop-color:#8a2be2;stop-opacity:1"/>
              </radialGradient>
              <ellipse cx="62.5" cy="37.839" rx="62.5" ry="37.5" style="fill:url(#_Radial1);" />
            </symbol>

            <symbol id="emailsymbol" viewBox="0 0 126 76">
              <path
              d="M31.15,17.125l0,40.763l62.713,0l0,-40.763l-62.713,-0Zm36.687,24.928c-1.411,1.411 -3.292,2.195 -5.33,2.195c-2.038,0 -3.92,-0.784 -5.331,-2.195l-21.792,-21.792l54.089,-0l-21.636,21.792Zm-17.402,-4.546l-16.149,16.148l0,-32.297l16.149,16.149Zm1.097,1.097l4.547,4.547c1.724,1.724 4.076,2.665 6.428,2.665c2.508,0 4.703,-0.941 6.428,-2.665l4.547,-4.547l16.148,16.149l-54.246,-0l16.148,-16.149Zm23.047,-1.097l16.149,-16.149l-0,32.454l-16.149,-16.305Z"
              style="fill:#00bfff;fill-rule:nonzero;"/>
            </symbol>

            <symbol id="SMSsymbol" viewBox="0 0 126 76">
              <path d="M98.587,27.064c0,-4.29 -3.483,-7.773 -7.773,-7.773l-56.464,0c-4.29,0 -7.773,3.483 -7.773,7.773l0,15.546c0,4.29 3.483,7.773 7.773,7.773l15.631,0l-9.002,13.326l19.803,-13.326l30.032,0c4.29,0 7.773,-3.483 7.773,-7.773l0,-15.546Z"
              style="fill:#00bfff;"/>
              <text x="36.276px" y="42.521px" style="font-family:'KnightsTemplar', 'Knights Templar';font-size:25.665px;">SMS</text>
            </symbol>

            <!-- .... -->

          </defs>
    </svg>


    <svg id="emailgroup">
      <use xlink:href="#ellipsesymbol" />
      <use xlink:href="#emailsymbol" />
    </svg>


    <svg id="smsgroup">
      <use xlink:href="#ellipsesymbol" />
      <use xlink:href="#SMSsymbol" />
    </svg>


    <!-- more svg's.... -->


  </body>
</html>
  • 1
    You already know the workaround don't you i.e. stop using display:none; – Robert Longson Feb 14 '21 at 21:37
  • Then it's stupidly inefficient, and I have to copy / paste the same code multiple times. Again, the question was basically "why is X not working in Chrome the way it should?" – CyberHavenProgramming Feb 14 '21 at 21:52
  • You don't need to copy the code - just move the SVG elements off the visible canvas and it's like that because display:none turns off all CSS from that point down and Chrome hasn't implemented SVG 2 style use elements yet. – Robert Longson Feb 14 '21 at 22:02
  • 2
    Instead of `display:none`, you can hide the first SVG with `width="0" height="0"`. Then it works in Chrome. – Sphinxxx Feb 14 '21 at 22:12
  • Thank you Sphinxxx. Goodd thinking :) If you want the points, leave it as an answer. – CyberHavenProgramming Feb 15 '21 at 14:21

1 Answers1

1

Instead of display:none, you can hide the first SVG with width="0" height="0". Then it works in Chrome:

<svg xmlns="http://www.w3.org/2000/svg" width="0" height="0">
    <defs>
        <symbol id="ellipsesymbol" viewBox="0 0 126 76">
            <radialGradient id="_Radial1" cx="0" cy="0" r="1" gradientUnits="userSpaceOnUse" gradientTransform="matrix(62.5,0,0,37.5,62.5069,37.5066)">
                <stop offset="0" style="stop-color:#000;stop-opacity:0.5"/>
                <stop offset="0.62" style="stop-color:#170725;stop-opacity:0.58"/>
                <stop offset="0.82" style="stop-color:#4e187f;stop-opacity:0.78"/>
                <stop offset="1" style="stop-color:#8a2be2;stop-opacity:1"/>
            </radialGradient>
            <ellipse cx="62.5" cy="37.839" rx="62.5" ry="37.5" style="fill:url(#_Radial1);" />
        </symbol>

        <symbol id="emailsymbol" viewBox="0 0 126 76">
            <path d="M31.15,17.125l0,40.763l62.713,0l0,-40.763l-62.713,-0Zm36.687,24.928c-1.411,1.411 -3.292,2.195 -5.33,2.195c-2.038,0 -3.92,-0.784 -5.331,-2.195l-21.792,-21.792l54.089,-0l-21.636,21.792Zm-17.402,-4.546l-16.149,16.148l0,-32.297l16.149,16.149Zm1.097,1.097l4.547,4.547c1.724,1.724 4.076,2.665 6.428,2.665c2.508,0 4.703,-0.941 6.428,-2.665l4.547,-4.547l16.148,16.149l-54.246,-0l16.148,-16.149Zm23.047,-1.097l16.149,-16.149l-0,32.454l-16.149,-16.305Z"
                  style="fill:#00bfff;fill-rule:nonzero;"/>
        </symbol>

        <symbol id="SMSsymbol" viewBox="0 0 126 76">
            <path d="M98.587,27.064c0,-4.29 -3.483,-7.773 -7.773,-7.773l-56.464,0c-4.29,0 -7.773,3.483 -7.773,7.773l0,15.546c0,4.29 3.483,7.773 7.773,7.773l15.631,0l-9.002,13.326l19.803,-13.326l30.032,0c4.29,0 7.773,-3.483 7.773,-7.773l0,-15.546Z"
                  style="fill:#00bfff;"/>
            <text x="36.276px" y="42.521px" style="font-family:'KnightsTemplar', 'Knights Templar';font-size:25.665px;">SMS</text>
        </symbol>
    </defs>
</svg>

<svg id="emailgroup">
    <use href="#ellipsesymbol" />
    <use href="#emailsymbol" />
</svg>

<svg id="smsgroup">
    <use href="#ellipsesymbol" />
    <use href="#SMSsymbol" />
</svg>

Also note that xlink:href is deprecated, and you can simply use href now:
https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/href

Sphinxxx
  • 12,484
  • 4
  • 54
  • 84