Tenho alguns arquivos SVG que especificam width
e height
também viewbox
assim:
<svg width="576pt" height="432pt" viewBox="0 0 576 432" > ...
mas como exibi-los no navegador em um tamanho que eu decido? Eu os quero menores e tentei:
<object width="400" data="image.svg"></object>
mas então recebo barras de rolagem visíveis.
Funciona se eu alterar os arquivos SVG para definir width
e height
para 100%
, mas quero decidir o tamanho no HTML, independentemente dos tamanhos usados no arquivo SVG. Isso é possível ?
Respostas:
Você pode adicionar os atributos "preserveAspectRatio" e "viewBox" à
<svg>
tag para fazer isso.Abra o arquivo .svg em um editor e encontre a
<svg>
tag. nessa tag, adicione os seguintes atributos:Substitua {width} e {height} por alguns padrões para o viewBox. Usei os valores dos atributos "largura" e "altura" da tag SVG e pareceu funcionar.
Salve o SVG e ele deverá ser dimensionado conforme o esperado.
Encontrei esta informação aqui:
https://blueprints.launchpad.net/inkscape/+spec/allow-browser-resizing
fonte
preserveAspectRatio="xMinYMin meet"
não foi o suficiente para mim. Também precisei fornecer umviewBox
conforme mencionado na resposta. Pena!preserveAspectRatio="none"
se quiser esticar o SVG de maneiras arbitrárias.100%
conforme esta resposta afirmava.Nenhuma das respostas fornecidas aqui funcionou para mim quando perguntei isso em 2009. Como agora eu tinha o mesmo problema novamente, percebi que usar a
<img>
tag e a largura junto com um svg funciona bem.fonte
<img>
você perde toda a interatividade com links, javascript, etc.<img width="400" src="image.svg"/>
.Você pode acessar o svg incorporado usando JavaScript:
Como seu svg já tem um viewBox, o Firefox deve dimensionar a largura de 576 pixels no viewBox para a largura de 400 pixels em seu documento. Outros SVGs podem se beneficiar de um novo viewBox derivado da largura e altura anunciadas (geralmente são os mesmos números). Outros navegadores podem se beneficiar de diferentes ajustes de svg.
fonte
Security error: attempted to read protected variable
img / logo.svg ...
Esta configuração funcionou para mim.
fonte
viewBox="0 0 640 80"
. Aparentemente, se isso não for definido, você não pode realmente dimensioná-lo ou deixar que o CSS o dimensione para você usando, por exemplo,width: 100%
etc.Eu encontrei um problema em que o iOS em um iPad não redimensionava corretamente as imagens SVG em um
<object>
tag.O estilo CSS aumentaria ou diminuiria o tamanho do
<object>
contêiner, mas a imagem dentro dele não seria modificada (no iPad, iOS 7).As imagens SVG foram exportadas do Adobe Illustrator, e a solução acabou sendo substituir a largura e a altura neste:
com:
Eu precisei usar a
<object>
tag porque<img>
ela não suporta a incorporação de imagens de bitmap em SVGs.fonte
Defina a caixa de visualização ausente e preencha os valores de altura e largura dos atributos definidos de altura e altura na tag svg
Em seguida, dimensione a imagem simplesmente definindo a altura e a largura para os valores percentuais desejados . Boa sorte.
Você pode definir uma proporção fixa com preserveAspectRatio = "x200Y200 meet, mas não é necessário
por exemplo
fonte
Basta usar CSS para fazer o navegador redimensionar o SVG! Da mesma forma:
<object style="width:30%">
Veja http://www.vlado-do.de/svg_test/ para mais detalhes. Eu também tentei localmente com um SVG que tem sua largura e altura fornecidas em "pt". Funciona bem no Firefox.fonte
Vamos ver. Tive que refrescar a memória no SVG, não o tenho usado muito nesses anos.
Pelo que descobri hoje, parece que se você especificar dimensão de objetos sem unidades, eles têm um tamanho fixo (em pixels, eu acho). Aparentemente, então, não há como redimensioná-los quando você redimensiona o SVG (isso apenas altera o tamanho da janela de visualização / tela).
A menos que, conforme indicado, você especifique o tamanho do SVG em porcentagem OU especifique um viewBox (por exemplo, viewBox = "0 0 600 500").
Agora, se você não tem como alterar o SVG exportado, você está sem sorte, eu temo. Que biblioteca você usa?
fonte
Aqui está uma solução PHP usando QueryPath com base na resposta de Jim Keller.
Assim que o QueryPath for carregado, basta passar seu script svg para a função.
fonte