jQuery에서 문서가 아닌 부모를 기준으로 위치 값을 가진 요소의 "top, left"속성을 어떻게 설정할 수 있습니까?


144

.offset([coordinates])메소드는 요소의 좌표를 설정하지만 문서를 기준으로합니다. 그런 다음 요소의 좌표를 부모와 관련하여 어떻게 설정할 수 있습니까?

.position()메소드는 부모와 관련하여 "top, left"값만 가져 오지만 값을 설정하지는 않습니다.

나는 함께 노력했다

$("#mydiv").css({top: 200, left: 200});

그러나 작동하지 않습니다.

답변:


227

부모를 기준으로 위치를 설정하려면 position:relative부모 및 position:absolute요소 의 위치를 ​​설정해야합니다.

$("#mydiv").parent().css({position: 'relative'});
$("#mydiv").css({top: 200, left: 200, position:'absolute'});

이것은 position: absolute;가장 가까운 위치에있는 부모 (즉, default 이외의 위치 속성을 가진 가장 가까운 부모)에 상대적으로 위치 하기 때문에 작동합니다 static.


13
$("#mydiv").css({top: '200px', left: '200px', position:'absolute'});<-좋아 $("#mydiv").css({top: '200', left: '200', position:'absolute'});<-나쁘다. 위치 값이 string 인 경우 분명히 단위를 포함해야합니다. 그렇지 않으면 효과가 없습니다.
밥 스타

1
친척의 부모를 둔다는 것에 대한 그 메모는 저를 많은 좌절을 구했습니다. 감사합니다.
NuclearPeon

39
$("#mydiv").css('top', 200);

$("#mydiv").css('left', 200);

7
좀 더 명령은 여기에 도움이 될 것이다
비둘기

1
또는 $ ( "# mydiv"). css ({ 'top': 200, 'left': 200});
Nick B

다시 말해 OP가 단순히 "top"과 "left"를 인용했다면 올바른 것입니까?
RufusVS

13

jQuery UI의 .position 메소드를 사용해 볼 수 있습니다.

$("#mydiv").position({
  of: $('#mydiv').parent(),
  my: 'left+200 top+200',
  at: 'left top'
});

작동하는 데모를 확인하십시오.


10
.position ()에는 setter가 없습니다
devnull69

위치를 설정할 수 있다고 정확히 어디에서 말합니까? 값을 찾을 수만 있고 변경할 수는 없다고 생각합니다.
Chris

1
.position () 메소드는 값을 설정하지 않습니다!
Max

매우 흥미로운!!! 부모 위젯의 CSS 위치 속성을 UI 위젯이기 때문에 부모 요소의 CSS 위치 속성을 설정할 수없는 경우 코드가 매우 유용합니다. 매끄러운 활동을 위해 설정을 변경하고 싶지 않습니다. 물론 이것은 jQuery UI를 사용하는 경우에만 발생합니다. jQuery UI "draggable"위젯에서이 작은 문제를 발견했습니다.
Max

6

전달 된 값이 문자열 유형 인 경우 'px'(예 : 90px)가 와야하며 값이 정수이면 px가 자동으로 추가됩니다. width 및 height 속성이 더 관대합니다 (두 유형 모두 작동).

var x = "90";
var y = "120"
$(selector).css( { left: x, top: y } )        //doesn't work
$(selector).css( { left: x + "px", top: y + "px" } )        //does work

x = 90;
y = 120;
$(selector).css( { left: x, top: y } )        //does work

6

동적 페이지에 대한 코드 오프셋 동적

var pos=$('#send').offset().top;
$('#loading').offset({ top : pos-220});

0

위치 설정시 기억이 상쾌 해져서 너무 늦어서 다른 사람이 볼 수 있을지 모르겠지만-

을 사용하여 위치를 설정하는 것을 좋아하지 css()않지만 종종 괜찮습니다. position()xdazz가 지적한 것처럼 jQuery UI의 setter 를 사용하는 것이 가장 좋은 방법이라고 생각합니다 . 그러나 jQuery UI가 어떤 이유로 옵션이 아닌 경우 (아직 jQuery는 아닙니다) 다음을 선호합니다.

const leftOffset = 200;
const topOffset = 200;
let $div = $("#mydiv");
let baseOffset = $div.offsetParent().offset();
$div.offset({
  left: baseOffset.left + leftOffset,
  top: baseOffset.top + topOffset
});

이것은 $div부모를 상대 위치로 임의로 설정하지 않는 이점이 있습니다 ( $div부모가 그 자체로 다른 내부에 절대 위치하면 어떻게됩니까?). 유일하게 중요한 것은 케이스가 없다면 , 그것이 반환되는지 확실 $div하지 않다고 생각합니다 .offsetParentdocumentnull 또는 완전히 다른 것.

offsetParent jQuery 1.2.6부터 2008 년 언젠가 사용할 수 있었 으므로이 기술은 현재와 원래의 질문을 받았을 때 작동합니다.


0

offset()기능을 사용하십시오 jQuery. 여기있을 것입니다 :

$container.offset({
        'left': 100,
        'top': mouse.y - ( event_state.mouse_y - event_state.container_top ) 
    });
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.