Menempatkan output SVG secara langsung sejajar dengan kode halaman saya dapat dengan mudah memodifikasi warna isi dengan CSS seperti:
polygon.mystar {
fill: blue;
}
circle.mycircle {
fill: green;
}
Ini berfungsi dengan baik, namun saya sedang mencari cara untuk memodifikasi atribut "isi" dari SVG ketika disajikan sebagai BACKGROUND-IMAGE.
html {
background-image: url(../img/bg.svg);
}
Bagaimana saya bisa mengubah warna sekarang? Apakah itu mungkin?
Untuk referensi, berikut adalah isi file SVG eksternal saya:
<svg version="1.1" id="Layer_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
width="320px" height="100px" viewBox="0 0 320 100" enable-background="new 0 0 320 100" xml:space="preserve">
<polygon class="mystar" fill="#3CB54A" points="134.973,14.204 143.295,31.066 161.903,33.77 148.438,46.896 151.617,65.43 134.973,56.679
118.329,65.43 121.507,46.896 108.042,33.77 126.65,31.066 "/>
<circle class="mycircle" fill="#ED1F24" cx="202.028" cy="58.342" r="12.26"/>
</svg>
Jawaban:
Salah satu cara untuk melakukan ini adalah melayani svg Anda dari beberapa mekanisme sisi server. Cukup buat sisi server sumber daya yang menampilkan svg Anda sesuai dengan parameter GET, dan Anda menayangkannya di url tertentu.
Maka Anda cukup menggunakan url itu di css Anda.
Karena sebagai latar belakang img, itu bukan bagian dari DOM dan Anda tidak dapat memanipulasi itu. Kemungkinan lain adalah menggunakannya secara teratur, menyematkannya dalam halaman dengan cara normal, tetapi posisikan secara absolut, buat lebar penuh & tinggi halaman, lalu gunakan properti z-index css untuk meletakkannya di belakang semua elemen DOM lainnya di halaman.
sumber
<?php header('Content-type: image/svg+xml'); ?>
Saya membutuhkan sesuatu yang serupa dan ingin tetap menggunakan CSS. Berikut adalah mixins KURANG dan SCSS serta CSS biasa yang dapat membantu Anda dengan ini. Sayangnya, dukungan browsernya agak longgar. Lihat di bawah untuk detail tentang dukungan browser.
KURANG mixin:
KURANG penggunaan:
SCSS mixin:
Penggunaan SCSS:
CSS:
Ini info lebih lanjut tentang menanamkan kode SVG lengkap ke file CSS Anda. Disebutkan juga kompatibilitas browser yang agak terlalu kecil untuk menjadi opsi yang layak.
sumber
#
karakter untuk warna hex Anda untuk membuat ini berfungsi di Firefox. Jadi sesuatu seperti<svg fill="#ffffff" ...></svg>
menjadi<svg fill="%23ffffff" ...></svg>
.Anda dapat menggunakan topeng CSS, Dengan properti 'topeng', Anda membuat topeng yang diterapkan ke suatu elemen.
Untuk lebih lanjut lihat artikel hebat ini: https://codepen.io/noahblon/post/coloring-svgs-in-css-background-images
sumber
Namun pendekatan lain adalah menggunakan topeng. Anda kemudian mengubah warna latar belakang elemen yang disembunyikan. Ini memiliki efek yang sama dengan mengubah atribut isian svg.
HTML:
CSS:
Anda akan menemukan tutorial lengkap di sini: http://codepen.io/noahblon/blog/coloring-svgs-in-css-background-images (bukan milik saya). Ini mengusulkan berbagai pendekatan (tidak terbatas pada topeng).
sumber
mask
yang tidak didukung oleh IE atau Ujung: caniuse.com/#search=maskItu mungkin dengan Sass! Satu-satunya hal yang harus Anda lakukan adalah url-encode kode svg Anda. Dan ini dimungkinkan dengan fungsi pembantu di Sass. Saya sudah membuat codepen untuk ini. Lihat ini:
http://codepen.io/philippkuehn/pen/zGEjxB
sumber
artikel codeben dan demo
sumber
Unduh svg Anda sebagai teks.
Ubah teks svg Anda menggunakan javascript untuk mengubah warna cat / stroke / fill [s].
Kemudian masukkan string svg yang dimodifikasi ke dalam css Anda seperti dijelaskan di sini .
sumber
Sekarang Anda dapat mencapai ini di sisi klien seperti ini:
Biola di sini!
sumber
Anda dapat menyimpan SVG dalam sebuah variabel. Kemudian memanipulasi string SVG tergantung pada kebutuhan Anda (yaitu, mengatur lebar, tinggi, warna, dll). Kemudian gunakan hasilnya untuk mengatur latar belakang, mis
Saya telah membuat demo juga, http://sassmeister.com/gist/4cf0265c5d0143a9e734 .
Kode ini membuat beberapa asumsi tentang SVG, misalnya
<svg />
elemen yang tidak memiliki warna isian yang ada dan bahwa properti lebar atau tinggi tidak diatur. Karena input di-hardcode dalam dokumen SCSS, cukup mudah untuk menegakkan batasan-batasan ini.Jangan khawatir tentang duplikasi kode. gzip kompresi membuat perbedaan dapat diabaikan.
sumber
Anda dapat membuat fungsi SCSS Anda sendiri untuk ini. Menambahkan berikut ini ke file config.rb Anda.
Kemudian Anda dapat menggunakannya di CSS Anda:
Anda perlu mengedit file SVG Anda dan mengganti atribut isian apa pun di markup dengan fill = "{color}"
Ikon path selalu relatif terhadap parameter images_dir Anda dalam file config.rb yang sama.
Mirip dengan beberapa solusi lain, tetapi ini cukup bersih dan membuat file SCSS Anda rapi!
sumber
Dalam beberapa situasi (sangat spesifik) ini dapat dicapai dengan menggunakan filter . Misalnya, Anda dapat mengubah gambar SVG biru menjadi ungu dengan memutar hue 45 derajat menggunakan
filter: hue-rotate(45deg);
. Dukungan peramban sangat minim tetapi masih merupakan teknik yang menarik.Demo
sumber
untuk latar belakang monokrom Anda dapat menggunakan svg dengan topeng, di mana warna latar belakang harus ditampilkan
dan daripada menggunakan css ini
sumber
Gunakan filter sepia bersama dengan rona-putar, kecerahan, dan saturasi untuk membuat warna apa pun yang kita inginkan.
https://css-tricks.com/solved-with-css-colorizing-svg-backgrounds/
sumber
Terlambat acara di sini, TETAPI, saya bisa menambahkan warna isian ke poligon SVG, jika Anda dapat langsung mengedit kode SVG, jadi misalnya svg berikut membuat merah, bukan hitam standar. Saya belum menguji di luar Chrome:
sumber
Ini adalah metode favorit saya, tetapi dukungan browser Anda harus sangat progresif. Dengan properti mask, Anda membuat topeng yang diterapkan ke elemen. Di mana-mana topeng itu buram, atau padat, gambar di bawahnya terlihat. Jika transparan, gambar yang mendasarinya disembunyikan, atau disembunyikan. Sintaks untuk gambar topeng CSS mirip dengan gambar latar. lihat codepen itu
mask
sumber
Banyak IF, tetapi jika SVG pra-encode pra base64 Anda mulai:
Kemudian string yang disandikan base64 akan mulai:
jika string pra-enkode dimulai:
maka ini disandikan ke:
Kedua string yang disandikan mulai sama:
Keunikan dari encoding base64 adalah setiap 3 karakter input menjadi 4 karakter output. Dengan SVG dimulai seperti ini maka warna hex mengisi 6 karakter dimulai tepat pada 'batas' blok penyandian. Karena itu Anda dapat dengan mudah melakukan penggantian lintas-browser JS:
Tetapi jawaban di atas adalah cara untuk terus maju.
sumber