Zmieniasz rozmiar SVG w html?


156

Mam więc plik SVG w formacie HTML i jedną z rzeczy, które słyszałem o tym formacie, jest to, że nie jest on rozpikselowany w całości po powiększeniu.

Wiem, że z jpeg lub czymkolwiek innym, co mógłbym zapisać jako ikonę 50 na 50, a następnie wyświetlam go jako (raczej pikselowaną) miniaturę 100 na 100 (lub 10 na 10), ręcznie ustawiając wysokość i szerokość w image_src etykietka.

Wydaje się jednak, że pliki SVG są używane ze znacznikami obiektu / osadzania, a zmiana wysokości lub szerokości TYCH TYLKO powoduje po prostu przydzielenie większej ilości miejsca na obraz.

Czy istnieje sposób, aby określić, że chcesz, aby obraz SVG był wyświetlany w rozmiarze mniejszym lub większym niż faktycznie jest przechowywany w systemie plików?

Odpowiedzi:


177

Otwórz .svgplik w edytorze tekstu (to tylko XML) i poszukaj czegoś takiego u góry:

<svg ... width="50px" height="50px"...

Usuń atrybuty szerokości i wysokości; wartości domyślne to 100%, więc powinno rozciągać się do wszystkiego, na co pozwala na to kontener.


75
Tak, zgadza się, ale musisz też dodać atrybut „viewBox” (np. ViewBox = „0 0 50 50” w przykładzie o wymiarach 50x50px), w przeciwnym razie zawartość może nie skalować się prawidłowo (zależy to od wymiarów kontenera). Scour zrobi to za Ciebie automatycznie, codedread.com/scour .
— Erik Dahlström

Brawo! To pomogło! Okazuje się, że miałem już rzeczy w 100% w pliku, ale kluczem było okienko podglądu! Dziękuję wam obu!
— Jenny

26
Na wypadek, gdyby nie było to oczywiste dla nikogo innego, „viewBox” rozróżnia wielkość liter. Ponadto pierwsze dwie współrzędne to lewy górny róg, jeśli przycinasz obraz, a dwie drugie współrzędne to szerokość i wysokość przed skalowaniem.
— Big McLargeHuge

1
Zwróć uwagę, że zarówno <div style = "width: 50px; height: 50px"> <svg viewBox = "0 0 1000 1000"> ... </svg> </div>, jak i <svg viewBox = "0 0 1000 1000" style = "width: 50px; height: 50px"> ... </svg> będzie działać.
— poszerzył się

48

Spróbuj tych:

  1. Ustaw brakujące okno widoku i wypełnij wartości wysokości i szerokości ustawionych atrybutów wysokości i wysokości w tagu svg

  2. Następnie przeskaluj obraz, ustawiając wysokość i szerokość na żądane wartości procentowe . Powodzenia.

  3. Ustaw stały współczynnik proporcji za pomocą preserveAspectRatio="X200Y200 meet(np. 200px), ale nie jest to konieczne

na przykład

 <svg
   xmlns:dc="http://purl.org/dc/elements/1.1/"
   xmlns:cc="http://creativecommons.org/ns#"
   xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
   xmlns:svg="http://www.w3.org/2000/svg"
   xmlns="http://www.w3.org/2000/svg"
   xmlns:xlink="http://www.w3.org/1999/xlink"
   xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
   xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
   width="10%" 
   height="10%"
   preserveAspectRatio="x200Y200 meet"
   viewBox="0 0 350 350"
   id="svg2"
   version="1.1"
   inkscape:version="0.48.0 r9654"
   sodipodi:docname="namesvg.svg">

24

możesz zmienić jego rozmiar, wyświetlając svg w tagu obrazu i rozmiar tagu obrazu, tj

<img width="200px" src="lion.svg"></img>

1
Myślę, że problem z używaniem <img> polega na tym, że tracisz możliwości przełączania awaryjnego znacznika <object> (co może być istotne dla użytkowników IE w wersji 8 i starszych).
— Nathan Crause,

10

Zmiana szerokości kontenera również ją naprawia, zamiast zmieniać szerokość i wysokość pliku źródłowego.

.SvgImage img{ width:80%; }

To rozwiązuje mój problem ze zmianą rozmiaru pliku svg. możesz podać dowolny% na podstawie swoich wymagań.


8

Uważam, że najlepiej jest dodawać viewBoxi preserveAspectRatioprzypisywać do moich plików SVG. Pole podglądu powinno opisywać pełną szerokość i wysokość SVG w postaci 0 0 w h:

<svg preserveAspectRatio="xMidYMid meet" viewBox="0 0 700 550"></svg>

2
Szczerze mówiąc, to najlepsza opcja. Działa jak marzenie.
— Justin


4

Oto przykład uzyskania granic za pomocą svg.getBox(): https://gist.github.com/john-doherty/2ad94360771902b16f459f590b833d44

Na końcu dostajesz liczby, które możesz podłączyć do svg, aby poprawnie ustawić widok. Następnie użyj dowolnego css w nadrzędnym div i gotowe.

 // get all SVG objects in the DOM
 var svgs = document.getElementsByTagName("svg");
 var svg = svgs[0],
    box = svg.getBBox(), // <- get the visual boundary required to view all children
    viewBox = [box.x, box.y, box.width, box.height].join(" ");

    // set viewable area based on value above
    svg.setAttribute("viewBox", viewBox);

1

Mam plik SVG w formacie HTML [....] CZY istnieje sposób, aby określić, że chcesz, aby obraz SVG był wyświetlany w rozmiarze mniejszym lub większym niż jest faktycznie przechowywany w systemie plików?

Grafika SVG, podobnie jak inne dzieła twórcze, jest chroniona prawem autorskim w większości krajów. W zależności od jurysdykcji, licencji na dzieło lub tego, czy jesteś właścicielem praw autorskich, możesz nie być w stanie zmodyfikować SVG bez naruszenia praw autorskich , wierz lub nie.

Ale prawa to trudne tematy i czasami chcesz po prostu załatwić sprawę. Dlatego możesz dostosować skalę grafiki bez modyfikowania samej pracy za pomocą imgtagu z widthatrybutem w kodzie HTML.

Użycie zewnętrznego żądania HTTP do określenia rozmiaru:

<img width="96" src="/path/to/image.svg">

Określanie rozmiaru w znacznikach przy użyciu identyfikatora URI danych :

<img width="96" src="data:image/svg+xml,...">

Pliki SVG można zoptymalizować pod kątem identyfikatorów URI danych, aby utworzyć obrazy SVG Favicon odpowiednie dla dowolnego rozmiaru:

<link rel="icon" sizes="any" href="data:image/svg+xml,%3Csvg%20viewBox='0%200%2046%2045'%20xmlns='http://www.w3.org/2000/svg'%3E%3Ctitle%3EAfter%20Dark%3C/title%3E%3Cpath%20d='M.708%2045L23%20.416%2045.292%2045H.708zM35%2038L23%2019%2011%2038h24z'%20fill='%23000'/%3E%3C/svg%3E">
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.