Skip to content

Instantly share code, notes, and snippets.

@markthelefty
Created September 30, 2013 21:10
Show Gist options
  • Save markthelefty/6770342 to your computer and use it in GitHub Desktop.
Save markthelefty/6770342 to your computer and use it in GitHub Desktop.
jquery-center.js
/**
* @author Alexandre Magno
* @desc Center a element with jQuery
* @version 1.0
* @example
* $("element").center({
*
* vertical: true,
* horizontal: true
*
* });
* @obs With no arguments, the default is above
* @license free
* @param bool vertical, bool horizontal
* @contribution Paulo Radichi
*
*/
jQuery.fn.center = function(params) {
var options = {
vertical: true,
horizontal: true
}
op = jQuery.extend(options, params);
return this.each(function() {
//initializing variables
var $self = jQuery(this);
//get the dimensions using dimensions plugin
var width = $self.width();
var height = $self.height();
//get the paddings
var paddingTop = parseInt($self.css("padding-top"));
var paddingBottom = parseInt($self.css("padding-bottom"));
//get the borders
var borderTop = parseInt($self.css("border-top-width"));
var borderBottom = parseInt($self.css("border-bottom-width"));
//get the media of padding and borders
var mediaBorder = (borderTop + borderBottom) / 2;
var mediaPadding = (paddingTop + paddingBottom) / 2;
//get the type of positioning
var positionType = $self.parent().css("position");
// get the half minus of width and height
var halfWidth = (width / 2) * (-1);
var halfHeight = ((height / 2) * (-1)) - mediaPadding - mediaBorder;
// initializing the css properties
var cssProp = {
position: 'absolute'
};
if (op.vertical) {
cssProp.height = height;
cssProp.top = '50%';
cssProp.marginTop = halfHeight;
}
if (op.horizontal) {
cssProp.width = width;
cssProp.left = '50%';
cssProp.marginLeft = halfWidth;
}
//check the current position
if (positionType == 'static') {
$self.parent().css("position", "relative");
}
//aplying the css
$self.css(cssProp);
});
};
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment