Ver Mensaje Individual
  #1 (permalink)  
Antiguo 07/09/2009, 05:56
dondiegoblanco
 
Fecha de Ingreso: septiembre-2009
Mensajes: 2
Antigüedad: 15 años, 5 meses
Puntos: 0
Centrar Imagen de Fondo con CSS, fallo en IE

Hola a todos,

antes de nada gracias por dedicar unos instantes al problemilla que me ocupa. Nunca antes había escrito al foro y normalmente intento recurrir a los colegas cuando estoy atascado con algo.

El asunto en cuestión:

estoy haciendo una web, en la que cambian las imagnes de fondo. Estas aparecen con 100% de ancho, y mi deseo es que además estas aparezcan centradas verticalmente. Además las imagenes se deben redimensionar cuando se redimensiona la ventana del navegador.

Esto lo hago de la siguiente manera: inserto la imagen en una capa que ocupa toda la pantalla y con el overflow hidden e inserto la imagen con width a 100%. Solo me falta centrarla verticalmente. La propiedad Vertical-aling no sirve. Y las tipicas soluciones para centrar una imagen en el centro de la pantalla tampoco, porque las imagnes son muy grandes, y si exceden el tamaño vertical de la ventana se alinean arriba.

A un colega se le ocurrio una idea para arreglar el problemilla con js e hicimos la siguiente funcion:
function ajustarImagen(){
if (navigator.appName=="Netscape"){
altoNavegador=window.innerHeight;
}else{
altoNavegador=document.body.offsetHeight;
}
altoImagen=document.getElementById("contenido").he ight;


alto=Math.round((altoImagen-altoNavegador)/2);

document.getElementById("fondo").style.top='-' + alto + 'px';
document.getElementById("fondo").style.height=(alt oNavegador + alto) + 'px';

}
Siendo "contenido" la imagen insertada y "fondo" la capa en la que está insertada. Que se ejecuta cuando:
<body onResize="ajustarImagen()" onload="ajustarImagen()">
Esto funciona perfectamente en Mozilla y Chrome, pero no en IE, que ya no es que alinee la imagen como le da la gana, si no que no sé a donde me la manda y desaparece.

Espero haber sido bastante claro, podeis ver el ejemplo entero aquí:
Código:
	<head>
		<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
	  	<title>Documento sin t&iacute;tulo</title>
	  	<SCRIPT>
		function ajustarImagen(){
				if (navigator.appName=="Netscape"){				
					altoNavegador=window.innerHeight;
				}else{				
					altoNavegador=document.body.offsetHeight;
				}
				altoImagen=document.getElementById("contenido").height;
				
				
				alto=Math.round((altoImagen-altoNavegador)/2);
				
				document.getElementById("fondo").style.top='-' + alto + 'px';	
				document.getElementById("fondo").style.height=(altoNavegador + alto) + 'px';
						
			}
		</SCRIPT>
		<style type="text/css">
			<!--
			* {
				margin: 0px;
			}
			#fondo {
				height: 100%;
				width: 100%;
				position: absolute;
				z-index: 1;
				left: 0px;
				top: 0px;
				right: 0px;
				bottom: 0px;
				overflow: hidden;
				visibility:inherit;
				vertical-align:middle;
			}
			-->
        </style>
</head>
	    
  	<body onResize="ajustarImagen()" onload="ajustarImagen()">
	<div id="fondo"><img src="oso.jpg" width="100%" id="contenido" /></div>

</body>
</html>
Muchas gracias a todos.