2010-10-07 12 views
8

Tenemos un diseño de página que funciona muy bien en todos los navegadores de PC que he probado, pero resulta extraño cuando se lo ve con un iPhone o iPod Touch.Representación CSS de imágenes de fondo de forma diferente en el iPhone

El problema es que ver una imagen de fondo centrada con ¡eso es muy alto:

#content_container 
{ 

background-image:url('content-background.jpg'); 
background-position:top center; 
background-repeat:no-repeat; 
width:1020px; 
height:auto; 
} 

La imagen content-background.jpg es muy alto (3000 píxeles) y está diseñado para ser 'reveló' como el DIV es en crece debido al contenido

Vas a tener que mirar la página y CSS llena de entender, por lo que ha despojado de todo lo demás fuera del diseño y re-produjo el problema con este ejemplo:

http://files.codeulike.com/static/cssexample/example.htm
(ejemplo hecha de 1 archivo html, 1 archivo css y 3 imágenes)

Verás que en IE8, Firefox, Chrome obtendrás una bonita caja verde. Pero en un navegador iOS, la imagen de fondo larga y delgada se vuelve a escalar y todo se vuelve extraño.

(Estoy usando un iPod Touch de segunda generación, pero supongo que el mismo problema sucederá en otros iPhones/toques de iPod).

Cualquier ayuda muy apreciada!

Respuesta

16

Resuelto: El iPhone tiene un límite de megapíxeles para Jpegs, después de lo cual encoge el Jpeg.

Hay un muy buen blog post sobre esto en defusion.org.uk: http://www.defusion.org.uk/archives/2010/02/19/shrinking-large-background-image-bug-in-iphone-safari/

El límite después del cual Jpegs obtener encogido parece ser alrededor de 2 megapíxeles. Es un documentado límite de recursos iOS y se describe aquí:

Apple - Creating Compatible Web Content - Know iOS Resource Limits

El máximo tamaño de la imagen decodificada para JPEG es de 32 megapíxeles utilizando submuestreo.

imágenes JPEG pueden ser de hasta 32 megapíxeles debido al submuestreo, que permite a JPEG imágenes para descodificar a un tamaño que tiene un dieciseisavo el número de píxeles. Las imágenes JPEG de más de 2 megapíxeles se submuestrean, es decir, se decodifican a un tamaño reducido . El submuestreo JPEG permite al usuario ver las imágenes de las últimas cámaras digitales .

.. que tomo para significar que Jpegs menores de 2 megapíxeles se visualizan normalmente, Jpegs entre 2 y 32 megapíxeles se muestran por submuestreo (contracción), y Jpegs más de 32 megapíxeles presumiblemente no se pueden mostrar en absoluto.

Al cambiar mi sitio para utilizar una imagen de fondo que tenía menos de 2 megapíxeles, se solucionó el problema.

+0

¡Me salvó el culo! Esto es exactamente lo que necesitaba saber. Pensé que había algo mal con mi CSS y lo estaba pirateando durante una hora más o menos cuando encontré esta publicación. ¡Gracias! En realidad, no estoy seguro de cuál es el límite real, creo que es un límite de tamaño de archivo, no megapíxeles o ancho o alto. – Brian

+0

Para reducir rápidamente el tamaño de la imagen móvil en el lado de la nube, puede usar http://tinysrc.net para que el pobre navegador y la red no tengan que hacer el trabajo duro. –

+0

Corregir aproximadamente> 32 megapíxeles no se muestra en absoluto: tomó una hora de depuración, pero esta era la solución. iOS Safari carga la imagen si la apunta directamente, pero cuando la imagen es un fondo, la consola de depuración en OSX safari muestra un símbolo de imagen roto sin información útil. – user208769

0

No del todo cierto, tengo un fondo de 1640x1200 (sub 2Mpix) y el fondo se encoge aquí ...: S

+1

No es necesario volver a codificar. solo use las consultas de medios CSS3 (que reconoce el safari móvil) y cree una imagen de fondo más pequeña para iphone: @media pantalla y (max-device-width: 640px) {/ * special sytles para iPhone/dispositivos similares */#affected_div (s)) {background: url (images/smaller_bg_img_filename.jpg) centro superior no-repeat! important; }} – Brian

0

Solía ​​Safaris CSS3 múltiples imágenes de fondo para evitar esto, acaba de hacer 4 imágenes 500 píxeles de altura y los colocó en la parte superior de uno al otro

0

realizo este post es de dos años de edad al momento de escribir esto, pero Probé algo que funcionó, tal vez no sea la mejor manera de hacerlo, pero resolvió mi problema.

El primer paso fue guardar mi imagen de fondo como un .png que solucionó el problema por completo ... salvo que era una imagen de fondo de 1200px x 12000px, el archivo .png era un monstruo.

Por lo tanto, abrí el archivo .png en Photoshop y lo guardé optimizado para web y dispositivos como .jpg y cargué ese archivo y funcionó como un amuleto en el iPhone y en todos los 5 grandes navegadores.

Espero que ayude!

0

Si ha guardado

background-attachment: fixed; 

en el archivo CSS de escritorio, a continuación, recuerde que para cambiarlo a

background-attachment: scroll; 

en el archivo CSS móvil. Si esto no se hace, mostrará un efecto inesperado.

Cuestiones relacionadas