jQuery 요소의 여백과 패딩을 얻는 방법?


105

그냥 궁금해-jQuery를 사용하는 방법-총 패딩 및 여백 등의 요소를 얻을 수 있습니까? 즉 30px 30px 30px 30px 또는 30px 5px 15px 30px 등

나는 시도했다

var margT = jQuery('img').css('margin');
var bordT = jQuery('img').css('border');
var paddT = jQuery('img').css('padding');

그러나 이것은 작동하지 않습니까? http://jsfiddle.net/q7Mra/



유사한 내용은 아래 링크를 참조하십시오. stackoverflow.com/questions/590602/…
Praveen

답변:


105

jQuery 문서 에 따르면 속기 CSS 속성은 지원되지 않습니다.

"총 패딩"이 의미하는 바에 따라 다음과 같은 작업을 수행 할 수 있습니다.

var $img = $('img');
var paddT = $img.css('padding-top') + ' ' + $img.css('padding-right') + ' ' + $img.css('padding-bottom') + ' ' + $img.css('padding-left');

그래 당신은 각각 개별적으로 해야하는 것 같습니다 :( 짜증나
Tom

27
이렇게 뽑지 마세요. 하나가 auto또는 2%또는 inherit?
궤도의 가벼운 경주

@Dan-Dan의 노력에 정말 감사드립니다. 시간을 낭비하는 것이 더 :( 죄송 명확하게하지 않는 사과.

3
숫자가 아닌 값에 대해 맞습니다. Dan Short의 대답이 더 강력하다고 생각합니다.
Elias Zamaria 2011 년

4
update : jQuery 1.9부터 스타일 속성 배열을 .css ()에 전달하면 속성 값 쌍의 객체가 생성됩니다. 예를 들어 렌더링 된 테두리 너비 값 4 개를 모두 검색하려면 다음을 사용할 수 있습니다.$( elem ).css([ "borderTopWidth", "borderRightWidth", "borderBottomWidth", "borderLeftWidth" ]).
Hussein Nazzal

193
var bordT = $('img').outerWidth() - $('img').innerWidth();
var paddT = $('img').innerWidth() - $('img').width();
var margT = $('img').outerWidth(true) - $('img').outerWidth();

var formattedBord = bordT + 'px';
var formattedPadd = paddT + 'px';
var formattedMarg = margT + 'px';

각각에 대한 정보는 jQuery API 문서를 확인하십시오.

다음 은 결과를 보여주는 편집 된 jsFiddle 입니다.

Height에 대해 동일한 유형의 작업을 수행하여 여백, 테두리 및 패딩을 가져올 수 있습니다.


1
이 경우 계산 된 값을 가져 와서 'px'를 추가하면 픽셀 값을 얻을 수 있습니다.
Dan Short

2
그럼 명확하게 질문을 업데이트해야합니다. 그렇지 않으면 해결하려고하지 않는 문제에 대한 해결책을 쓰는 데 시간을 낭비하고 있습니다. :). 원하는 반환 값을 정확히 질문에 설명하십시오. 개별 여백 값이 아니라 요소의 여백 및 패딩을 요청했습니다 ( margin-leftmargin-right에 대해 다를 수 있으며 em또는 일 수 있습니다 px.
Dan Short

2
그것은이다,하지만 그건 아닌 원래의 질문 : 귀하의 질문에, 내 편집했다
댄 짧은

4
이것은 매우 유용합니다. 왼쪽 및 오른쪽 여백 / 패딩 값이 다르고 예를 들어 왼쪽 여백 또는 패딩 값만 원하는 경우 어떻게해야합니까?
jpap 2013 년

1
상단 여백이 연결되어 height있지 width않습니까?
JohnK 2013

16

jQuery.css()CSS 자체가 em 또는 백분율로 지정하더라도 픽셀 단위로 크기를 반환합니다. 단위 ( 'px')를 추가하지만 그럼에도 불구하고 parseInt()정수로 변환하는 데 사용할 수 있습니다 (또는 parseFloat()픽셀의 분수가 의미가있는 경우).

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

3

이것은 나를 위해 작동합니다.

var tP = $("img").css("padding").split(" ");
var Padding = {
    Top: tP[0] != null ? parseInt(tP[0]) : 0,
    Right: tP[1] != null ? parseInt(tP[1]) : (tP[0] != null ? parseInt(tP[0]) : 0),
    Bottom: tP[2] != null ? parseInt(tP[2]) : (tP[0] != null ? parseInt(tP[0]) : 0),
    Left: tP[3] != null ? parseInt(tP[3]) : (tP[1] != null ? parseInt(tP[1]) : (tP[0] != null ? parseInt(tP[0]) : 0))
};

결과 예 :

Object {Top: 5, Right: 8, Bottom: 5, Left: 8}

합계를 만들려면 :

var TotalPadding = Padding.Top + Padding.Right + Padding.Bottom + Padding.Left;

2

경계

나는 당신이 사용하여 테두리 너비를 얻을 수 있다고 믿습니다. .css('border-left-width') . 또한 위쪽, 오른쪽 및 아래쪽을 가져 와서 비교하여 최대 값을 찾을 수도 있습니다. 여기서 핵심은 특정면을 지정해야한다는 것입니다.

jQuery는 px에서 정수로 패딩 상단 계산을 참조하십시오.

여유

테두리 또는 패딩과 동일한 논리를 사용합니다.

또는 outerWidth를 사용할 수 있습니다 . 의사 코드는
margin = (outerWidth(true) - outerWidth(false)) / 2. 이것은 가로로 여백을 찾는 경우에만 작동합니다. 여백을 세로로 찾으려면 outerHeight 를 사용해야 합니다.


여백에 대한 전략은 Firefox에서 작동하지 않습니다. 예를 들어 요소를 가운데에 맞추기 위해 "자동"가로 패딩이있는 경우 매번 0을 반환합니다.
Ben Dilts 2014-08-22

2

jQuery를 사용하여 요소의 간격을 얻는 방법을 보여주는 스 니펫이 있습니다.

/* messing vertical spaces of block level elements with jQuery in pixels */

console.clear();

var jObj = $('selector');

for(var i = 0, l = jObj.length; i < l; i++) {
  //jObj.eq(i).css('display', 'block');
  console.log('jQuery object:', jObj.eq(i));
  console.log('plain element:', jObj[i]);

  console.log('without spacings                - jObj.eq(i).height():         ', jObj.eq(i).height());
  console.log('with padding                    - jObj[i].clientHeight:        ', jObj[i].clientHeight);
  console.log('with padding and border         - jObj.eq(i).outerHeight():    ', jObj.eq(i).outerHeight());
  console.log('with padding, border and margin - jObj.eq(i).outerHeight(true):', jObj.eq(i).outerHeight(true));
  console.log('total vertical spacing:                                        ', jObj.eq(i).outerHeight(true) - jObj.eq(i).height());
}

0

분석중인 요소에 여백, 테두리 또는 정의 된 요소가없는 경우 반환 할 수 없습니다. 정상에서는 일반적으로 기본값 인 '자동'을 얻을 수 있습니다.

귀하의 예에서 나는 당신이 margT변수로 가지고 있음을 알 수 있습니다 . 마진 최고를 얻으려는 것인지 확실하지 않습니다. 이 경우 .css('margin-top').

또한 배열에서 (여러 개가있는 경우) 'img'에서 스타일 화를 얻으려고합니다.

해야 할 일은 .each()jquery 메소드를 사용하는 것입니다.

예를 들면 :

jQuery('img').each(function() {
    // get margin top
    var margT = jQuery(this).css('margin-top');

    // Do something with margT
});

-1
$('img').margin() or $('img').padding()

반환:

{bottom: 10 ,left: 4 ,top: 0 ,right: 5}

가치 얻기 :

$('img').margin().top

편집하다:

jquery 플러그인 사용 : jquery.sizes.js


1
jQuery에서 margin () 함수가 보이지 않습니다.
Ortomala Lokni
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.