Làm cách nào để sử dụng phông chữ tùy chỉnh trong hình ảnh SVG trên trang web của tôi?


28

Tôi đã tạo một biểu tượng Facebook tùy chỉnh bằng Inkscape và lưu nó dưới dạng svg. Nó sử dụng phông chữ giống như tiêu đề của trang của tôi, sử dụng phông chữ "ubuntutitling-bold-webfont", mà tôi đã tham chiếu dưới dạng .woff trong tệp CSS. Các chức năng tiêu đề, nhưng svg thì không - nó hiển thị "f" trong một số phông chữ mặc định. Tệp phông chữ được đặt tại ../fonts/ubuntutitling-bold-webfont.woff về tính tương đối với tệp CSS và hình ảnh, và tại phông chữ / ubuntutitling-bold-webfont.woff tương đối với trang web.

Tôi tìm hiểu Làm cách nào để nhúng Google Web Fonts vào SVG? , nhưng tôi hơi bối rối về cách áp dụng mã cho SVG, nếu tôi thậm chí cần. SVG có thể sử dụng phông chữ .woff được tham chiếu trong tệp CSS không? Cách tôi tự thay đổi phông chữ bên trong tệp SVG có đúng không?

Đây là mã cho 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>

Cảm ơn bạn trước.


Làm thế nào để bạn hiển thị SVG? Bạn có tải nó dưới dạng <img> không, bạn có nhúng nó dưới dạng đối tượng hay bạn hiển thị nội tuyến SVG?
Ideogram

Câu trả lời:


19

Bạn cần đặt CSS trong defsphần này. Cái gì đó như:

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

2
Theo ví dụ của tôi github.com/marians/test-webfonts-in-svg , điều này không hoạt động với các trình duyệt hiện tại (tháng 2 năm 2016).
Marian

13
Nếu bạn sử dụng <object>để nhúng svg, chứ không phải <img>, thì phông chữ tải đúng cách! github.com/marians/test-webfonts-in-svg/pull/1
waldyrious

2
@waldyrious Không có đủ upvote trên thế giới cho mẹo đó.
Scribpetacher

@waldyrious nếu SVG là ảnh nền thì sao?
notacouch

Sử dụng <object>có một số nhược điểm. Sau khi xem xét vecta.io/blog/best-way-to-embed-svg, tôi quyết định đặt nội dung đánh dấu svg ngay vào tài liệu của mình.
Herman J. Radtke III

3

Để tải Google hoặc bất kỳ fornts bên ngoài nào khác trong tệp SVG, chúng tôi phải thêm thẻ kiểu trong thẻ defs như sau:

<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
Theo ví dụ của tôi github.com/marians/test-webfonts-in-svg , điều này không hoạt động với các trình duyệt hiện tại (tháng 2 năm 2016).
Marian

1

Chỉnh sửa: Tôi đọc lại câu hỏi của bạn ... có vẻ như tùy chọn tốt nhất của bạn có thể là chuyển đổi văn bản trong biểu tượng của bạn thành một phác thảo, vì vậy nó hoàn toàn không cần phông chữ. (Bạn có thể phải kiểm tra giấy phép phông chữ của mình để xem điều này có ổn không.)

Tôi giả sử, không chính xác, rằng bạn có một biểu tượng vector và bạn đang tìm cách tốt nhất để hiển thị nó trong trang web của bạn.


Tôi nghĩ rằng bạn có một vài lựa chọn.

Sử dụng hình ảnh SVG

Bạn chỉ có thể sử dụng SVG như một hình ảnh chính nó. Bạn sẽ mất hỗ trợ cho các phiên bản IE cũ hơn, nhưng bạn có thể trao đổi trong PNG hoặc GIF cho IE8 trở về trước. Hoặc không bận tâm về IE8 và hỗ trợ cũ hơn (có thể hoặc không thể là một tùy chọn, tùy thuộc vào đối tượng mục tiêu của bạn).

Sử dụng trình tạo phông chữ của sóc

Font Squirrel có một trình tạo khuôn mặt @ phông chữ thực hiện tất cả các công việc nặng cho bạn, nếu bạn đã tạo phông chữ.

Trình tạo phông chữ @ Font-face

Sử dụng hình ảnh PNG

Tại sao bạn sử dụng SVG? Có phải để phóng to tốt hơn và hỗ trợ DPI cao? Nếu vậy, có nhiều cách để làm điều đó với CSS và PNG. Nó thực sự phụ thuộc vào mục đích sử dụng của bạn.


Tôi không phải là một fan hâm mộ của các biểu tượng nhúng trong phông chữ. Bạn mất kiểm soát mức pixel. Có một vài tình huống làm như vậy là một lựa chọn tốt, nhưng thường thì đó là nỗ lực nhiều hơn mà nó đáng giá và mang lại kết quả tồi tệ hơn.


-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>

Đó là một ví dụ cho phông chữ sau. https://fonts.googleapis.com/css?family=Fredoka One Mở truy cập trang phông chữ và sao chép mọi thứ vào "defs"


2
Chào mừng đến với GDSE! Liên kết dẫn đến nơi nào đối với tôi, bạn có thể vui lòng chỉnh sửa câu trả lời của mình để thêm thông tin liên quan không?
tò mò
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.