ฉันจะใช้แบบอักษรที่กำหนดเองในภาพ SVG บนเว็บไซต์ของฉันได้อย่างไร


28

ฉันสร้างไอคอน 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>

ขอบคุณล่วงหน้า.


คุณแสดง SVG อย่างไร คุณโหลดมันเป็น <img> คุณฝังมันเป็นวัตถุหรือคุณแสดง SVG แบบอินไลน์หรือไม่
Ideogram

คำตอบ:


19

คุณต้องใส่ CSS ในdefsส่วน สิ่งที่ต้องการ:

<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สิ่งนี้ไม่สามารถใช้ได้กับเบราว์เซอร์ปัจจุบัน (กุมภาพันธ์ 2559)
แมเรียน

13
หากคุณใช้<object>ในการฝัง svg มากกว่า<img>นั้นตัวอักษรจะโหลดอย่างถูกต้อง! github.com/marians/test-webfonts-in-svg/pull/1
waldyrious

2
@waldyrious มีเคล็ดลับไม่เพียงพอในโลกนี้
Scribblemacher

@ วาลลิririousเกิดอะไรขึ้นถ้า SVG เป็นภาพพื้นหลัง?
notacouch

การใช้<object>มีข้อเสีย หลังจากตรวจสอบvecta.io/blog/best-way-to-embed-svgฉันตัดสินใจที่จะแทรกมาร์กอัป svg ลงในเอกสารของฉัน
Herman J. Radtke III

3

ในการโหลด Google หรือ fornts ภายนอกอื่น ๆ ในไฟล์ SVG เราจะต้องเพิ่มแท็กสไตล์ใน 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สิ่งนี้ไม่สามารถใช้ได้กับเบราว์เซอร์ปัจจุบัน (กุมภาพันธ์ 2559)
แมเรียน

1

แก้ไข: ฉันอ่านคำถามของคุณอีกครั้ง ... ดูเหมือนว่าตัวเลือกที่ดีที่สุดของคุณอาจเป็นการแปลงข้อความในไอคอนของคุณให้เป็นโครงร่างดังนั้นจึงไม่จำเป็นต้องใช้แบบอักษรเลย (คุณอาจต้องตรวจสอบใบอนุญาตแบบอักษรของคุณเพื่อดูว่ามันดีหรือไม่)

ฉันถือว่าไม่ถูกต้องว่าคุณมีไอคอนเวกเตอร์และคุณกำลังมองหาวิธีที่ดีที่สุดในการแสดงในเว็บไซต์ของคุณ


ฉันคิดว่าคุณมีตัวเลือกน้อย

ใช้ภาพ SVG

คุณสามารถใช้ SVG เป็นรูปภาพได้ คุณจะสูญเสียการสนับสนุน IE เวอร์ชันเก่า แต่คุณสามารถสลับเป็น PNG หรือ GIF สำหรับ IE8 และรุ่นก่อนหน้าได้ หรือไม่สนใจเกี่ยวกับ IE8 และการสนับสนุนที่เก่ากว่า (อาจจะใช่หรือไม่ใช่ตัวเลือกขึ้นอยู่กับกลุ่มเป้าหมายของคุณ)

ใช้เครื่องกำเนิดของ Font Squirrel

แบบอักษรกระรอกมีตัวสร้าง @ font-face ที่ทำหน้าที่ยกของหนักสำหรับคุณหากคุณสร้างแบบอักษรแล้ว

Font Squirrel @ เครื่องมือสร้าง font-face

ใช้ภาพ 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.