Для ясности я упростил ваш пример:
Вот как я бы это сделал: я бы нарисовал символ с центром в точке {0,0}.Ширина и высота символа viewBox
равны 300 единицам, что равно ширине и высоте .first-icon
viewBox
svg.first-icon{width:90vh;border:1px solid}
<svg viewBox="0 0 300 300" class="first-icon">
<use href="#my-smiley"/>
</svg>
<svg>
<symbol viewBox="-150 -150 300 300" id="my-smiley">
<g stroke="#f7931e">
<circle r="50" fill="gray" stroke-width=".004"/>
<g transform="translate(-145,-80)">
<path d="M144.59 64.536l-10.606 4.22-2.537 11.128-7.29-8.783-11.368 1.027 6.1-9.648-4.489-10.494 11.06 2.82 8.594-7.511.735 11.39zM184.32 63.824l-10.606 4.22-2.537 11.128-7.29-8.783-11.368 1.027 6.1-9.648-4.489-10.494 11.06 2.82 8.594-7.511.735 11.39z" fill="#f7931e" stroke-width=".002"/>
<path fill="#ffd5d5" stroke-width=".004" d="M122.46 102.72h48.381v5.292H122.46z"/>
</g>
</g>
</symbol>
</svg>
Если вы хотите, вы можете уменьшить <symbol>
, но тогда вам нужно дать <use>
a width
a height
,x
и y
атрибуты:
svg:first-of-type{width:90vh; border:1px solid;}
<svg viewBox="0 0 300 300" class="first-icon">
<use x="100" y="100" width="100" height="100" href="#my-smiley"/>
</svg>
<svg xmlns="http://www.w3.org/2000/svg">
<symbol viewBox="-50 -50 100 100" id="my-smiley" class="my-smiley">
<g id="kk" stroke="#f7931e">
<circle r="50" fill="gray" stroke-width=".004"/>
<g transform="translate(-145,-80)">
<path d="M144.59 64.536l-10.606 4.22-2.537 11.128-7.29-8.783-11.368 1.027 6.1-9.648-4.489-10.494 11.06 2.82 8.594-7.511.735 11.39zM184.32 63.824l-10.606 4.22-2.537 11.128-7.29-8.783-11.368 1.027 6.1-9.648-4.489-10.494 11.06 2.82 8.594-7.511.735 11.39z" fill="#f7931e" stroke-width=".002"/>
<path fill="#ffd5d5" stroke-width=".004" d="M122.46 102.72h48.381v5.292H122.46z"/>
</g>
</g>
</symbol>
</svg>