The child <div> must have the following CSS properties
position: relative; width: 500px; height: 500px; left: 50%; margin-left: -250px; top: 50%; margin-top: -250px;
So, if you change the child div via jQuery, then you must recalculate the fields ...
Jsfiddle
http://jsfiddle.net/gvee/fzAge/5/
Initialized CSS
#edit { overflow: hidden; } #containment { background-image: url(http://placekitten.com/500/500); position: relative; left: 50%; top: 50%; margin-left: -250px; margin-top: -250px; }
JQuery
$('#edit').click(function() { var newWidth = 100 + Math.floor(Math.random() * 500); var newHeight = 100 + Math.floor(Math.random() * 500); // Resize the child div $('#containment').width(newWidth).height(newHeight); // Let assign a new background too, eh! $('#containment').css({'background-image': 'url(http://placekitten.com/' + newWidth + '/' + newHeight + ')'}); // Now re-calculate the margins... var newLeftMargin = (newWidth / -2); var newTopMargin = (newHeight / -2); $('#containment').css({'margin-left': newLeftMargin, 'margin-top': newTopMargin}); });
source share