Haruskah saya menggunakan <img>
,, <object>
atau <embed>
untuk memuat file SVG ke halaman dengan cara yang mirip dengan memuat jpg
, gif
atau png
?
Apa kode untuk masing-masing untuk memastikan itu berfungsi sebaik mungkin? (Saya melihat referensi untuk memasukkan mimetype atau menunjuk ke rendering SVG mundur dalam penelitian saya dan tidak melihat referensi seni yang bagus).
Asumsikan saya sedang memeriksa dukungan SVG dengan Modernizr dan mundur (mungkin melakukan penggantian dengan <img>
tag biasa ) untuk browser yang tidak mampu SVG.
html
svg
vector-graphics
artlung
sumber
sumber
<svg>
dari mana Anda ingin merujuk SVG lain. Ini dapat dicapai, misalnya menggunakan<image>
.Jawaban:
Saya dapat merekomendasikan SVG Primer (diterbitkan oleh W3C), yang mencakup topik ini: http://www.w3.org/Graphics/SVG/IG/resources/svgprimer.html#SVG_in_HTML
Jika Anda menggunakan
<object>
maka Anda mendapatkan raster fallback gratis *:*) Yah, tidak sepenuhnya gratis, karena beberapa browser mengunduh kedua sumber daya, lihat saran Larry di bawah ini untuk cara menyiasatinya.
Pembaruan 2014:
Jika Anda menginginkan svg non-interaktif, gunakan
<img>
dengan skrip fallbacks ke versi png (untuk IE yang lebih lama dan android <3). Satu cara bersih dan sederhana untuk melakukan itu:<img src="your.svg" onerror="this.src='your.png'">
.Ini akan berperilaku seperti gambar GIF, dan jika browser Anda mendukung animasi deklaratif (SMIL) maka mereka akan bermain.
Jika Anda ingin svg interaktif, gunakan salah satu
<iframe>
atau<object>
.Jika Anda perlu memberikan browser yang lebih lama kemampuan untuk menggunakan plugin svg, maka gunakan
<embed>
.Untuk svg dalam css
background-image
dan properti serupa, modernizr adalah salah satu pilihan untuk beralih ke gambar mundur, yang lain tergantung pada beberapa latar belakang untuk melakukannya secara otomatis:Catatan : strategi beberapa latar belakang tidak berfungsi pada Android 2.3 karena mendukung banyak latar belakang tetapi tidak svg.
Bacaan tambahan yang bagus adalah posting blog ini tentang svg fallbacks.
sumber
<param name="src" value="your.svg" />
di dalam<object>
tag. Saya telah menghabiskan waktu yang sangat lama untuk mencari tahu bagaimana melakukan semua itu, dan saya pikir saya akhirnya mendapatkannya.Dari IE9 dan di atas Anda dapat menggunakan SVG dalam tag IMG biasa ..
https://caniuse.com/svg-img
sumber
<img/>
tag mungkin ingin tahu tentang menambahkan pengidentifikasi Frekuensi SVG , misalnya "<img src="myimage.svg#svgView(preserveAspectRatio(none))" />
", yang memungkinkan Anda mengontrol rasio aspekviewBox
,, dll, sama seperti dengan definisi SVG sebaris. Bacaan lebih lanjut tentang penskalaan - css-tricks.com/scale-svg<object>
dan<embed>
memiliki properti yang menarik: mereka memungkinkan untuk mendapatkan referensi ke dokumen SVG dari dokumen luar (dengan mempertimbangkan kebijakan asal-sama). Referensi kemudian dapat digunakan untuk menghidupkan SVG, mengubah stylesheetnya, dll.Diberikan
Anda kemudian dapat melakukan hal-hal seperti
sumber
Pilihan terbaik adalah menggunakan Gambar SVG pada perangkat yang berbeda :)
sumber
onerror
kebakaran jika svg tidak memberikan? browser apa yang telah Anda uji?Menggunakan
srcset
Sebagian besar browser saat ini mendukung
srcset
atribut , yang memungkinkan menentukan gambar berbeda untuk pengguna yang berbeda. Misalnya, Anda dapat menggunakannya untuk kepadatan 1x dan 2x piksel, dan browser akan memilih file yang benar.Dalam hal ini, jika Anda menentukan SVG di
srcset
dan browser tidak mendukungnya, itu akan mundur padasrc
.Metode ini memiliki beberapa manfaat dibandingkan solusi lain:
srcset
harus tahu cara menanganinya sehingga hanya mengunduh file yang dibutuhkan.sumber
Jika Anda perlu SVG Anda sepenuhnya bergaya dengan CSS mereka harus inline di DOM. Ini dapat dicapai melalui injeksi SVG, yang menggunakan Javascript untuk mengganti elemen HTML (biasanya
<img>
elemen) dengan konten file SVG setelah halaman dimuat.Berikut adalah contoh minimal menggunakan SVGInject :
Setelah gambar dimuat,
onload="SVGInject(this)
akan memicu injeksi dan<img>
elemen akan diganti dengan konten file yang disediakan dalamsrc
atribut. Ini berfungsi dengan semua browser yang mendukung SVG.Penafian: Saya adalah rekan penulis SVGInject
sumber
Saya pribadi akan menggunakan
<svg>
tag karena jika Anda melakukannya, Anda memiliki kontrol penuh atasnya . Jika Anda menggunakannya,<img>
Anda tidak bisa mengendalikan jeroan SVG dengan CSS dll.Hal lain adalah dukungan browser .
Cukup buka
svg
file Anda dan tempel langsung ke templat.kemudian di css Anda, Anda bisa misalnya:
Beberapa sumber: kiat SVG
sumber
Jika Anda menggunakan tag <img> , maka browser berbasis webkit tidak akan menampilkan gambar yang dipetakan dengan bitmap .
Untuk segala jenis penggunaan SVG tingkat lanjut, termasuk SVG inline menawarkan fleksibilitas yang paling banyak.
Internet Explorer dan Edge akan mengubah ukuran SVG dengan benar , tetapi Anda harus menentukan tinggi dan lebar.
Anda dapat menambahkan onclick, onmouseover, dll. dalam svg, ke bentuk apa pun di SVG: onmouseover = "top.myfunction (evt);"
Anda juga dapat menggunakan font web di SVG dengan memasukkannya dalam style sheet biasa.
Catatan: jika Anda mengekspor SVG dari Illustrator, nama font web akan salah. Anda dapat memperbaiki ini di CSS Anda dan menghindari bermain-main di SVG. Misalnya, Illustrator memberikan nama yang salah kepada Arial, dan Anda dapat memperbaikinya seperti ini:
Semua ini berfungsi di semua browser yang dirilis sejak 2013 .
Sebagai contoh, lihat ozake.com . Seluruh situs dibuat dari SVG kecuali untuk formulir kontak.
Peringatan: Font web diubah ukurannya dengan tidak tepat di Safari - dan jika Anda memiliki banyak transisi dari teks biasa ke cetak tebal atau miring, mungkin ada sedikit ruang ekstra atau hilang di titik transisi. Lihat jawaban saya di pertanyaan ini untuk informasi lebih lanjut.
sumber
img
tag saya ... Apakah Anda tahu apakah ini secara resmi didokumentasikan di mana saja?Dua sen saya: pada 2019, 93% browser yang digunakan (dan 100% dari dua versi terakhir dari masing-masing dari mereka) dapat menangani
<img>
elemen dalam SVG :Sumber: Dapatkah Saya Menggunakan
Jadi kita dapat mengatakan bahwa tidak ada alasan untuk menggunakannya
<object>
lagi.Namun masih memiliki kelebihan :
Saat memeriksa (mis. Dengan Alat Dev Chrome) Anda disajikan dengan seluruh markup SVG jika Anda ingin sedikit merusaknya dan melihat perubahan langsung.
Ini memberikan implementasi fallback yang sangat kuat jika browser Anda tidak mendukung SVG (tunggu, tetapi semuanya melakukannya!) Yang juga berfungsi jika SVG tidak ditemukan. Ini adalah fitur kunci dari spesifikasi XHTML2, yang seperti betamax atau HD-DVD
Tetapi ada juga kontra :
<object>
(itu sangat aman untuk menggunakannya dengan<amp-img>
dan menggunakannya juga .<object>
tag mungkin membuat PWA Anda tidak mampu secara offline.sumber
Menemukan satu solusi dengan CSS murni dan tanpa pengunduhan gambar ganda. Itu tidak indah seperti yang saya inginkan, tetapi berhasil.
Idenya adalah untuk memasukkan SVG khusus dengan gaya fallback.
Lebih detail dan proses pengujian dapat Anda temukan di blog saya .
sumber
Fungsi jQuery ini menangkap semua kesalahan dalam gambar svg dan mengganti ekstensi file dengan ekstensi alternatif
Silakan buka konsol untuk melihat kesalahan memuat gambar svg
sumber
Saya sarankan menggunakan kombinasi
sumber
Anda dapat memasukkan SVG menggunakan secara tidak langsung
<img>
tag HTML dan ini dimungkinkan pada StackOverflow mengikuti apa yang dijelaskan di bawah ini:Saya telah mengikuti file SVG di PC saya
Saya telah mengunggah gambar ini ke https://svgur.com
Setelah unggahan dihentikan, saya mendapatkan URL berikut:
Saya kemudian MANUAL (tanpa menggunakan ikon IMAGE) menambahkan tag html berikut
dan hasilnya tepat di bawah
Untuk pengguna dengan keraguan, adalah mungkin untuk melihat apa yang telah saya lakukan dalam mengedit jawaban berikut tentang StackOverflow memasukkan gambar SVG
KETERANGAN-1: file SVG harus mengandung
<?xml?>
elemen. Pada awalnya, saya hanya membuat file SVG yang dimulai langsung dengan<svg>
tag dan tidak ada yang berhasil!KETERANGAN-2: di awal, saya telah mencoba memasukkan gambar menggunakan
IMAGE
ikonEdit Toolbar
. Saya tempel URL file SVG saya tetapi StackOverflow tidak menerima metode ini. Itu<img>
tag harus ditambahkan secara manual.Saya harap jawaban ini dapat membantu pengguna lain.
sumber