Вот плагин, который я написал для позиционирования элементов. Имеются всевозможные позиции, варианты.
Вы используете это так:
$("#Element").align($("#ParentElement"), {
animate: false
});
// Align
// Author: Sam Striano
// Date : 12/14/2010
jQuery.fn.align = function (parentElement, options, callback) {
/// <summary>
/// Aligns an element over/around another element.
/// </summary>
/// <param name="parentElement" type="jQuery/String" optional="false">
/// Either a jQuery object or a selector string to align the selected element(s) on.
/// </param>
/// <param name="options" type="Object" optional="true">
/// A set of key/value pairs that configure the alignment.
/// </param>
/// <param name="callback" type="Function" optional="true">
/// A callback function that is executed once the alignment is complete.
/// </param>
var settings = jQuery.extend({
animate: true,
animateLength: 500,
fadeIn: false,
fadeInLength: 250,
outerAlign: false,
position: "MiddleCenter",
show: true,
hPadding: 0,
vPadding: 0
}, options),
$parentElement = (typeof parentElement === "string") ? $(parentElement) : parentElement;
return this.each(function () {
// Cache Element
var $element = $(this).css("position", "absolute"),
x = 0,
y = 0;
// Calculate Position
if (settings.outerAlign) {
switch (settings.position) {
case "TopLeft":
x = ($parentElement.offset().left - $element.outerWidth() - settings.hPadding);
y = ($parentElement.offset().top - $element.outerHeight() - settings.vPadding);
break;
case "TopCenter":
x = (($parentElement.offset().left + ($parentElement.outerWidth() / 2)) - ($element.outerWidth() / 2));
y = ($parentElement.offset().top - $element.outerHeight() - settings.vPadding);
break;
case "TopRight":
x = ($parentElement.offset().left + $parentElement.outerWidth() + settings.hPadding);
y = ($parentElement.offset().top - $element.outerHeight() - settings.vPadding);
break;
case "MiddleLeft":
x = ($parentElement.offset().left - $element.outerWidth() - settings.hPadding);
y = (($parentElement.offset().top + ($parentElement.outerHeight() / 2)) - ($element.outerHeight() / 2));
break;
case "MiddleCenter":
x = ($parentElement.offset().left + (($parentElement.outerWidth() / 2) - ($element.outerWidth() / 2)));
y = ($parentElement.offset().top + (($parentElement.outerHeight() / 2) - ($element.outerHeight() / 2)));
break;
case "MiddleRight":
x = ($parentElement.offset().left + $parentElement.outerWidth() + settings.hPadding);
y = (($parentElement.offset().top + ($parentElement.outerHeight() / 2)) - ($element.outerHeight() / 2));
break;
case "BottomLeft":
x = ($parentElement.offset().left - $element.outerWidth() - settings.hPadding);
y = ($parentElement.offset().top + $parentElement.outerHeight() + settings.vPadding);
break;
case "BottomCenter":
x = (($parentElement.offset().left + ($parentElement.outerWidth() / 2)) - ($element.outerWidth() / 2));
y = ($parentElement.offset().top + $parentElement.outerHeight() + settings.vPadding);
break;
case "BottomRight":
x = ($parentElement.offset().left + $parentElement.outerWidth() + settings.hPadding);
y = ($parentElement.offset().top + $parentElement.outerHeight() + settings.vPadding);
break;
}
} else {
switch (settings.position) {
case "TopLeft":
x = ($parentElement.offset().left + settings.hPadding);
y = ($parentElement.offset().top + settings.vPadding);
break;
case "TopCenter":
x = ($parentElement.offset().left + (($parentElement.outerWidth() / 2) - ($element.outerWidth() / 2)));
y = ($parentElement.offset().top + settings.vPadding);
break;
case "TopRight":
x = ($parentElement.offset().left + ($parentElement.outerWidth() - $element.outerWidth()) + (-settings.hPadding));
y = ($parentElement.offset().top + settings.vPadding);
break;
case "MiddleLeft":
x = ($parentElement.offset().left + settings.hPadding);
y = ($parentElement.offset().top + (($parentElement.outerHeight() / 2) - ($element.outerHeight() / 2)));
break;
case "MiddleCenter":
x = ($parentElement.offset().left + (($parentElement.outerWidth() / 2) - ($element.outerWidth() / 2)));
y = ($parentElement.offset().top + (($parentElement.outerHeight() / 2) - ($element.outerHeight() / 2)));
break;
case "MiddleRight":
x = ($parentElement.offset().left + ($parentElement.outerWidth() - $element.outerWidth()) + (-settings.hPadding));
y = ($parentElement.offset().top + (($parentElement.outerHeight() / 2) - ($element.outerHeight() / 2)));
break;
case "BottomLeft":
x = ($parentElement.offset().left + settings.hPadding);
y = ($parentElement.offset().top + ($parentElement.outerHeight() - $element.outerHeight()) + (-settings.vPadding));
break;
case "BottomCenter":
x = ($parentElement.offset().left + (($parentElement.outerWidth() / 2) - ($element.outerWidth() / 2)));
y = ($parentElement.offset().top + ($parentElement.outerHeight() - $element.outerHeight()) + (-settings.vPadding));
break;
case "BottomRight":
x = ($parentElement.offset().left + ($parentElement.outerWidth() - $element.outerWidth()) + (-settings.hPadding));
y = ($parentElement.offset().top + ($parentElement.outerHeight() - $element.outerHeight()) + (-settings.vPadding));
break;
}
}
// Position Element
if (settings.animate) {
if (callback) {
$element.show().animate({ left: x, top: y }, settings.animateLength, callback(x, y));
} else {
$element.show().animate({ left: x, top: y }, settings.animateLength);
}
} else if (settings.fadeIn) {
if (callback) {
$element.hide().css({ left: x, top: y }).fadeIn(settings.fadeInLength, callback(x, y));
} else {
$element.hide().css({ left: x, top: y }).fadeIn(settings.fadeInLength);
}
} else {
$element.css({ left: x , top: y });
if (settings.show) {
$element.show();
}
if (callback) {
callback(x, y);
}
}
});
};
// Center
// Author: Sam Striano
// Date : 12/14/2010
jQuery.fn.center = function (parentElement) {
/// <summary>
/// Centers an element over another element.
/// </summary>
/// <param name="parentElement" type="jQuery" optional="false">
/// The jQuery object to center the selected element(s) on.
/// </param>
var $element = $(this),
$parentElement = (typeof parentElement === "string") ? $(parentElement) : parentElement;
return this.each(function () {
$element.align($parentElement, { animate: false, outsideAlign: false, position: "MiddleCenter" });
});
};
// MakeSameSize
// Author: Sam Striano
// Date : 12/14/2010
jQuery.fn.makeSameSize = function (parentElement) {
/// <summary>
/// Makes the selected element(s) size the same as the parent element.
/// </summary>
/// <param name="parentElement" type="jQuery" optional="false">
/// The jQuery object.
/// </param>
/// <param name="parentElement" type="String" optional="false">
/// The selector string of the parent element.
/// </param>
var $parentElement = (typeof parentElement === "string") ? $(parentElement) : parentElement;
return this.each(function () {
$(this)
.css({
height: $parentElement.innerHeight() + "px",
width: $parentElement.innerWidth() + "px"
});
});
};