2014-07-16 25 views
5

Tôi đang làm việc với mẫu SVG sử dụng phông chữ tùy chỉnh, để sử dụng mẫu làm hình nền trên trang HTML.Phông chữ tùy chỉnh không hiển thị trong mẫu SVG được sử dụng làm hình nền

Tất cả mọi thứ ám tốt trong Chrome và Safari nhưng nó bắt đầu để có được vui trong Firefox:

  • Firefox ám chỉ rằng SVG cùng với các văn bản phông chữ tùy chỉnh tốt khi tôi mở file SVG bản thân (hiện vẫn rất tốt !);
  • Tuy nhiên, Firefox không KHÔNG làm cho phông chữ tùy chỉnh nữa khi mà tập tin SVG tương tự được sử dụng làm nền cho một phần tử HTML (!)

Tôi đã dành giờ cố gắng để cô lập vấn đề này và một cặp mắt mới sẽ được chào đón.

Nhấp vào đây để xem minimal demo of the issue.

Đây là những gì tôi đã có trong ngắn hạn:

CSS:

@import url(http://fonts.googleapis.com/css?family=Indie+Flower); 

body { 
    background: url(pattern-google.svg); 
} 

tập tin SVG:

<svg xmlns="http://www.w3.org/2000/svg" version="1.1" xmlns:xlink="http://www.w3.org/1999/xlink" height="200" width="200"> 
    <style type="text/css">@import url(http://fonts.googleapis.com/css?family=Indie+Flower);</style> 
    <defs> 
     <!-- Geometry --> 
     <g> 
      <rect id="square" x="0" y="0" width="200" height="200" /> 
     </g> 

     <!-- Patterns with Text --> 
     <pattern id="pattern" x="0" y="0" width="40" height="40" patternUnits="userSpaceOnUse" text-anchor="middle" font-size="20" font-family="Indie Flower, sans-serif" style="font-family: Indie Flower, sans-serif;"> 
      <rect x="00" y="00" width="40" height="40" fill="transparent" /> 
      <text x="00" y="00" fill="#777">S</text> 
      <text x="40" y="00" fill="#777">S</text> 
      <text x="20" y="20" fill="#777">S</text> 
      <text x="00" y="40" fill="#777">S</text> 
      <text x="40" y="40" fill="#777">S</text> 
     </pattern> 
    </defs> 

    <!-- Graphics --> 
    <use xlink:href="#square" transform="translate(0, 0)" fill="url(#pattern)"/> 
</svg> 

HTML riêng của mình không thực sự quan trọng nhưng Tôi đã liên kết nó bên dưới. Tôi đã không tạo ra một jsfiddle cuối cùng bởi vì tôi không thể lưu trữ các tập tin SVG ở đó.

(Bên ngoài bản trình diễn, ứng dụng thực tế ở đây là tôi muốn sử dụng phông chữ tùy chỉnh để hiển thị các ký hiệu phiên âm. (Làm hình nền, để giúp mọi người tìm hiểu chúng). để xuất sang bitmap bất cứ lúc nào tôi thực hiện thay đổi trong thiết kế.)

Cảm ơn sự giúp đỡ.

+0

Kể từ Firefox 46.0.1 (hoặc có thể sớm hơn), sự cố đã biến mất. –

Trả lời

6

Bạn đang sử dụng SVG trong ngữ cảnh hình ảnh. I E. hoặc thông qua thẻ html <img>, thẻ SVG <image> hoặc trong trường hợp của bạn dưới dạng hình nền.

Trong Firefox (và có thể ở các UA khác tại một số điểm) hình ảnh phải bao gồm một tệp duy nhất. Bất kỳ dữ liệu nào bên ngoài tệp hình ảnh (pattern-google.svg) đều bị bỏ qua. Nếu bạn hiển thị SVG trực tiếp thì dữ liệu ngoài được tải/sử dụng.

Vì vậy, bạn có thể làm gì ...

Tải dữ liệu dưới dạng data URI. I E. mã hóa base64 http://fonts.googleapis.com/css?family=Indie+Flowernhưng đọc đoạn cuối cùng trước khi bạn thực hiện điều này và sau đó dán dữ liệu đó trực tiếp vào tệp svg.

Vì vậy, việc nhập khẩu sẽ trông như thế này ...

@import url('data:text/css;base64,whatever the base 64 encoded data looks like...') 

Do cẩn thận mặc dù vì http://fonts.googleapis.com/css?family=Indie+Flower chính nó có dữ liệu bên ngoài để dữ liệu tự bản thân phải được mã hóa như một dữ liệu URI. I E.bạn phải đi tất cả các con đường xuống hố thỏ. Và thay đổi tập tin đó như tôi đã phác thảo dưới đây.

Khi bạn đã hoàn tất, bạn có thể mã hóa toàn bộ tệp dưới dạng URI dữ liệu và @import nó.

Vì vậy, để nhắc lại từng bước ...

  1. Chuyển đổi http://themes.googleusercontent.com/static/fonts/indieflower/v5/10JVD_humAd5zP2yrFqw6nhCUOGz7vYGh680lGh-uXM.woff đến một dữ liệu URI
  2. Thay http://fonts.googleapis.com/css?family=Indie+Flower với một phiên bản có dữ liệu URI từ bước 1
  3. Chuyển đổi các tập tin trong bước 2 đến dữ liệu URI
  4. @nhập dữ liệu URI từ bước 3

Có rất nhiều o f các trang web trực tuyến sẽ tạo ra các URI dữ liệu.

Các vấn đề liên quan