Я создал пользовательский значок Facebook с помощью Inkscape и сохранил его как SVG. Он использует тот же шрифт, что и заголовок моей страницы, который использует шрифт "ubuntutitling-bold-webfont", на который я ссылаюсь как .woff в файле CSS. Заголовок работает, но svg нет - он отображает «f» в каком-то шрифте по умолчанию. Файл шрифта находится по адресу ../fonts/ubuntutitling-bold-webfont.woff по отношению к CSS и файлу изображения и по адресу fonts / ubuntutitling-bold-webfont.woff по отношению к веб-странице.
Я нашел Как встраивать веб-шрифты Google в SVG? , но я немного запутался, как применить код к SVG, если мне даже нужно. Может ли SVG использовать шрифт .woff, указанный в файле CSS? Правильно ли я вручную изменил шрифт внутри SVG-файла?
Вот код для 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"
width="80"
height="80"
id="svg2"
version="1.1"
inkscape:version="0.48.3.1 r9886"
sodipodi:docname="New document 1">
<defs
id="defs4" />
<sodipodi:namedview
id="base"
pagecolor="#ffffff"
bordercolor="#666666"
borderopacity="1.0"
inkscape:pageopacity="0.0"
inkscape:pageshadow="2"
inkscape:zoom="1"
inkscape:cx="26.573808"
inkscape:cy="42.478414"
inkscape:document-units="px"
inkscape:current-layer="layer1"
showgrid="false"
fit-margin-top="0"
fit-margin-left="0"
fit-margin-right="0"
fit-margin-bottom="0"
inkscape:window-width="1619"
inkscape:window-height="611"
inkscape:window-x="165"
inkscape:window-y="301"
inkscape:window-maximized="0" />
<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></dc:title>
</cc:Work>
</rdf:RDF>
</metadata>
<g
inkscape:label="Layer 1"
inkscape:groupmode="layer"
id="layer1"
transform="translate(0.75006053,-981.36219)">
<rect
style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:10;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0"
id="rect2987"
width="70"
height="70"
x="4.2499394"
y="986.36218"
rx="10"
ry="10" />
<text
xml:space="preserve"
style="font-size:109.44319916px;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:#fffffe;stroke-width:2.73607969;stroke-opacity:1;font-family:ubuntutitling-bold-webfont';-inkscape-font-specification:ubuntutitling-bold-webfont'"
x="25.989071"
y="1096.0118"
id="text3757"
sodipodi:linespacing="125%"
transform="scale(1.0381556,0.96324674)"><tspan
sodipodi:role="line"
id="tspan3759"
x="25.989071"
y="1096.0118"
style="stroke-width:2.73607969">f</tspan></text>
</g>
</svg>
Заранее спасибо.
Ответы:
Вам нужно поставить CSS в
defs
разделе. Что-то типа:источник
<object>
для вставки svg, а не<img>
, тогда шрифт загружается правильно! github.com/marians/test-webfonts-in-svg/pull/1<object>
имеет некоторые недостатки. После просмотра vecta.io/blog/best-way-to-embed-svg я решил добавить разметку svg прямо в мой документ.Чтобы загрузить Google или любой другой внешний файл в SVG-файл, мы должны добавить тег style в тег defs следующим образом:
источник
Изменить: я перечитал ваш вопрос ... кажется, что ваш лучший вариант может быть преобразовать текст в иконке в контур, так что шрифт вообще не нужен. (Возможно, вам придется проверить лицензию на шрифт, чтобы убедиться, что это нормально.)
Я неправильно предположил, что у вас есть значок вектора, и вы искали лучший способ отобразить его на своем веб-сайте.
Я думаю, у вас есть несколько вариантов.
Используйте изображение SVG
Вы можете просто использовать SVG в качестве самого изображения. Вы потеряете поддержку старых версий IE, но вы можете поменять PNG или GIF на IE8 и более ранние версии. Или не беспокоиться о IE8 и более старой поддержке (может быть или не быть вариантом, в зависимости от вашей целевой аудитории).
Используйте генератор Font Squirrel
Font Squirrel имеет генератор @ font-face, который выполняет всю тяжелую работу за вас, если у вас уже есть созданный шрифт.
Font Squirrel @ font-face generator
Используйте изображение PNG
Почему вы используете SVG? Это для лучшего увеличения и поддержки высокого DPI? Если это так, есть способы сделать это с помощью CSS и PNG. Это действительно зависит от вашего предполагаемого использования.
Я не фанат встраивания иконок в шрифты. Вы теряете контроль уровня пикселей. Есть несколько ситуаций, когда это хороший выбор, но часто это требует гораздо больших усилий и приносит худшие результаты.
источник
Это пример для следующего шрифта. https://fonts.googleapis.com/css?family=Fredoka One Open перейдите на страницу шрифтов и скопируйте все в «defs»
источник