2012-05-26 10 views
5

Io uso di carattere personalizzato nel mio CSS con questo metodo:CSS carattere personalizzato offset verticale (bug?)

@font-face { 
    font-family: 'Gabriola'; 
    src: url('Gabriola.eot'); 
    src: url('Gabriola.eot?#iefix') format('embedded-opentype'), 
     url('Gabriola.woff') format('woff'), 
     url('Gabriola.ttf') format('truetype'); 
    font-weight: normal; 
    font-style: normal; 
} 
.gabriola { 
    font-size: 20px; 
    line-height: 20px; 
    height: 20px; 
    background: red; 
} 

<div class="gabriola">Some texty text here</div> 

Ogni browser rende questo font di essa la propria strada con offset verticale superiore e inferiore come questo font rendering

Cosa sto sbagliando? Grazie

+0

Non sono sicuro che il problema è qui, ma hai provato a usare un 'intervallo invece? (o qualsiasi altro elemento inline invece di un blocco uno) –

+0

si .. ancora lo stesso – 5ulo

risposta

5

È possibile che non ci sia qualcosa che si sta sbagliando. Ecco alcuni punti che possono essere applicati, alcuni controllabili da te, altri no.

  1. Solo per essere sicuri, impostare in modo esplicito vertical-align: baseline.
  2. I diversi file (.eof, .woff, .ttf) non possono essere definiti nello stesso modo, pertanto i diversi browser utilizzano file diversi e mostrano differenze.
  3. Non sono sicuro se avere due chiamate src è rovinare le cose, ma si può provare a eliminare il secondo:
@font-face { 
    font-family: 'Gabriola'; 
    src: url('Gabriola.eot'), 
     url('Gabriola.eot?#iefix') format('embedded-opentype'), 
     url('Gabriola.woff') format('woff'), 
     url('Gabriola.ttf') format('truetype'); 
    font-weight: normal; 
    font-style: normal; 
} 

Queste sono tutte mere supposizioni. Dovrai testare # 1, 3. Se il problema è # 2, non sono sicuro che esista una soluzione elegante.

V'è, naturalmente, l'avvertenza sul this site:

Tenete a mente che il rendering dei font può variare notevolmente tra i browser e sistemi operativi . Molti sviluppatori hanno avuto risultati così scarsi da Windows e Internet Explorer che hanno evitato l'uso di font personalizzati . Assicurati sempre di esaminare attentamente i risultati su tutti i browser che puoi decidere se la qualità è accettabile.

Aggiornamento

This post dà alcuni suggerimenti riguardo alla possibilità di risolvere i problemi di rendering. Questo è per Font Squirrel, e osserva in particolare:

Se è stato scaricato il kit, si potrebbe provare a rigenerare il tipo di carattere con il generatore. Apportiamo aggiustamenti periodici al generatore che potrebbe migliorare l'hint o il rendering del font.

Ma conferma anche,

non passare la patata bollente, ma la causa più comune è un tipo di carattere cattivo originale .

Ciò vale per il punto 2.

+2

Grazie per la tua risposta .. il motivo per cui non è lo stesso in tutti i browser è il font. Ho provato 5 tipi di font, ma solo Gabriola ha il bug di offset verticale. Quindi suppongo che tutto dipenda dalla 'qualità' dei caratteri. – 5ulo

+0

Il punto 3 è errato. Explorer usa sempre l'ultimo file di font, quindi abbiamo bisogno di due 'src' separati. – stilllife

3

Ho avuto lo stesso problema e la soluzione era di ricostruire il carattere con le proprietà dell'originale senza modificare nulla in un nuovo file con Hight logic font creator, il carattere è invariato e uguale al problema originale viene corretto e allineato alla perfezione in tutti i browser incluso ie6, è stato il lavoro di poche ore ma questo è il risultato nel caso in cui abbiate bisogno di un utente.

http://www.filefactory.com/file/1miw29cddg21/n/crossbrowser_gabriola_font.zip

+1

Stai dicendo che hai aperto il carattere in "Creatore di caratteri logici dell'altezza" e hai regolato la spaziatura per ogni lettera, o che hai semplicemente aperto il carattere e riesportato usando quell'applicazione? – allicarn

+0

@skt_pillo hai salvato il mio giorno ha funzionato perfettamente! –

2

io so che è stato 5 anni da quando l'OP ha fatto la domanda, ma ho trovato questo grande tecnica su come ottenere il testo di base allineato correttamente.

In sostanza, il contenitore di testo deve essere un blocco in linea con altezza riga: 0; Poi, si crea un pseudo-elemento inline-block e impostare la sua altezza secondo la line-height si voleva:

span { 
 
    font-size: 2em; 
 
    background: red; 
 
} 
 
span.baseline-align { 
 
    vertical-align: baseline; 
 
} 
 

 
span.true-baseline-align { 
 
    display: inline-block; 
 
    line-height: 0; 
 
} 
 
span.true-baseline-align::after { 
 
    content: ''; 
 
    display: inline-block; 
 
    height: 1em; // this is where you control line-height 
 
}
<span>Normal text</span> 
 
<br><br> 
 
<span class="baseline-align">With vertical-align: baseline</span> 
 
<br><br> 
 
<span class="true-baseline-align">with trick to really baseline-align</span>

http://blogs.adobe.com/webplatform/2014/08/13/one-weird-trick-to-baseline-align-text/

+1

Sebbene questo collegamento possa rispondere alla domanda, è meglio includere qui le parti essenziali della risposta e fornire il link per riferimento. Le risposte di solo collegamento possono diventare non valide se la pagina collegata cambia. - [Dalla recensione] (/ recensione/post di bassa qualità/15705140) – EJoshuaS

+1

Grazie! Ho cambiato la mia risposta :) – LeonardoP

+0

questo è così genoso! grazie per aver condiviso questo piccolo trucco :) – nerdess