2012-02-11 25 views
5

En una página, estoy usando una fuente web personalizada (usando @font-face) para los iconos. Cada carácter en el conjunto tiene un valor Unicode apropiado.WebKit Contenido CSS Unicode error?

En los navegadores basados ​​en WebKit (Chrome, Safari, Android), uno de los glifos no se muestra. En su lugar, se muestra el glifo predeterminado o un diamante con un signo de interrogación dentro de él.

En Firefox, Opera e incluso en Internet Explorer, todos los caracteres se representan correctamente.

A excepción de Safari (Windows), este problema solo se produce cuando inserto los caracteres Unicode a través de la propiedad content CSS. Si inserto el carácter directamente en el HTML usando un character reference, se renderiza correctamente.

Por ejemplo, cuando los caracteres Unicode se insertan como contenido CSS ...

/* CSS: */ 
span.css_font_icon:before { 
    display: inline; 
    font-family: "Ghodmode Icons", "Webdings", sans-serif; 
    content: '\002302 \01F4A1 \00270D \002139'; 
} 

<!-- HTML --> 
<span class="css_font_icon"></span> 

... todos ellos muestran en Firefox, Opera e Internet Explorer, pero el segundo (\ 01F4A1) doesn No se muestra en ningún navegador Webkit en Linux, Windows o Android. En cambio, muestra el glifo predeterminado (en los navegadores Android) o un diamante con un signo de interrogación dentro de él (Chrome (Windows), Safari (Windows)).

Inserción de los personajes usando referencias de caracteres Unicode HTML ...

/* CSS: */ 
span.html_font_icon { 
    font-family: "Ghodmode Icons", "Webdings", sans-serif; 
} 

<!-- HTML: --> 
<span class="html_font_icon">&#x2302;&#x1F4A1;&#x270D;&#x2139;</span> 

... funciona bien en Firefox, Opera e Internet Explorer. Los navegadores Chrome (Windows) y Android Webkit también muestran el símbolo de la referencia de caracteres HTML, pero Safari (Windows) muestra el glifo predeterminado.

He condensa el código original en una pequeña página que reproduce el problema: http://www.ghodmode.com/testing/unicode-insertion/

¿He caído en un error de WebKit inusual, o estoy haciendo algo mal?

No tengo un dispositivo iOS actual para probar esto, por lo que los comentarios que describen el comportamiento en iPhone/iPad también son bienvenidos.

Respuesta

5

Esto es a bug in WebKit que solo se arregló recientemente (en abril de 2012).

Parafraseando my write-up on escape sequences for CSS identifiers:

En teoría (según la especificación), any character can be escaped based on its Unicode code point (por ejemplo, para , el U + 1D306 símbolo “tetragram para el centro”: \1d306 o \01d306), pero older WebKit browsers don’t support this syntax for characters outside the BMP.

Debido a los errores del navegador, hay otro (non-standard) forma de escapar de estos personajes, es decir, rompiéndolos en UTF-16 unidades de código (por ejemplo \d834\df06), pero esta sintaxis (con razón) no se admite en Gecko + + y Opera 12 ++.

Dado que actualmente hay no way para escapar de non-BMP symbols de forma cruzada, lo mejor es usar estos caracteres sin guardar.

En su caso, el carácter U + 1F4A1 es un símbolo suplementario (no BMP). Todos los demás símbolos son caracteres BMP, por lo que el error no los afecta.

También he hecho a tool to help you with CSS escapes, y le avisa si se introduce un carácter no-BMP:

Cuestiones relacionadas