2016-03-12 35 views
5

Ho un problema con l'allineamento SVG in linea. Ho creato un pulsante con testo e SVG. E mentre l'allineamento funziona correttamente quando SVG è grande almeno quanto il testo fallisce quando l'altezza SVG è più piccola del testo.Allineamento verticale di SVG nei CSS

Ho creato un test case con un pulsante di sfondo bicolore per indicare esattamente dove si trova il centro. Puoi vedere se guardi più da vicino che il secondo caso non è perfettamente allineato perché l'altezza dell'SVG è inferiore a quella del testo.

C'è un modo per risolvere questo problema? Farlo in un altro modo (no js per favore)?

caso

prova: https://goo.gl/KYDKGH

+0

Non riesco a vedere il problema che descrivi nel tuo violino. in quale browser si trova il problema? – dewd

+0

Chrome ultima versione. Sono su una Mac Retina. È molto sottile ma è lì. – MyWetSocks

+0

È il carattere? i caratteri vengono visualizzati in modo diverso nei diversi motori. inoltre, se non hai specificato un carattere, otterrai il valore predefinito, che varia in base al browser e al/i. – dewd

risposta

14

fiddle 1 - È possibile utilizzare position:relative sul contenitore e position:absolute sugli oggetti come questo:

position: absolute; 
    top: 50%; 
    -webkit-transform: translateY(-50%); 
    -ms-transform: translateY(-50%); 
    transform: translateY(-50%); 
    left: 0; 
    right: 0; 
    margin: auto; 
    text-align: center; 

I top: 50% sposta l'oggetto al centro verticale del contenitore raccolta cima l'oggetto come riferimento (non il suo centro), quindi lo transform: translateY sposta una distanza del 50% della sua dimensione verso l'alto per lasciarlo esattamente al centro del contenitore (dal centro degli oggetti).

ps: il text-align:center;left:0;right:0; e margin:auto sono per allineamento orizzontale.

fiddle 2 - O utilizzare display:flex sul contenitore con align-items per eseguire l'allineamento verticale del contenuto così:

display: -webkit-flex; /* Safari */ 
    display: flex; 
    -webkit-align-items: center; /* Safari 7.0+ */ 
    align-items: center; 
    -webkit-justify-content: center; 
    justify-content: center; 

ps: il justify content è per allineamento orizzontale.

+2

La seconda soluzione ha fatto il trucco per me. Grazie mille. – MyWetSocks