No se puede animar una propiedad auto
. Para animar adecuadamente el elemento al centro de la pantalla, deberá colocarlo absolutely
(u otro) y luego calcular el tamaño de la pantalla, el tamaño del elemento y la posición de desplazamiento. Aquí hay un another SO answer en algo similar. Here is the Fiddle
jQuery.fn.center = function() {
this.css("position","absolute");
var top = ($(window).height() - this.height())/2+$(window).scrollTop() + "px",
left = ($(window).width() - this.width())/2+$(window).scrollLeft() + "px";
this.animate({top: top, left: left});
return this;
}
Alternativamente, si sólo desea que el alineamiento horizontal se puede quitar la parte superior de la función de animar. Y si realmente quiere ser creativo, puede eliminar el position:absolute
, y reposicionar margin:auto
después de la animación en caso de cambiar el tamaño de la pantalla. See another fiddle.
jQuery.fn.center = function() {
this.css("position","absolute");
var left = ($(window).width() - this.width())/2+$(window).scrollLeft() + "px";
this.animate({left: left}, function(){
$(this).css({position: 'static', margin: '0 auto'});
});
return this;
}
$('#selector').center();
Si desea animar demasiado centrado vertical, duplicar la línea, en sustitución de la izquierda con la parte superior y la anchura con la altura. – nsdel