Padding or margin value in pixels as integer using jQuery

后端 未结 14 2124
陌清茗
陌清茗 2020-11-28 02:40

jQuery has height() en width() functions that returns the height or width in pixels as integer...

How can I get a padding or margin value of an element in p

相关标签:
14条回答
  • 2020-11-28 03:18

    I probably use github.com/bramstein/jsizes jquery plugin for paddings and margins in very comfortable way, Thanks...

    0 讨论(0)
  • 2020-11-28 03:20

    ok just to answer the original question:

    you can get the padding as a usable integer like this:

    var padding = parseInt($("myId").css("padding-top").replace("ems",""));

    If you have defined another measurement like px just replace "ems" with "px". parseInt interprets the stringpart as a wrong value so its important to replace it with ... nothing.

    0 讨论(0)
  • 2020-11-28 03:22

    PLEASE don't go loading another library just to do something that's already natively available!

    jQuery's .css() converts %'s and em's to their pixel equivalent to begin with, and parseInt() will remove the 'px' from the end of the returned string and convert it to an integer:

    http://jsfiddle.net/BXnXJ/

    $(document).ready(function () {
        var $h1 = $('h1');
        console.log($h1);
        $h1.after($('<div>Padding-top: ' + parseInt($h1.css('padding-top')) + '</div>'));
        $h1.after($('<div>Margin-top: ' + parseInt($h1.css('margin-top')) + '</div>'));
    });
    
    0 讨论(0)
  • 2020-11-28 03:24

    Shamelessly adopted from Quickredfox.

    jQuersy.fn.cssNum = function(){
        return parseInt(jQuery.fn.css.apply(this, arguments), 10);
    };
    

    update

    Changed to parseInt(val, 10) since it is faster than parseFloat.

    http://jsperf.com/number-vs-plus-vs-toint-vs-tofloat/20

    0 讨论(0)
  • 2020-11-28 03:26

    Not to necro but I made this which can determine pixels based on a variety of values:

    $.fn.extend({
      pixels: function (property, base) {
        var value = $(this).css(property);
        var original = value;
        var outer = property.indexOf('left') != -1 || property.indexOf('right') != -1 
          ? $(this).parent().outerWidth()
          : $(this).parent().outerHeight();
    
        // EM Conversion Factor
        base = base || 16;
    
        if (value == 'auto' || value == 'inherit') 
            return outer || 0;
    
        value = value.replace('rem', '');
        value = value.replace('em', '');
    
        if (value !== original) {
           value = parseFloat(value);
           return value ? base * value : 0;
        }
    
        value = value.replace('pt', '');
    
        if (value !== original) {
           value = parseFloat(value);
           return value ? value * 1.333333 : 0; // 1pt = 1.333px
        }
    
        value = value.replace('%', '');
    
        if (value !== original) {
          value = parseFloat(value);
          return value ? (outer * value / 100) : 0;
        }
    
        value = value.replace('px', '');
        return parseFloat(value) || 0;
      }
    });
    

    This way, we take into account for sizing, and auto / inherit.

    0 讨论(0)
  • 2020-11-28 03:29

    Here's how you can get the surrounding dimentions:

    var elem = $('#myId');
    
    var marginTopBottom  = elem.outerHeight(true) - elem.outerHeight();
    var marginLeftRight  = elem.outerWidth(true)  - elem.outerWidth();
    
    var borderTopBottom  = elem.outerHeight() - elem.innerHeight();
    var borderLeftRight  = elem.outerWidth()  - elem.innerWidth();
    
    var paddingTopBottom  = elem.innerHeight() - elem.height();
    var paddingLeftRight  = elem.innerWidth()  - elem.width();
    

    Pay attention that each variable, paddingTopBottom for example, contains the sum of the margins on the both sides of the element; i.e., paddingTopBottom == paddingTop + paddingBottom. I wonder if there is a way to get them separately. Of course, if they are equal you can divide by 2 :)

    0 讨论(0)
提交回复
热议问题