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-left및 margin-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.