Mam kilka plików SVG, które określają, width
a height
także viewbox
tak:
<svg width="576pt" height="432pt" viewBox="0 0 576 432" > ...
ale jak wyświetlić je w przeglądarce w wybranym przeze mnie rozmiarze? Chcę, żeby były mniejsze i próbowałem:
<object width="400" data="image.svg"></object>
ale wtedy widoczne są paski przewijania.
To działa, jeśli zmienię plików SVG do zbioru width
i height
aby 100%
zamiast tego, ale chcę, aby zdecydować, rozmiar w HTML niezależnie od tego, jakie rozmiary są używane w pliku SVG. Czy to możliwe ?
Odpowiedzi:
Aby to osiągnąć, możesz dodać do
<svg>
znacznika atrybuty „preserveAspectRatio” i „viewBox” .Otwórz plik .svg w edytorze i znajdź
<svg>
tag. w tym tagu dodaj następujące atrybuty:Zastąp {szerokość} i {wysokość} niektórymi wartościami domyślnymi dla viewBox. Użyłem wartości z atrybutów „width” i „height” znacznika SVG i wydawało się, że działa.
Zapisz plik SVG i powinien teraz skalować się zgodnie z oczekiwaniami.
Znalazłem te informacje tutaj:
https://blueprints.launchpad.net/inkscape/+spec/allow-browser-resizing
źródło
preserveAspectRatio="xMinYMin meet"
mi nie wystarczyło. Musiałem również podaćviewBox
jak wspomniano w odpowiedzi. Szkoda!preserveAspectRatio="none"
jeśli chcesz rozciągnąć plik SVG na dowolny sposób.100%
zgodnie z tą odpowiedzią .Żadna z udzielonych tutaj odpowiedzi nie zadziałała, gdy zadałem to pytanie w 2009 roku. Ponieważ teraz znowu miałem ten sam problem, zauważyłem, że użycie
<img>
tagu i szerokości razem z plikiem svg działa dobrze.źródło
<img>
, tracisz całą interaktywność z linkami, JavaScriptem itp.<img width="400" src="image.svg"/>
.Możesz dotrzeć do osadzonego pliku SVG za pomocą JavaScript:
Ponieważ twój svg ma już viewBox, Firefox powinien przeskalować szerokość 576 pikseli w viewBox do szerokości 400 pikseli w dokumencie. Inne pliki SVG mogą skorzystać z nowego ViewBox pochodzącego z reklamowanej szerokości i wysokości (często są to te same liczby). Inne przeglądarki mogą skorzystać na różnych poprawkach SVG.
źródło
Security error: attempted to read protected variable
img / logo.svg ...
Ta konfiguracja zadziałała dla mnie.
źródło
viewBox="0 0 640 80"
. Najwyraźniej jeśli nie jest to zdefiniowane, nie możesz tak naprawdę tego skalować lub pozwolić CSS skalować go za Ciebie, używając np.width: 100%
Itp.Napotkałem problem polegający na tym, że iOS na iPadzie nie zmieniał poprawnie rozmiaru obrazów SVG w
<object>
tagu.Styl CSS zwiększyłby lub zmniejszył rozmiar
<object>
kontenera, ale znajdujący się w nim obraz nie zostałby zmodyfikowany (na iPadzie, iOS 7).Obrazy SVG zostały wyeksportowane z Adobe Illustrator, a rozwiązaniem okazało się zastąpienie szerokości i wysokości w tym:
z:
Musiałem użyć
<object>
tagu, ponieważ<img>
tag nie obsługuje obecnie osadzania obrazów bitmapowych w plikach SVG.źródło
Ustaw brakujące pole widoku i wypełnij wartości wysokości i szerokości ustawionych atrybutów wysokości i wysokości w tagu svg
Następnie przeskaluj obraz, ustawiając wysokość i szerokość na żądane wartości procentowe . Powodzenia.
Możesz ustawić stały współczynnik proporcji za pomocą preserveAspectRatio = "x200Y200 meet, ale nie jest to konieczne
na przykład
źródło
Po prostu użyj CSS, aby przeglądarka zmieniła rozmiar SVG! Na przykład:
<object style="width:30%">
zobacz http://www.vlado-do.de/svg_test/, aby uzyskać więcej informacji. Po prostu wypróbowałem to również lokalnie z plikiem SVG, którego szerokość i wysokość są podane w „pt”. Działa dobrze w przeglądarce Firefox.źródło
Pokazać. Musiałem odświeżyć pamięć na SVG, nie używałem go zbyt wiele przez te lata.
Z tego, co znalazłem dzisiaj, wydaje się, że jeśli określisz wymiary obiektów bez jednostek, mają one stały rozmiar (chyba w pikselach). Wygląda więc na to, że nie ma możliwości zmiany ich rozmiaru podczas zmiany rozmiaru SVG (zmienia to tylko rozmiar widoku / obszaru roboczego).
Chyba że, jak wskazano, określasz rozmiar SVG w procentach LUB określisz viewBox (np. ViewBox = "0 0 600 500").
Jeśli nie możesz zmienić wyeksportowanego pliku SVG, obawiam się, że nie masz szczęścia. Z jakiej biblioteki korzystasz?
źródło
Oto rozwiązanie PHP wykorzystujące QueryPath na podstawie odpowiedzi Jima Kellera.
Po załadowaniu QueryPath po prostu przekaż swój skrypt svg do funkcji.
źródło