Here is the plugin I wrote to the position elements. It has all kinds of positions, options.
You use it like this:
$("#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" }); }); };
source share