html
<img src="logo.svg" alt="Logo" class="logo-img">
css
.logo-img path {
fill: #000;
}
Svg di atas memuat dan secara asli fill: #fff
tetapi ketika saya menggunakan di atas css
untuk mencoba mengubahnya menjadi hitam itu tidak berubah, ini adalah pertama kalinya saya bermain dengan SVG dan saya tidak yakin mengapa itu tidak berfungsi.
Jawaban:
Jika tujuan Anda hanya untuk mengubah warna logo, dan Anda tidak perlu PERLU menggunakan CSS, maka jangan gunakan javascript atau jquery seperti yang disarankan oleh beberapa jawaban sebelumnya.
Untuk menjawab pertanyaan awal dengan tepat, cukup:
Buka
logo.svg
editor teks Anda.mencari
fill: #fff
dan menggantinya denganfill: #000
Misalnya, Anda
logo.svg
mungkin terlihat seperti ini ketika dibuka di editor teks:... ganti saja isi dan simpan.
sumber
path
ataucircle
suka<path fill="#777777" d="m129.774,74.409c-5.523,...
.fill="currentColor"
kemudian gunakancolor
pada elemen induk css-tricks.com/cascading-svg-fill-colorAnda bisa mengatur SVG Anda sebagai topeng. Dengan cara mengatur warna latar akan bertindak sebagai warna isi Anda.
HTML
CSS
JSFiddle: https://jsfiddle.net/KuhlTime/2j8exgcb/
MDN: https://developer.mozilla.org/en-US/docs/Web/CSS/mask
Silakan periksa apakah browser Anda mendukung fitur ini: https://caniuse.com/#search=mask
sumber
mask
adalahinvalid property value
. saya menguji ini di chrome.Coba CSS murni:
info lebih lanjut dalam artikel ini https://blog.union.io/code/2017/08/10/img-svg-fill/
sumber
2018: Jika Anda ingin warna yang dinamis, tidak ingin menggunakan javascript dan tidak ingin SVG inline, gunakan variabel CSS. Bekerja di Chrome, Firefox, dan Safari. edit: dan Edge
Di SVG Anda, ganti instance
style="fill: #000"
denganstyle="fill: var(--color_fill)"
.sumber
"This feature has been removed from the Web standards. Though some browsers may still support it, it is in the process of being dropped"
xlink:href
sudah usang mendukunghref
. Jadi ini mungkin masih berfungsi.Pertama-tama Anda harus menyuntikkan SVG ke HTML DOM.
Ada pustaka sumber terbuka bernama SVGInject yang melakukan ini untuk Anda. Ini menggunakan
onload
atribut untuk memicu injeksi.Berikut adalah contoh minimal menggunakan SVGInject:
Setelah gambar dimuat,
onload="SVGInject(this)
akan memicu injeksi dan<img>
elemen akan diganti dengan isi file SVG yang disediakan dalamsrc
atribut.Ini memecahkan beberapa masalah dengan injeksi SVG:
SVG dapat disembunyikan sampai injeksi selesai. Ini penting jika gaya sudah diterapkan selama waktu pemuatan, yang jika tidak akan menyebabkan "flash konten tanpa gaya" singkat.
<img>
Unsur - unsur menyuntikkan diri secara otomatis. Jika Anda menambahkan SVG secara dinamis, Anda tidak perlu khawatir tentang memanggil fungsi injeksi lagi.String acak ditambahkan ke setiap ID dalam SVG untuk menghindari memiliki ID yang sama beberapa kali dalam dokumen jika SVG disuntikkan lebih dari satu kali.
SVGInject adalah Javascript biasa dan bekerja dengan semua browser yang mendukung SVG.
Penafian: Saya adalah rekan penulis SVGInject
sumber
Jawaban dari @Praveen solid.
Saya tidak bisa membuatnya merespons dalam pekerjaan saya, jadi saya membuat fungsi jquery hover untuk itu.
CSS
JS / JQuery
sumber
Mengapa tidak membuat webfont dengan gambar svg Anda atau gambar, mengimpor webfont di css dan kemudian hanya mengubah warna mesin terbang menggunakan atribut warna css? Tidak diperlukan javascript
sumber
Jawaban ini didasarkan pada jawaban https://stackoverflow.com/a/24933495/3890888 tetapi dengan skrip JavaScript versi biasa yang digunakan di sana.
Anda perlu membuat SVG menjadi SVG sebaris . Anda dapat menggunakan skrip ini, dengan menambahkan kelas
svg
ke gambar:Dan kemudian, sekarang jika Anda melakukannya:
Atau mungkin:
JSFiddle: http://jsfiddle.net/erxu0dzz/1/
sumber
parser.parseFromString(text, "image/svg+xml");
fetch
yang ditambahkan ke Safari di 10.1 ( developer.mozilla.org/en-US/docs/Web/API/Fetch_API ). Versi jQuery di atas tidak berfungsi.Gunakan filter untuk mengubah warna apa pun.
Saya baru-baru ini menemukan solusi ini, dan berharap seseorang mungkin dapat menggunakannya. Karena solusi menggunakan filter, maka dapat digunakan dengan semua jenis gambar. Bukan hanya svg.
Jika Anda memiliki gambar satu warna yang hanya ingin Anda ubah warnanya, Anda dapat melakukannya dengan bantuan beberapa filter. Ini berfungsi pada gambar multicolor juga tentu saja, tetapi Anda tidak dapat menargetkan warna tertentu. Hanya seluruh gambar.
Filter berasal dari skrip yang diajukan dalam Cara mengubah warna hitam menjadi warna apa pun yang hanya menggunakan filter CSS. Jika Anda ingin mengubah warna putih menjadi warna apa pun, Anda dapat menyesuaikan nilai invert di setiap filter.
sumber
Untuk memperluas jawaban @ gringo, metode Javascript yang dijelaskan dalam jawaban lain berfungsi, tetapi mengharuskan pengguna untuk mengunduh file gambar yang tidak perlu, dan IMO, itu menggembungkan kode Anda.
Saya pikir pendekatan yang lebih baik adalah dengan memigrasikan semua grafik vektor 1-warna ke file webfont. Saya telah menggunakan Fort Awesome di masa lalu, dan bekerja sangat baik untuk menggabungkan ikon / gambar khusus Anda dalam format SVG, bersama dengan ikon pihak ke-3 yang mungkin Anda gunakan (Font Awesome, ikon Bootstrap, dll.) Ke dalam satu file webfont pengguna harus mengunduh. Anda juga dapat menyesuaikannya, sehingga Anda hanya menyertakan ikon pihak ke-3 yang Anda gunakan. Ini mengurangi jumlah permintaan yang harus dibuat halaman, dan Anda secara keseluruhan berat halaman, terutama jika Anda sudah termasuk ikon pihak ketiga perpustakaan.
Jika Anda lebih suka opsi yang lebih berorientasi pada dev, Anda dapat Google "npm svg webfont" , dan menggunakan salah satu modul simpul yang paling tepat untuk lingkungan Anda.
Setelah, Anda melakukan salah satu dari dua opsi itu, maka Anda dapat dengan mudah mengubah warna melalui CSS, dan kemungkinan besar, Anda telah mempercepat situs Anda dalam proses.
sumber
Jika Anda hanya mengganti gambar antara warna asli dan hitam-putih, Anda dapat menetapkan satu pemilih sebagai:
{filter: tidak ada;}
dan lainnya sebagai:
sumber
Sederhana..
Anda dapat menggunakan kode ini:
Pertama tentukan path svg dan kemudian tulis ID-nya, Dalam hal ini "Capa_1". Anda bisa mendapatkan ID svg dengan membukanya di editor apa pun.
Dalam css:
sumber
Masalah utama dalam kasus Anda adalah bahwa Anda mengimpor svg dari
<img>
tag yang akan menyembunyikan struktur SVG.Anda harus menggunakan
<svg>
tag bersamaan dengan<use>
untuk mendapatkan efek yang diinginkan. Untuk membuatnya berfungsi, Anda perlu memberikanid
jalur yang ingin Anda gunakan dalam file SVG<path id='myName'...>
untuk kemudian dapat mengambilnya dari<use xlink:href="#myName"/>
tag. Cobalah potongan di bawah ini.Tampilkan cuplikan kode
Perhatikan bahwa Anda dapat meletakkan URL apa pun sebelum fragmen
#
jika Anda ingin memuat SVG dari sumber eksternal (dan tidak menanamkannya ke HTML Anda). Juga, biasanya Anda tidak menentukan isi ke dalam CSS. Lebih baik mempertimbangkan menggunakanfill:"currentColor"
dalam SVG itu sendiri. Nilai warna CSS elemen yang sesuai kemudian akan digunakan.sumber
Karena SVG pada dasarnya adalah kode, Anda hanya perlu konten. Saya menggunakan PHP untuk mendapatkan konten, tetapi Anda dapat menggunakan apa pun yang Anda inginkan.
Lalu, saya sudah mencetak konten "apa adanya" di dalam wadah div
Untuk menetapkan aturan untuk anak SVG kontainer di CSS
Saya mendapat hasil ini dengan ikon materi SVG:
Mozilla Firefox 59.0.2 (64-bit) Linux
Google Chrome66.0.3359.181 (Build oficial) (64 bit) Linux
Opera 53.0.2907.37 Linux
sumber
Ini mungkin bermanfaat bagi orang yang menggunakan
PHP
dalam kombinasi dengan.svg
gambar yang ingin mereka manipulasi dengan CSS.Anda tidak dapat menimpa properti di dalam tag img dengan CSS. Tetapi ketika kode sumber svg tertanam dalam HTML Anda pasti bisa. Saya suka mengatasi masalah ini dengan
require_once
fungsi tempat saya menyertakan.svg.php
file. Ini seperti mengimpor gambar tetapi Anda masih bisa menimpa gaya dengan CSS!Pertama-tama termasuk file svg:
Dan itu termasuk ikon ini misalnya:
Sekarang kita dapat dengan mudah mengubah warna isian seperti ini dengan CSS:
Saya pertama kali mencoba menyelesaikan masalah ini dengan
file_get_contents()
tetapi solusi di atas jauh lebih cepat.sumber
Tahu ini adalah pertanyaan lama tetapi baru-baru ini kami menemukan masalah yang sama, dan kami menyelesaikannya dari sisi server. Ini adalah jawaban khusus php tetapi saya yakin bahwa env lain memiliki sesuatu yang serupa. alih-alih menggunakan tag img Anda membuat svg sebagai svg dari awal.
sekarang ketika Anda membuat file Anda akan mendapatkan svg inline lengkap
sumber
buka ikon svg di editor kode Anda dan tambahkan kelas setelah tag path:
Anda dapat menambahkan kelas ke svg dan mengubah warna seperti ini:
codepen
sumber
Jika Anda memiliki akses ke JQuery, maka lanjutkan ke jawaban Praveen, orang dapat secara programatik mengubah warna elemen bersarang yang berbeda di dalam SVG dengan:
$('svg').find('path, text').css('fill', '#ffffff');
Dalam find, Anda dapat menyebutkan elemen berbeda yang perlu diubah warnanya.
sumber