2010-05-04 7 views
6

Ho sperimentato con il tag canvas e Javascript. Ho creato una pagina che prende Tweets dalla timeline pubblica di Twitter e li anima in vista. Funziona usando un elemento canvas in background per l'animazione. Al termine dell'animazione, crea un elemento div con lo stesso testo in alto. Lo faccio in modo che il testo tweet sia selezionabile e che i collegamenti siano selezionabili.Fare in modo che il rendering del testo su tela di Firefox sia lo stesso del testo CSS

Ora, in Safari, Chrome e persino Opera, il testo su tela e il testo div sembrano quasi identici. Eppure in Firefox, la dimensione del testo è abbastanza diversa da farla 'saltare' nel punto in cui cambia in div.

Qualcuno sa come rendere Firefox rendere il testo uguale sull'elemento canvas e div utilizzando CSS? O si tratta di un'incoerenza di rendering con il motore.

Ho messo la pagina on my website se vuoi vedere cosa intendo.

Ora, per il codice:

Il CSS che sto usando per rendere il div contiene:

line-height: 21px; font-weight: 100; font-family: Georgia, "New Century Schoolbook", "Nimbus Roman No9 L", serif; font-size: 20px; 

Per rendere sulla tela che sto utilizzando:

this.context.font = this.scale + 'px Georgia'; 
this.context.fillStyle = "white"; 
this.context.strokeStyle = 'white'; 
this.context.fillText(this.text, 0, 0); 
this.context.strokeText(this.text, 0, 0); 

dove this.scale è un fattore di scala animato che termina esattamente a 20px. Quindi, per ricapitolare, sto usando lo stesso font e finisco alla stessa dimensione di px, eppure Firefox rende il testo diverso tra Canvas e CSS.

(edit) Ecco un esempio di schermata: alt text http://danforys.com/temp/firefox-behaviour.png

prima riga è l'animatrice testo utilizzando tela, seconda linea è il div risultante.

+0

Hmm, guardando da vicino lo screenshot, forse sono gli spazi. La lettera ha una dimensione simile, ma gli spazi sembrano leggermente più ampi sul div CSS. –

risposta

1

A destra, ho un test case.

Ho creato un elemento div e canvas fianco a fianco con lo stesso testo. Si scopre che il rendering dei font era un'aringa rossa. Ciò che differisce da Firefox è la segnalazione delle larghezze dei caratteri. Il mio visualizzatore di Twitter calcola la larghezza di ogni personaggio usando measureText(). Width e li posiziona di conseguenza. Per qualche ragione, le larghezze dei personaggi su Firefox sono più piccole.

Stranamente, nel caso di test ho misurare due cose:

  1. La larghezza totale dell'intero testo
  2. La somma delle larghezze di ciascun carattere nel testo

In Chrome , entrambi escono a 399 px. In Firefox, il primo esce come 393px, il secondo a 367px.

Modifica: Il bug è stato chiuso. Mozilla dice it's invalid, continuo a dire che è incoerente con gli altri browser. Dovrò trovare un altro modo per farlo, o abbastanza informazioni per convincere Mozilla che dopo tutto è un insetto. Grazie per l'ascolto comunque!

+0

Ok, posso solo supporre che questo sia un bug di Firefox per Firefox. L'ho segnalato: https://bugzilla.mozilla.org/show_bug.cgi?id=563758 –

+0

Non riesco a duplicarlo in FF3.6, quindi questa è una modifica recente? Hai giocato con la spaziatura delle lettere per vedere se riesci a farli allineare? Questa sembra la differenza per me. – ndp

+0

Inoltre, se le funzioni del sistema operativo rispettano ad es. parametri di kern, la larghezza totale di un testo potrebbe essere diversa dalla somma dei singoli caratteri. Se usi font che lo supportano, potresti anche ottenere delle legature (cioè caratteri speciali) per determinate combinazioni di caratteri che non puoi simulare usando il tuo approccio. – MartinStettner

0

Non riesco a vedere quella differenza tra Firefox e Chrome (a parte la velocità ...).

Hai provato a non utilizzare strokeText? Penso che il testo sia di solito reso solo usando compilando -operazioni.

Cool app, btw!!

+0

Grazie Martin! Sì, ho provato con e senza strokeText. Senza, il testo appare molto più sottile e sembra molto diverso dal div in tutti e tre i browser. Sembra che il testo CSS sia sia accarezzato e riempito, o di un peso equivalente a quello. Si noti anche il peso del carattere nel CSS, cambiando questo valore a valori inferiori a "grassetto", inoltre, non sembra fare alcuna differenza. È solo lì perché stavo sperimentando. –

+0

Se si osserva da vicino il punto in cui il testo inizia a animare verso l'alto, la dimensione del carattere salta. È particolarmente evidente in Firefox se si guardano tweet lunghi con caratteri alla destra della riga. Cumulativamente, c'è un salto abbastanza lungo nella lunghezza della linea. Almeno su FF 3.6.3 su OSX. –

+0

È interessante notare che il rendering sembra differire anche tra le versioni di Chrome. A casa (Chrome [controllerò la versione successiva] su leopardo delle nevi OSX, il testo riempito * e * riempito ha lo stesso aspetto del div. Al lavoro, su Leopard Chrome 5.0.342.9 beta, il testo tratteggiato e riempito è molto più grasso rispetto al div. Penso di aver bisogno di indagare su questo di più ... –

Problemi correlati