Powinno się używać <img>
, <object>
lub <embed>
do wczytywania plików SVG do strony w sposób podobny do załadowania jpg
, gif
albo png
?
Jaki jest kod dla każdego, aby upewnić się, że działa tak dobrze, jak to możliwe? (Widzę odniesienia do włączenia typu mimetycznego lub wskazujące na renderery SVG zastępcze w moich badaniach i nie widzę dobrego odniesienia do stanu techniki).
Załóżmy, że sprawdzam obsługę SVG w programie Modernizr i wycofuję się (prawdopodobnie robię zamianę zwykłym <img>
tagiem) dla przeglądarek nieobsługujących SVG.
html
svg
vector-graphics
artlung
źródło
źródło
<svg>
z którego chcesz odwoływać się do innych plików SVG. Można to osiągnąć np<image>
. Za pomocą .Odpowiedzi:
Mogę polecić SVG Primer (opublikowany przez W3C), który obejmuje ten temat: http://www.w3.org/Graphics/SVG/IG/resources/svgprimer.html#SVG_in_HTML
Jeśli użyjesz
<object>
, otrzymasz awarię rastrową bezpłatnie *:*) Cóż, nie całkiem za darmo, ponieważ niektóre przeglądarki pobierają oba zasoby, zobacz sugestię Larry'ego, jak się obejść.
Aktualizacja 2014:
Jeśli chcesz mieć nieinteraktywny plik SVG, użyj
<img>
ze skryptami zastępczymi do wersji png (dla starszych IE i Androida <3). Jeden czysty i prosty sposób to zrobić:<img src="your.svg" onerror="this.src='your.png'">
.Będzie to zachowywać się podobnie jak obraz GIF, a jeśli Twoja przeglądarka obsługuje animacje deklaratywne (SMIL), to one będą odtwarzane.
Jeśli chcesz interaktywną SVG, użyj jednej
<iframe>
lub<object>
.Jeśli chcesz zapewnić starszym przeglądarkom możliwość korzystania z wtyczki svg, użyj
<embed>
.Dla svg w css
background-image
i podobnych właściwościach modernizr to jeden wybór do przejścia do obrazów rezerwowych, inny zależy od wielu środowisk, aby to zrobić automatycznie:Uwaga : strategia wielu środowisk nie działa na Androidzie 2.3, ponieważ obsługuje wiele środowisk, ale nie svg.
Dodatkową dobrą lekturą jest ten post na blogach o awariach SVG.
źródło
<param name="src" value="your.svg" />
wewnątrz<object>
tagu. Spędziłem bardzo dużo czasu próbując wymyślić, jak to wszystko zrobić i myślę, że w końcu to zrozumiałem.Od wersji IE9 i nowszych możesz używać SVG w zwykłym tagu IMG ..
https://caniuse.com/svg-img
źródło
<img/>
znacznika, może chcieć wiedzieć o dołączaniu identyfikatorów Fragement SVG , np. „<img src="myimage.svg#svgView(preserveAspectRatio(none))" />
”, Który pozwala kontrolować proporcjeviewBox
itp. Tak samo, jak w przypadku wbudowanych definicji SVG. Dalsza lektura na temat skalowania - css-tricks.com/scale-svg<object>
i<embed>
mają ciekawą właściwość: umożliwiają uzyskanie odniesienia do dokumentu SVG z dokumentu zewnętrznego (biorąc pod uwagę zasady tego samego pochodzenia). Odniesienia można następnie użyć do animacji SVG, zmiany arkuszy stylów itp.Dany
Możesz wtedy robić takie rzeczy jak
źródło
Najlepszą opcją jest użycie obrazów SVG na różnych urządzeniach :)
źródło
onerror
pożary, jeśli svg się nie renderuje? jakie przeglądarki przetestowałeś?Posługiwać się
srcset
Większość obecnych przeglądarek obsługuje obecnie ten
srcset
atrybut , który umożliwia określanie różnych obrazów dla różnych użytkowników. Na przykład możesz użyć go do gęstości 1x i 2x pikseli, a przeglądarka wybierze odpowiedni plik.W takim przypadku, jeśli określisz plik SVG w
srcset
przeglądarce, a przeglądarka go nie obsługuje , nastąpi powrót do niegosrc
.Ta metoda ma kilka zalet w porównaniu z innymi rozwiązaniami:
srcset
powinny wiedzieć, jak sobie z tym poradzić, aby pobierał tylko potrzebny plik.źródło
Jeśli potrzebujesz, aby pliki SVG były w pełni stylizowane za pomocą CSS, muszą być wbudowane w DOM. Można to osiągnąć poprzez wstrzyknięcie SVG, który używa Javascript do zastąpienia elementu HTML (zwykle
<img>
elementu) zawartością pliku SVG po załadowaniu strony.Oto minimalny przykład użycia SVGInject :
Po załadowaniu obrazu
onload="SVGInject(this)
uruchomi się zastrzyk, a<img>
element zostanie zastąpiony zawartością pliku podanego wsrc
atrybucie. Działa to ze wszystkimi przeglądarkami obsługującymi SVG.Oświadczenie: Jestem współautorem SVGInject
źródło
Osobiście użyłbym
<svg>
tagu, ponieważ jeśli masz pełną kontrolę nad nim . Jeśli go użyjesz, nie<img>
będziesz w stanie kontrolować wewnętrznych elementów SVG za pomocą CSS itp.Inną rzeczą jest obsługa przeglądarki .
Wystarczy otworzyć
svg
plik i wkleić go bezpośrednio do szablonu.następnie w swoim css możesz po prostu np .:
Niektóre zasoby: wskazówki SVG
źródło
Jeśli używasz znaczników <img> , przeglądarki oparte na pakiecie webkit nie będą wyświetlać osadzonych obrazów bitmapowych .
Do wszelkiego rodzaju zaawansowanych zastosowań SVG, w tym wbudowanych ofert SVG, zdecydowanie najbardziej elastyczna.
Internet Explorer i Edge poprawnie zmienią rozmiar SVG , ale musisz podać zarówno wysokość, jak i szerokość.
Możesz dodać onclick, onmouseover itp. Wewnątrz svg, do dowolnego kształtu w SVG: onmouseover = "top.myfunction (evt);"
Możesz także używać czcionek internetowych w SVG, umieszczając je w swoim zwykłym arkuszu stylów.
Uwaga: jeśli eksportujesz pliki SVG z programu Illustrator, nazwy czcionek internetowych będą nieprawidłowe. Możesz to naprawić w swoim CSS i uniknąć bałaganu w SVG. Na przykład program Illustrator nadaje niewłaściwą nazwę Arialowi i można to naprawić w następujący sposób:
Wszystko to działa na dowolnej przeglądarce wydanej od 2013 roku .
Na przykład zobacz ozake.com . Cała strona jest wykonana z SVG, z wyjątkiem formularza kontaktowego.
Ostrzeżenie: Czcionki internetowe są nieprecyzyjnie zmieniane w Safari - a jeśli masz wiele przejść od zwykłego tekstu do pogrubienia lub kursywy, w punktach przejścia może być niewielka ilość dodatkowego lub brakującego miejsca. Aby uzyskać więcej informacji, zobacz moją odpowiedź na to pytanie .
źródło
img
tagu ... Czy wiesz, czy jest to oficjalnie udokumentowane?Moje dwa centy: od 2019 r. 93% używanych przeglądarek (i 100% dwóch ostatnich wersji każdej z nich) może obsługiwać SVG w
<img>
elementach:Źródło: czy mogę korzystać
Moglibyśmy więc powiedzieć, że nie ma już powodu do korzystania
<object>
.Jednak wciąż ma swoje zalety :
Podczas inspekcji (np. Z Chrome Dev Tools) wyświetlany jest cały znacznik SVG na wypadek, gdybyś chciał go nieco zmodyfikować i zobaczyć zmiany na żywo.
Zapewnia bardzo solidną implementację rezerwową w przypadku, gdy twoja przeglądarka nie obsługuje plików SVG (poczekaj, ale każda z nich działa!), Co również działa, jeśli SVG nie zostanie znaleziony. To była kluczowa cecha specyfikacji XHTML2, która jest jak betamax lub HD-DVD
Ale są też wady :
<object>
(dzięki czemu można go bezpiecznie używać w połączeniu z<amp-img>
nim również w trybie bezpośrednim) .<object>
tagu może uniemożliwić dostęp do PWA w trybie offline.źródło
Znaleziono jedno rozwiązanie z czystym CSS i bez podwójnego pobierania obrazu. Nie jest tak piękne, jak chcę, ale działa.
Chodzi o to, aby wstawić specjalny plik SVG w stylu rezerwowym.
Więcej szczegółów i proces testowania można znaleźć na moim blogu .
źródło
Ta funkcja jQuery przechwytuje wszystkie błędy w obrazach svg i zastępuje rozszerzenie pliku innym rozszerzeniem
Otwórz konsolę, aby zobaczyć błąd podczas ładowania obrazu svg
źródło
Polecam użycie kombinacji
źródło
Możesz wstawić SVG pośrednio za pomocą
<img>
znacznika HTML, a jest to możliwe w StackOverflow zgodnie z poniższym opisem:Mam następujący plik SVG na moim komputerze
Przesłałem ten obraz na https://svgur.com
Po zakończeniu przesyłania otrzymałem następujący adres URL:
Następnie RĘCZNIE (bez użycia ikony OBRAZ) dodałem następujący znacznik HTML
a wynik jest tuż poniżej
Dla użytkowników z pewnymi wątpliwościami można zobaczyć, co zrobiłem w edycji po odpowiedzi na StackOverflow wstawiając obraz SVG
UWAGA-1: plik SVG musi zawierać
<?xml?>
element. Na początku po prostu utworzyłem plik SVG, który zaczyna się bezpośrednio od<svg>
znacznika i nic nie działa!UWAGA-2: na początku próbowałem wstawić obraz za pomocą
IMAGE
ikonyEdit Toolbar
. Wklejam adres URL mojego pliku SVG, ale StackOverflow nie akceptuje tej metody.<img>
Etykieta musi być dodany ręcznie.Mam nadzieję, że ta odpowiedź może pomóc innym użytkownikom.
źródło