SVG w proporcjach elementów img nieprzestrzeganych w ie9

CSS:

img{
    max-height:30px;
}

HTML:

<img src="foo.svg" />

Szukam obrazu svg, który będzie skalowany proporcjonalnie do maksymalnej wysokości 30 pikseli. Naturalne wymiary svg to 200px na 200px. Działa świetnie w FF i Chrome (30x30) ale w IE9 obraz jest 30x200. Teraz jest Kopacz. Dzieje się to tylko z niektórymi plikami SVG, inne pliki SVG skalują się poprawnie.

Wygląda na to, że różnica polega na tym, że jeden jest zbudowany z wielokątów, a drugi ze ścieżek.

Nie skaluje się poprawnie:

Http://www.radiantinteractive.com/rs/images/allies/other/crocs.svg

Poprawnie skaluje:

Http://www.radiantinteractive.com/rs/images/allies/technologyLogos/groovy.svg

Jakiś pomysł, dlaczego tak się dzieje, lub jak Mogę uzyskać pierwszy, aby skalować proporcjonalnie w ie9?

Author: Fresheyeball, 2012-03-20

5 answers

Aby uzyskać bardziej spójne skalowanie między przeglądarkami, zawsze upewnij się, że podasz viewBox, ale nie używaj atrybutów width i height w elemencie svg. stworzyłem stronę testową do porównania efektu określania różnych atrybutów SVG w połączeniu z szerokościami i wysokościami określonymi w CSS. Porównaj go obok siebie w kilku różnych przeglądarkach, a zobaczysz wiele różnic w obsłudze.

 109
Author: robertc,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2012-03-20 17:49:47

Aby to naprawić w ie9 i nie utknąć z tym. Nie wiem dlaczego, ale powinieneś ustawić width: 100% przez css-rule, ale nie w IMG-tag. Proporcje będą działać magicznie)) pomógł mi, mam nadzieję, że ten post pomoże innym.

 21
Author: Able,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2013-11-07 15:12:08

Możesz też zajrzeć tutaj: https://gist.github.com/larrybotha/7881691 - jest to kontynuacja tej "historii".


Poprawiono SVG w znacznikach <img> nie skalując w IE9, IE10, IE11

IE9, IE10 i IE11 nie skalują poprawnie plików SVG dodanych ze znacznikami img, Gdy viewBox, width i height atrybuty są określone. Wyświetl ten kod w różnych przeglądarkach.

Wysokość obrazu nie będzie skalowana, gdy obrazy są w pojemnikach węższe niż szerokości obrazu. Można to rozwiązać na dwa sposoby.

Użyj sed w bash, aby usunąć atrybuty szerokości i wysokości w plikach SVG

Zgodnie z tą odpowiedzią na Stackoverflow problem można rozwiązać, usuwając tylko atrybuty width i height.

Ten mały skrypt przeszukuje rekurencyjnie bieżący katalog roboczy w poszukiwaniu plików SVG i usuwa atrybuty kompatybilności między przeglądarkami:

find ./ -name '*.svg' -print0 | xargs -0 sed -i "" -e 's/width="[0-9]*\.*\[0-9]*" //' -e 's/height="[0-9]*\.*\[0-9]*" //'

Caveats

Usuwanie szerokości i wysokości atrybuty będą zmuszać obraz do zajmowania pełnej szerokości kontenera w przeglądarkach innych niż IE.

IE10 (inne przeglądarki wymagają testowania) skaluje obrazy do dowolnego rozmiaru - co oznacza, że będziesz musiał dodać width: 100% do CSS, aby te obrazy pasowały do ich kontenerów.

Target IE with CSS

Ponieważ powyższe rozwiązanie i tak wymaga CSS, równie dobrze możemy użyć hacka, aby zachować IE i nie martwić się o konieczność zarządzania każdym pojedynczym SVG plik.

Poniżej znajdują się wszystkie znaczniki img zawierające plik SVG, w IE6+ (tylko IE9+ obsługuje pliki SVG).

/*
 * Let's target IE to respect aspect ratios and sizes for img tags containing SVG files
 *
 * [1] IE9
 * [2] IE10+
 */
/* 1 */
.ie9 img[src*=".svg"] {
  width: 100%; 
}
/* 2 */
@media screen and (-ms-high-contrast: active), (-ms-high-contrast: none) {
  img[src*=".svg"] {
    width: 100%; 
  }
}

Caveats

To celuje w każdy znacznik img zawierający ".svg " w IE9, IE10 i IE11-jeśli nie chcesz tego zachowania na konkretnym obrazku, musisz dodać klasę, aby nadpisać to zachowanie dla tego obrazu.

 9
Author: Martenti,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-05-23 12:10:36

Spędziłem tygodnie próbując wszelkiego rodzaju rozwiązań, aby móc korzystać z SVG w witrynie, która dostosowuje się do rozmiaru, która działa dla głównych nowoczesnych przeglądarek.

SVG musi być skalowany przy użyciu procentów CSS i zawierać osadzone obrazy bitmapowe.

jedyne rozwiązanie, które znalazłem dla zmiany rozmiaru procentowego w IE, to osadzenie zewnętrznych plików SVG w znaczniku .

Istnieją różne rozwiązania do zmiany rozmiaru SVG w IE do ścisłych rozmiarów pikseli, ale żadne z nich działa na rzecz zmiany rozmiaru procentowego.

Stworzyłem niewyczerpujący zestaw testów tutaj.

 1
Author: Andrew Swift,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2016-10-11 08:52:18

Jakoś ten scss naprawił mój problem.

ul {
  li {
    list-style: none;
    margin: 0;
    padding: 0;
    display: inline;
    img {
      height: 20px;
      margin: 0 10px;
      display: inline-block;
    }
  }
}

Robiłem wyśrodkowaną listę logo dla stopki i miałem problemy z szerokością. Zwykle tworzę inline-block z elementem blokowym wewnątrz niego. Tworzenie elementu inline z elementem inline-block działało dla mnie. Jest to specyficzna implementacja, która pojawiła się u mnie i tak naprawdę nie rozwiązuje każdego błędu, ale mam nadzieję, że pomoże komuś to przeczytać.

 0
Author: Brandon Buttars,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2015-06-02 23:01:22