I have a div (#containment
) inside another div (#edit
). The outer div is smaller. The inner div\'s size will be changed by some jQuery code.
Updated Fiddle
#containment{
width:500px; height:500px; opacity:0.5; background:red;
position : absolute;
left: 50%;
top: 50%;
-webkit-transform: translate(-50%, -50%);
-moz-transform: translate(-50%, -50%);
-ms-transform: translate(-50%, -50%);
transform: translate(-50%, -50%);
}
By using transform
, you're not dependent of the width and height from the parent container.
See caniuse for browser support.
The properties left
and top
are setting the top-left-edge of the element to the center of the parent. By using translate
, it shifts the X- and Y-Position back by 50 percent of its own dimensions.
You can find more information about transform
on developer.mozilla.org - transform
Yes. You can do that.
#edit{
width:200px;
height:200px;
overflow:visible;
margin:200px 0 0 200px;
background:gray;
position : relative;
}
#containment{
width:500px;
height:500px;
opacity:0.5;
background:red;
position : absolute;
top : -150px;
left : -150px;
}
Demo: http://jsfiddle.net/fzAge/2/
The child <div>
should have the following CSS properties
position: relative;
width: 500px;
height: 500px;
left: 50%;
margin-left: -250px; /* -(width/2) */
top: 50%;
margin-top: -250px; /* -(height/2) */
So if you're changing the child div via jQuery then you must re-calculate the margins...
http://jsfiddle.net/gvee/fzAge/5/
#edit
{
overflow: hidden;
}
#containment
{
background-image: url(http://placekitten.com/500/500);
position: relative;
left: 50%;
top: 50%;
margin-left: -250px;
margin-top: -250px;
}
$('#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's 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});
});