내 사이트의 SVG 이미지에서 사용자 정의 글꼴을 사용하려면 어떻게합니까?


28

Inkscape를 사용하여 사용자 정의 Facebook 아이콘을 만들어 svg로 저장했습니다. CSS 파일에서 .woff로 참조한 "ubuntutitling-bold-webfont"글꼴을 사용하는 내 페이지 제목과 동일한 글꼴을 사용합니다. 제목은 작동하지만 svg는 작동하지 않습니다. "f"는 정렬 기본 글꼴로 표시됩니다. 글꼴 파일은 CSS 및 이미지 파일과 관련하여 ../fonts/ubuntutitling-bold-webfont.woff에 있으며 웹 페이지와 관련하여 fonts / ubuntutitling-bold-webfont.woff에 있습니다.

나는 세례반 내가 SVG에 Google 웹 글꼴을 포함 어떻게? 하지만 필요한 경우 SVG에 코드를 적용하는 방법에 약간 혼란 스럽습니다. SVG가 CSS 파일에서 참조 된 .woff 글꼴을 사용할 수 있습니까? 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>

미리 감사드립니다.


SVG를 어떻게 표시합니까? <img>로로드합니까, 객체로 포함 시키거나 SVG를 인라인으로 표시합니까?
Ideogram

답변:


19

defs섹션 에 CSS를 넣어야 합니다. 다음과 같은 것 :

<defs>
  <style type="text/css">
    @font-face {
      font-family: Delicious;
      src: url('../fonts/font.woff');
    }
  </style>
</defs>

2
내 예 github.com/marians/test-webfonts-in-svg 에 따르면 현재 브라우저에서는 작동하지 않습니다 (2016 년 2 월).
Marian

13
를 사용 <object>하지 않고 svg를 포함하는 <img>경우 글꼴이 제대로로드됩니다! github.com/marians/test-webfonts-in-svg/pull/1
waldyrious

2
@waldyrious 세상에는 그 팁을위한 충분한지지가 없습니다.
Scribblemacher

SVG가 배경 이미지라면 @waldyrious?
notacouch

사용 <object>에는 몇 가지 단점이 있습니다. vecta.io/blog/best-way-to-embed-svg를 검토 한 후 svg 마크 업을 문서에 바로 삽입하기로 결정했습니다.
Herman J. Radtke III

3

SVG 파일에서 Google 또는 다른 외부 fornt를로드하려면 다음과 같이 스타일 태그를 defs 태그에 추가해야합니다.

<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" version="1.1" width="246" height="272" xml:space="preserve"><desc>Your description</desc>

<defs>
<style type="text/css">@import url('http://fonts.googleapis.com/css?family=Lobster|Fontdiner+Swanky|Crafty+Girls|Pacifico|Satisfy|Gloria+Hallelujah|Bangers|Audiowide|Sacramento');</style>
</defs>

3
내 예 github.com/marians/test-webfonts-in-svg 에 따르면 현재 브라우저에서는 작동하지 않습니다 (2016 년 2 월).
Marian

1

편집 : 나는 당신의 질문을 다시 읽었습니다 ... 가장 좋은 옵션은 아이콘의 텍스트를 개요로 변환하는 것 같으므로 글꼴이 전혀 필요하지 않습니다. (글꼴 라이센스가 올바른지 확인해야 할 수도 있습니다.)

나는 당신이 벡터 아이콘을 가지고 있으며 웹 사이트에 그것을 표시하는 가장 좋은 방법을 찾고 있다고 잘못 생각했습니다.


몇 가지 옵션이 있다고 생각합니다.

SVG 이미지 사용

SVG를 이미지 자체로 사용할 수 있습니다. 이전 버전의 IE는 지원하지 않지만 IE8 및 이전 버전에서는 PNG 또는 GIF로 바꿀 수 있습니다. 또는 IE8 및 이전 지원에 대해 신경 쓰지 마십시오 (대상 고객에 따라 옵션이 될 수도 있고 아닐 수도 있습니다).

Font Squirrel 's Generator 사용

Font Squirrel에는 @ font-face generator가 있으며 이미 글꼴을 만든 경우 모든 무거운 작업을 수행합니다.

글꼴 다람쥐 @ font-face generator

PNG 이미지 사용

왜 SVG를 사용하고 있습니까? 더 나은 줌 및 높은 DPI 지원을위한 것입니까? 그렇다면 CSS와 PNG로 그렇게 할 수 있습니다. 실제로 의도 한 용도에 따라 다릅니다.


글꼴에 아이콘을 포함시키는 팬이 아닙니다. 픽셀 레벨 컨트롤이 손실됩니다. 그렇게하는 것이 좋은 선택이되는 몇 가지 상황이 있지만, 종종 가치가 있고 더 나쁜 결과를 얻는 것이 더 많은 노력입니다.


-2
<defs>
 <style type="text/css">
 <![CDATA[
  @font-face {
    font-family: 'Fredoka One';
    font-style: normal;
    font-weight: 400;
    src: local('Fredoka One'), local('FredokaOne-Regular'), 
    url(https://fonts.gstatic.com/s/fredokaone/v7/k3kUo8kEI- 
    tA1RRcTZGmTlHGCac.woff2) format('woff2');
    unicode-range: U+0000-00FF, U+0131, U+0152-0153, U+02BB-02BC, 
    U+02C6, U+02DA, U+02DC, U+2000-206F, U+2074, U+20AC, U+2122, 
    U+2191, U+2193, U+2212, U+2215, U+FEFF, U+FFFD;
  }
  ]]>
 </style>
</defs>

다음 글꼴에 대한 예입니다. https://fonts.googleapis.com/css?family=Fredoka One Open 글꼴 페이지를 방문하여 모든 내용을 "defs"에 복사하십시오.


2
GDSE에 오신 것을 환영합니다! 이 링크는 아무데도 도움이되지 않습니다. 관련 정보를 추가하기 위해 답을 편집 해 주시겠습니까?
호기심
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.