2013-03-16 14 views
9

Czy istnieje sposób kodowania adresu URL lub kodu Base64 w kompasie lub SASS?Łańcuchy kodowania URL- lub Base64 w kompasie/SASS

Chcę utworzyć tło inline SVG obraz tak:

background: transparent url('data:image/svg+xml; charset=utf-8,' 
    + '<svg width="100%" height="100%" xmlns="http://www.w3.org/2000/svg">' 
    + '</svg>') 0 0 no-repeat; 

(Powodem tworzenia to inline jest to, że niektóre z wartościami SVG potrzebują pochodzić od zmiennych Sass.)

Problem polega na tym, że adresy URL danych CSS mają być zakodowane za pomocą adresów URL lub zakodowane w Base64. Jeśli nie, to narzędzia takie jak kompresor YUI mangle them.

Wiem, że można encode an image from an external file, ale muszę zakodować ciąg znaków. Czy ktoś wie, jak to zrobić?

+0

Wolałbym zrobić to wszystko w CSS/SASS, a nie JavaScript. –

Odpowiedz

22

Nie jestem pewien, czy istnieje prostszy sposób, więc napisałem niestandardową Sass funkcję:

config.rb:

require File.join(File.dirname(__FILE__), 'base64-encode.rb') 

base64-encode.rb:

require 'sass' 
require 'base64' 

module Sass::Script::Functions 
    def base64Encode(string) 
     assert_type string, :String 
     Sass::Script::String.new(Base64.strict_encode64(string.value)) 
    end 
    declare :base64Encode, :args => [:string] 
end 

Plik SCSS:

background: transparent url('data:image/svg+xml;charset=utf-8;base64,' 
    + base64Encode('<svg width="100%" height="100%" xmlns="http://www.w3.org/2000/svg">' 
    + '</svg>')) 0 0 no-repeat; 
+3

jeśli ktokolwiek zechce włączyć go do 'grunt-contrib-sass' takiemu config jak ja, wstaw' base64-encode.rb' do swojego projektu i dodaj 'require: './Path/to/base64-encode.rb'' do twojego pliku 'pomru". '. /' jest wymagane, aby 'gruntować', aby znaleźć wtyczkę względem ścieżki projektu zamiast lokalizacji klejnotów systemowych. –

+0

czy mógłbyś wyjaśnić nieco więcej, bo próbowałem tego, ale nie udało się – Johansrk

+0

newermind, po prostu potrzebowałem. – Johansrk

4
+2

Dzięki "inline-image" podajesz ścieżkę do pliku, funkcja odczytuje plik i koduje jego zawartość.Pytanie dotyczy dostarczenia danych zakodowanych bezpośrednio do funkcji. –

+3

Zauważ, że 'inline-image' nie daje możliwości używania zmiennych w svg, coś, co ludzie, którzy znaleźli się w tym wydaniu, mogli szukać – qkrijger

Powiązane problemy