jQuery를 사용하여 패딩 또는 여백 값을 정수로 픽셀 단위로 표시


207

jQuery에는 높이 또는 너비를 픽셀 단위로 정수로 반환하는 height () en width () 함수가 있습니다 ...

jQuery를 사용하여 요소의 패딩 또는 여백 값을 픽셀 단위 및 정수로 얻는 방법은 무엇입니까?

내 첫 번째 아이디어는 다음을 수행하는 것이 었습니다.

var padding = parseInt(jQuery("myId").css("padding-top"));

그러나 예를 들어 패딩이 ems로 주어지면 어떻게 픽셀 단위로 값을 얻을 수 있습니까?


Chris Pebble이 제안한 JSizes 플러그인을 살펴보면 내 버전이 올바른 것임을 깨달았습니다. :). jQuery는 항상 값을 픽셀 단위로 반환하므로 정수로 파싱하는 것이 해결책이었습니다.

Chris Pebble과 Ian Robinson 덕분에


아래 답변 중에서 답변을 선택해 주시겠습니까?
웨스 모드

4
이 글타래에있는 사람들을위한 참고 사항 :를 사용할 때 항상 기수를 지정하십시오 parseInt. 인용 MDN : " 기수 위에서 언급 한 문자열의 기수를 나타내는 2에서 36 사이의 정수입니다. 10 진수 시스템에 10을 지정하십시오 . 독자 혼란을 제거하고 예측 가능한 동작을 보장하려면 항상이 매개 변수를 지정하십시오 . 기수가 지정되지 않은 경우 구현마다 다른 결과가 생성되며 일반적으로 기본값은 10입니다. " 참조 : developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/…
dgellow

답변:


226

CSS를 사용할 수 있어야합니다 ( http://docs.jquery.com/CSS/css#name ). "padding-left"또는 "margin-top"과 같이 더 구체적이어야 할 수도 있습니다.

예:

CSS

a, a:link, a:hover, a:visited, a:active {color:black;margin-top:10px;text-decoration: none;}

JS

$("a").css("margin-top");

결과는 10px입니다.

정수 값을 얻으려면 다음을 수행하십시오.

parseInt($("a").css("margin-top"))

5
jQuery 메소드가 실제로 "px"접미사를 반환하는지 여부를 확인하지는 않았지만 JSizes다른 응답 (사용하여 끝낸) 의 플러그인은 반환 값이 ParseInt(...)FYI 로 전달 될 때 정수를 반환합니다 .
Dan Herbert

12
참고 : jQuery는 'px'를 추가하므로 Ian의 솔루션이 작동하고 parseInt ()로 전달 될 때 정수를 반환합니다.parseInt($('a').css('margin-top').replace('px', ''))
Peter Rust

56
parseInt는 Chrome jsperf.com/replace-vs-parseint
Bank

17
CSS에서 padding / margin이 em 또는 pt로 표시 .css()되어도 끝에 "px"가있는 값을 반환합니까?
ingredient_15939

22
@ ingredient_15939-방금 시도해 보았습니다. 실제 픽셀 값을 계산하고 px로 반환합니다. 테두리 너비와 동일합니다. 내가 아는 오래된 질문이지만, 아무도 당신의 질문에 대답하지 않았을 때 나는 다른 후발 자들을 돕기 위해 그렇게 할 것이라고 생각했습니다.
Whelkaholism

79

외부와 내부 높이 / 너비를 비교하여 총 여백과 패딩을 얻습니다.

var that = $("#myId");
alert(that.outerHeight(true) - that.innerHeight());

좋은 팁! 나를 도와주었습니다
Abe Petrillo

1
나는 outerHeight Existed를 몰랐다. 대단히 감사합니다!
AlexMorley-Finch

6
outerWidth / 높이도 불구하고 국경 폭을 포함 것을 기억
electrichead

7
innertWidth / innerHeight에는 계산에 패딩이 포함되어 패딩없이 너비 / 높이를 얻으려면 .width () 및 .height ()를 사용해야합니다. api.jquery.com/innerWidth api.jquery.com/width api.jquery.com/outerWidth
Andrew Ensley

2
that.outerHeight(true) - that.outerHeight()outerHeight ()에는 패딩과 테두리가 포함되지만 여백은 제외되므로 총 수직 여백을 제공합니다. api.jquery.com/outerWidth/를 참조하십시오 .
Aximili

35

parseInt 함수에는 변환에 사용 된 숫자 시스템을 정의하는 "radix"매개 변수가 있으므로 호출 parseInt(jQuery('#something').css('margin-left'), 10);하면 왼쪽 여백이 정수로 리턴됩니다.

이것이 JSizes가 사용하는 것입니다.


3
고마워, 나는 작은 기능을 위해 플러그인을 포함하는 것을 싫어한다.
Brian

2
"기수"는 기본적으로 10으로 설정되어 있기 때문에 통과 할 필요도 없습니다.
Alexander Bird

5
parseInt는 NaN을 반환 할 수 있습니다 (그런 다음 해당 변수에 기초한 계산은 실패합니다)-isNaN 검사를 추가하십시오! 사례 : parseInt('auto', 10);( auto는 유효합니다 margin-left).
Thomas

@sethAlexanderBird가 기본적으로 10으로 설정된다고 말하면 올바른 결과를 얻을 수 있지만 코드 린팅이 중요한 경우 jsLint와 jsHint가 빠져 나올 때 스 쿼크됩니다.
Greg

30

이미 기본적으로 제공되는 작업을 수행하기 위해 다른 라이브러리를로드하지 마십시오!

jQuery .css()는 %와 em을 픽셀과 동등한 것으로 변환하고 반환 된 문자열의 끝에서 parseInt()를 제거하고 'px'정수로 변환합니다.

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>'));
});

