Использовать SVG-тег глифа в HTML
У меня есть файл icons.svg с этим источником:
<?xml version="1.0" standalone="no"?>
<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd" >
<svg xmlns="http://www.w3.org/2000/svg">
<defs>
<font id="MyIcon" horiz-adv-x="1024">
<font-face units-per-em="1024" ascent="960" descent="-64" />
<missing-glyph horiz-adv-x="1024" />
<glyph unicode=" " horiz-adv-x="512" d="" />
<glyph unicode="" glyph-name="arrow-left" horiz-adv-x="1308" d="..." />
<glyph unicode="" glyph-name="arrow-up" horiz-adv-x="1308" d="..." />
<glyph unicode="" glyph-name="arrow-down" horiz-adv-x="860" d="..." />
</font></defs></svg>
Есть ли способ отослать это glyph
теги от HTML
? Я думаю что-то вроде этого:
<svg role="img" title="arrow-up"><use xlink:href="icons.svg#arrow-up"></use></svg>
Есть ли способ использовать SVG
теги в моем HTML-коде?
1 ответ
Там нет браузера, который реализует SVG <font>
или же <glyph>
, Лучшее, что вы можете сделать, это преобразовать глифы в <symbol>
с содержащие <path>
Как в спрайт-листе SVG. (Это преобразование может быть даже автоматизировано с помощью XSLT.) Если вы установите viewBox
для символа с соответствием ширины horiz-adv-x
и высота шрифта ascent
, вы можете расположить значок надежно встроенным:
.icon, symbol {
overflow: visible
}
.icon {
height: 1em
}
<svg xmlns="http://www.w3.org/2000/svg" display="none">
<symbol id="arrow-left" viewBox="0 0 1308 960">
<!-- font paths are upside-down! -->
<path transform="matrix(1 0 0 -1 0 960)" d="..." />
</symbol>
<symbol id="arrow-up" viewBox="0 0 1308 960">
<!-- borrowed a font-awesome icon to show an example, width is too small -->
<path transform="matrix(1 0 0 -1 0 960)" d="m 1006.87,353.125 q 0,-31.875 -23.12,-56.25 l -46.875,-46.875 q -23.75,-23.75 -56.875,-23.75 -33.75,0 -56.25,23.75 l -183.75,183.125 v -440 q 0,-32.5 -23.438,-52.8125 -23.437,-20.3125 -56.562,-20.3125 h -80 q -33.125,0 -56.563,20.3125 -23.437,20.3125 -23.437,52.8125 v 440 l -183.75,-183.125 q -22.5,-23.75 -56.25,-23.75 -33.75,0 -56.25,23.75 l -46.875,46.875 q -23.75,23.75 -23.75,56.25 0,33.125 23.75,56.875 l 406.875,406.875 q 21.875,23.125 56.25,23.125 33.75,0 56.875,-23.125 l 406.875,-406.875 q 23.12,-24.375 23.12,-56.875 z" />
</symbol>
<symbol id="arrow-down" viewBox="0 0 860 960">
<path transform="matrix(1 0 0 -1 0 960)" d="..." />
</symbol>
</svg>
<p style="font-size:32px">text <svg viewBox="0 0 1308 960" class="icon"><use xlink:href="#arrow-up"/></svg> text</p>
Недостатком является то, что вы не получаете автоматический аванс, который дали бы вам глифы. Лучшее, что вы можете сделать, это установить постоянную высоту и viewBox
за каждую ссылку <svg>
это соответствует символу, который вы используете.
Если вы не используете значки во встроенном контексте, где продвижение важно, вы можете установить все значения ширины viewBox для символов в единое значение (т.е. viewBox="0 0 1024 960"
), а затем отключите viewBox от иконки svg, установив вместо этого постоянное соотношение ширины и высоты (т.е. width:1.067em; height:1em
). Некоторые значки будут затем переполнять это поле в горизонтальном направлении.