2015-03-09 10 views
9

Chiedo questo perché quando provo a creare uno stack di font CSS per contenuti multilingua, come inglese e cinese, il rendering finale è influenzato dal primo font nello stack (di solito quelli latini, dato che la maggior parte dei font cinesi viene fornito con Supporto latino).L'altezza della riga è determinata dal primo carattere in uno stack di font CSS?

Vedere this Codepen, ad esempio.

div.a p { 
    overflow: hidden; 
} 

p { 
    background-color: red; 
    border: 1px solid black; 
    display: inline-block; 
} 

.chinese-only { 
    font-family: "Hiragino Sans GB", sans-serif; 
    font-size: 24px; 
    line-height: 48px; 
} 

.english-chinese { 
    font-family: "Avenir Next", "Hiragino Sans GB", sans-serif; 
    font-size: 24px; 
    line-height: 48px; 
} 

.chinese-english { 
    font-family: "Hiragino Sans GB", "Avenir Next", sans-serif; 
    font-size: 24px; 
    line-height: 48px; 
} 

quello che sto vedendo:

enter image description here

Dal glifi cinesi appaiono solo nel Hiragino Sans GB, mi aspetto che tutti i blocchi cinesi di utilizzare la stessa altezza della linea. Ma sono apparentemente interessati dall'aggiunta del font Avenir Next in cima allo stack.

Poiché sia ​​Firefox che Chrome su OSX rendono il mio esempio lo stesso, mi chiedo se le specifiche CSS non menzionino nulla al riguardo. CSS 2.1 fonts spec non sembra indicare cosa fare con l'altezza della linea quando si esegue il fallback su glifi mancanti.

Aggiornato: Safari non rende in modo diverso, ma purtroppo la differenza è dovuta al overflow: hidden, non glifo fallback. Il mio updated example potrebbe mostrare questo un po 'più chiaro.

enter image description here

Su Chrome e Firefox

enter image description here

On Safari

E se siete veramente in mal di testa correlati ai font, provare this example mostrando diverse pile di carattere, e vedere come si differenziano per ciascun browser.

+1

La specifica CSS2.1 per 'line-height' non è nella sezione 15, ma in [sezione 10.8] (http://www.w3.org/TR/CSS21/visudet.html#line-height). – BoltClock

+0

@BoltClock la specifica dice "Se si utilizza più di un font (questo potrebbe accadere quando i glifi si trovano in caratteri diversi), l'altezza dell'area del contenuto non è definita da questa specifica." quando tutti i glifi ricadono sui secondi caratteri, perché AD è influenzato dal primo carattere (presumo che sia la radice del mio problema) – bitinn

+0

domanda simile: http://stackoverflow.com/questions/28363186/inline-elements-and-line -altezza, ma la risposta in realtà non risponde: 1. perché la specifica dice che un UA può usare em-box ** o ** ascender/discender (AD); 2. come decidono i browser in em/box max/min o AD quando si verifica ** falltion del glifo **. – bitinn

risposta

3

Questo è praticamente destinato agli agenti utente. Ogni volta che la specifica CSS dice "non definito da questa specifica", questo è il codice per "lasceremo che i browser facciano tutto ciò che pensano sia meglio e poi cerchiamo di far sì che tutti si comportino in modo coerente dopo alcuni anni di farlo in modo diverso".

Inoltre, l'ultima CSS Inline modulo layout afferma proprio in cima di Section 1 (Line Heights and Baseline Alignment):

questa sezione viene riscritto. Fare riferimento alla sezione 10.8 di [CSS21] per la definizione di normativa CSS o alla bozza di lavoro 2002 se si desiderano immagini carine. (Ma ignorate il vecchio testo, metà è sbagliato. Non stiamo specificando quale metà, è da determinare.)

Questo è del mese scorso. Quindi, sai, buona fortuna e Godspeed, in pratica.

interessante, vedo un risultato diverso in Safari 6.2.2 che avete inviato: test result

Se c'è una differenza tra questo e l'ultimo Safari, si potrebbe essere in grado di rintracciare un bugfix tra le due versioni che spiega perché è cambiato.

+0

Non riesco a trovare una spiegazione migliore, segnalo come risposta per ora :) (anche se mi rendo conto che safari 8 non lo rende in modo diverso dagli altri browser, quindi il mio cattivo) – bitinn

Problemi correlati