11

주변 치수를 얻는 방법은 다음과 같습니다.

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();

paddingTopBottom예를 들어, 각 변수 에는 요소의 양쪽에 여백의 합이 포함되어 있습니다. 즉 paddingTopBottom == paddingTop + paddingBottom. 그것들을 따로 얻는 방법이 있는지 궁금합니다. 물론, 그들이 같다면 2로 나눌 수 있습니다 :)


true = 여백 포함 +1000 인터넷
글리프

이것도 작동하기 때문에 이것이 가장 좋은 해결책입니다 IE 7. 참조 : stackoverflow.com/questions/590602/...
Leniel Maccaferri

9

이 간단한 기능은 다음을 수행합니다.

$.fn.pixels = function(property) {
    return parseInt(this.css(property).slice(0,-2));
};

용법:

var padding = $('#myId').pixels('paddingTop');

3
고려하지 않습니다 auto, inherit그리고 %
토마스

3
@Thomas : 사실이 아닙니다. jsfiddle.net/nXyFN jQuery는 항상 결과를 픽셀 단위로 반환하는 것 같습니다.
mpen

4
@ 마크 jsfiddle.net/BNQ6S IE7은 : NaN그것은 브라우저에 따라 달라집니다. 내가 아는 한 jQuery를이 정상화하지 않습니다 .css()달리 .width()&.height()
토마스

1
@Thomas : 흥미 롭습니다. Ian의 솔루션 (최고 등급)도 같은 문제가 있습니다. svinto의 솔루션이 가장 좋습니다.
mpen

9

int 파싱

parseInt(canvas.css("margin-left")); 

0px에 대해 0을 반환


9

CSS 속성에서 와 같이 잡을 수 있습니다 .

alert($("#mybox").css("padding-right"));
alert($("#mybox").css("margin-bottom"));

css 메소드에서 두 번째 속성으로 설정할 수 있습니다.

$("#mybox").css("padding-right", "20px");

편집 : 픽셀 값 만 필요한 경우 다음을 사용하십시오 parseInt(val, 10).

parseInt($("#mybox").css("padding-right", "20px"), 10);

3

좋아, 원래 질문에 대답하면됩니다.

다음과 같이 사용 가능한 정수로 패딩을 얻을 수 있습니다.

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

px와 같은 다른 측정 값을 정의한 경우 "ems"를 "px"로 바꾸십시오. parseInt는 stringpart를 잘못된 값으로 해석하므로 문자열을 ... none으로 바꾸는 것이 중요합니다.


2

다음과 같이 jquery 프레임 워크를 직접 확장 할 수도 있습니다.

jQuery.fn.margin = function() {
var marginTop = this.outerHeight(true) - this.outerHeight();
var marginLeft = this.outerWidth(true) - this.outerWidth();

return {
    top: marginTop,
    left: marginLeft
}};

이로써 margin ()이라는 jquery 객체에 함수를 추가하여 오프셋 함수와 같은 컬렉션을 반환합니다.

fx.

$("#myObject").margin().top

2
불행히도 이것은 상단 및 왼쪽 여백을 제공하지 않지만 totalVertical 및 totalHorizontal 여백을 제공합니다
Code Commander

그러나 다른 솔루션 중 하나에서 parseInt 함수를 사용하여보다 원활한 마진 기능을 허용하도록 편집 할 수 있습니다.
Brian

1

string.replace ( "px", ""))를 사용하지 마십시오.

parseInt 또는 parseFloat를 사용하십시오!




0

괴로움이 아니라 다양한 값을 기반으로 픽셀을 결정할 수있는이를 만들었습니다.

$.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;
  }
});

이러한 방식으로 크기 조정 및 자동 / 상속을 고려합니다.


참고 parseInt()잘못은 폭이나 높이가 포인트 부동 될 수 있습니다.
Alexis Wilke
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.