2015-10-12 9 views
12

Ho un div che ha l'altezza impostata a 320 pixel, quindi il figlio è impostato su 100% di larghezza. Il figlio di questo è un file SVG che ho impostato la larghezza al 200% del contenitore. in Chrome e Firefox che funziona bene, ho un bella immagine come questa:Problemi SVG in ie11

enter image description here

Il codice HTML simile al seguente:

<div class="kit-template ng-isolate-scope front"> 
    <div class="svg-document ng-scope"> 
     <svg version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px" viewBox="0 0 259.5 131.4" enable-background="new 0 0 259.5 131.4" xml:space="preserve" class="ng-scope"> 
      <!-- Removed for brevity --> 
     </svg> 
    </div> 
</div> 

e il CSS/SASS assomiglia a questo:

.kit-template { 
    overflow: hidden; 
    position: relative; 
    height: 320px; 

    .svg-document { 
     width: 100%; 
     overflow: hidden; 
     margin: 0 auto; 
     /*position: absolute; 
     bottom: 0;*/ 

     svg { 
      width: 200%; 

      path, polyline, polygon, rect { 
       cursor: pointer; 
      } 
     } 
    } 
} 

Come ho detto, questo funziona bene sia in Chrome, Firefox e IE Edge. Ma in IE11 ottengo questo:

enter image description here

E se io ispezionare l'elemento, posso vedere che la SVG sembra che ha padding a destra ea sinistra su di esso, ma vi posso assicurare che non è così.

Qualcuno sa perché questo sta accadendo e come posso risolvere il problema?

Update 1

ho creato una versione molto semplice su codepen modo da poter vedere il problema. Eccolo:

http://codepen.io/r3plica/pen/Kdypwe

View che in Chrome, Firefox, Edge e poi IE11. Vedrai che solo IE11 ha il problema.

+0

Perché il tuo SVG è impostato su una larghezza del 200%? –

+1

perché ha una parte anteriore e una posteriore e voglio solo vedere la parte frontale – r3plica

+0

Abbiamo bisogno di vedere come hai la tua immagine inclusa nel tuo tag SVG. Quindi possiamo vedere il tuo codice nel contesto. Anche un esempio di codice sarebbe ancora meglio per poter testare il tuo codice in un ambiente modificabile dal vivo come codepen o jsfiddle. Abbiamo bisogno di più contesto per quanto riguarda la tua immagine in modo che possiamo aiutarti! –

risposta

7

Quello che puoi fare è aggiungere l'attributo height="320" al tuo tag SVG. Quindi IE può eseguire correttamente il rendering. Credo che IE11 sia stato eliminato usando la larghezza del 200% nel tuo CSS. Ma dal momento che l'impostazione predefinita è xml:space="preserve", l'impostazione mantiene solo le proporzioni della tua giacca SVG.

test esempio codepen in IE11:

http://codepen.io/jonathan/pen/MarvEm

<svg height="320" viewBox="0 0 248.2 142.8" enable-background="new 0 0 248.2 142.8" xml:space="preserve"> 

Rimuovere anche il tag namespace XML poiché non è necessario all'interno di una pagina HTML. E puoi anche rimuovere alcuni attributi SVG come version, xmlns, xmlns:xlink, x e , poiché anche questi non sono necessari.

+5

Voglio solo aggiungere un commento a questo: IE11 risolverà il problema se applichi un'altezza, per impostazione predefinita IE11 presuppone che tutti gli SVG siano alti 150 px se non diversamente specificato.C'è un'altra soluzione però, puoi effettivamente impostare la larghezza di SVG al 100% e verrà ridimensionata anche se questo non risolve il problema. Alla fine, non ho usato un'altezza o una larghezza. Ho creato una direttiva che legge l'attributo viewBox e ha elaborato l'altezza/larghezza in base alla differenza nella larghezza del contenitore rispetto alla larghezza del viewBox. – r3plica

+1

IE11 ha reso la mia altezza SVG 150px senza alcun motivo apparente. –

+1

'150px' è l'impostazione predefinita per' 'elementi in IE11 se' height' non è impostato .. Quindi è necessario impostare un'altezza specifica nel CSS o inline tramite l'attributo 'height' –