loading

position() 메서드는 선택자 요소의 첫 번째 위치에 있는 부모 요소의 왼쪽 모서리(left-top) 위치를

포함하는 left/top 개체를 반환한다.

 

이 position() 메서드가 어떤 이유로 위치 값을 가져오는지 알아보자.

예제)

<!DOCTYPE html>
<html>
<head>
	<meta charset="utf-8">
	<meta name="viewport" content="width=device-width, initial-scale=1">
	<script src="https://code.jquery.com/jquery-3.1.0.js"></script>
	<style type="text/css">
		html,body{
			margin: 0px;
		}
		
		#A-1{
			width: 100px;
			height: 100px;
			background-color: red;
		}

		#B-1{
			width: 50px;
			height: 50px;
			background-color: green;
		}
	</style>
	<script type="text/javascript">
		$(document).ready(function(){
		    var $A = $('#A-1');
		    var $B = $('#B-1');

		    var APosition = $A.position();
		    var BPosition = $B.position();
		});
	</script>	
</head>

<body>
    <div id="A-1">
        <div id="B-1"></div>
    </div>
</body>
</html>

 

위 코드를 보면  div 태그를 2개를 만들었고, A-1 태그 안에 B-1 태그를 넣어서 만들었다.

위치 값을 헷갈리지 않게 하기 위해 기본 body 태그의 margin 값이 8인데 0으로 설정을 해놨고,

알아보기 쉽게 하기 위해

 

A-1 태그는 width/height 값이 100

B-1 태그는 width/height 값이 50

 

이렇게 설정을 해놨다. 이제 B-1 태그와 A-1 태그에 각각 임의의 margin 값을 넣어서 위치 값이 어떻게

변경이 되는지 테스트를 진행할 건데 

 

첫 번째로 A-1 태그에 margin 값 50을 주고, 그다음 B-1 태그에 margin 값 50을 줄 것이다.

그리고 position() 메서드를 이용하여 위치 값을 확인해 보겠다.

 

A-1 태그 마진 값 50 적용

A-1 태그에 마진 값 50 적용

 

적용 후에 A-1 태그의 position() 메서드를 이용하여 값이 어떻게 찍히는지 보면

console.log(APosition); // {top:0, Left:0}

top/Left 값이 전부 0으로 찍혀 나온다. 그 이유는  A-1 태그의 부모 태그는 body태그인데 부모 태그인

body태그의 왼쪽 모서리(Left-top)로부터 위치점을 반환받는 건데,

 

A-1 태그는 위치상으론 변함이 없고 단지 마진 값 top/left 에만 50이 정해진 것뿐이다.

그래서 APosition 의 position() 값은? {top : 0, Left:0} 이 나오는 것이다.

 

이제 원상 복구시키고 B-1 태그에다가 마진 값 50을 적용해보자.

 

B-1 태그 마진 값 50 적용

B-1 태그에 마진 값 50 적용

결과 화면을 보면 B-1 태그에 마진 값을 50을 적용하였다. 

그리고 position() 메서드로 A-1 태그의 위치 값을 찍어보면

console.log(APosition); // {top:50, Left:0}

이렇게 찍혀서 나온다.

 

그 이유는 A-1 태그는 현재 위치점은 top/left 둘 다 0인데 자식 태그인 B-1 태그에서 마진 값을 50을 줬더니

A-1 태그 기준에서는 top의 위치가 B-1 태그의 마진 값 50의 위치로 이동되었다.

 

그래서 결과 화면에서 확인할 수 있듯이 B-1 태그의 마진 값이 50만큼 A-1 태그의 top 부분이 이동되어서

A-1 태그의 position() 메서드의 값은 A-1 태그 부모인 body 태그의 왼쪽 모서리(Left-top)로 부터 위치점 {top:50, Left:0} 이렇게 반환이 되는 것이다.

 

위 코드 가지고 직접 테스트를 진행해서 브라우저에서 F12 개발자 모드로 확인하면 B-1 태그의 마진 50만큼

A-1 태그의 top 부분이 이동되어 있는 부분을 확인해보면 마진 형태의 부분은 주황색으로 표현이 되고

아닌 부분은 표시가 안되는데

 

위 결과 화면에서도 볼 수 있듯이 B-1 태그의 마진 값 50의 위치가 A-1 태그의 top 위치에 적용되면서 A-1

태그 top 부분을 보면 흰색으로 아무런 마진 값이나 패딩 값이 적용이 안되어져 있는 걸 볼 수 있다.

 

결론적으로, A-1 태그의 position() 메서드로 위치 값을 가져올 땐 현재 선택자의 부모 요소의

왼쪽 모서리(Left-top)로부터의 위치점을 반환받기 때문에

 

부모(body태그)의 style 요소 값으로 인한 또는 B-1 태그처럼 자식 요소의 style 값이 변동으로 인한

A-1 태그의 요소의 position() 위치 값이 변동이 될 수 있다는 점을 알아야 한다.

 

자 마지막으로 요번엔 마진 값이 아닌 패딩 값을 부모 요소인 (body) 태그에다가 50을 적용시켜서 확인해보자.

 

body 태그에 패딩 값 50 적용

body 태그 패딩값 50 적용

 

Body 태그에 패딩 값 50을 적용했다.

이 부분도 A-1 태그의 위치 값을 찍어보면

console.log(APosition); // {top:50, Left:50}

 

이번엔 top/left 둘 다 전부 50이 찍혀 나왔다. 이유는 Body 태그의 패딩 값이 50이니 A-1 태그가 부모 태그인

body 태그의 패딩 값 50 으로부터 A-1 태그가 위치되었다.

 

그래서 A-1 태그의 position() 메서드의 반환된 값은 부모인 body 태그의 왼쪽 모서리(Left-top)로 부터 위치점 {top:50, Left:50} 이 반환되는 것이다.

 

 

결론적으로 선택자의 position()의 값은 선택자의 바로 윗 부모 태그의 왼쪽 모서리(Left-top) 기준점으로 부터

위치점을 반환 받는다. 위 예제들은 마진 값/ 패딩 값으로 인한 자식 요소나 부모 요소에 의해서 위치 값이 

바뀔 수 있다는 점을 예를 든 거고, 

 

이번엔 다른 예제로 마지막 테스트를 해보자. A-1 태그의 CSS 값에 position을 relative로 주고 top/left 값을 설정하고,  B-1 태그의 위치 값을 알아보자.

 

<!DOCTYPE html>
<html>
<head>
	<meta charset="utf-8">
	<meta name="viewport" content="width=device-width, initial-scale=1">
    <script src="https://code.jquery.com/jquery-3.5.0.js"></script>
	<title>A - 페이지</title>
	<style type="text/css">
        body{
            margin: 0px;
        }

        #A-1{
            width: 100px;
            height: 100px;
            background-color: red;
            position: relative;
            top: 200px;
            left: 100px;
        }

        #B-1{
            width: 50px;
            height: 50px;
            background-color: green;
        }
	</style>
    <script type="text/javascript">
        $(document).ready(function(){
            console.log($('#B-1').position());
        });
    </script>       
</head>

<body>
    <div id="A-1">
        <div id="B-1"></div>
    </div>
</body>
</html>

 

 

이 코드의 결과 화면을 보면

 

A-1 태그의 top200/left100 인 relative속성

 

 

A-1 태그는 relative 속성으로 top/left의 위치를 설정해놓은 상태인데 그래서 top으로부터 200px left로부터 100px 이 떨어져서 A-1 태그가 나타났다.

 

B-1 태그를 보면 A-1 태그가 부모 태그인데 B-1 태그 즉, $('#B-1'). position()의 값을 console.log로 

찍어보면 {top:0, Left:0} 이렇게 찍힌다.

 

이 상황을 설명하자면  A-1 태그의 부모 태그인 Body 태그로부터 Top의 200px 만큼 떨어져 있고,

Left의 100px 만큼 떨어져 있지만,

 

B-1 태그는 A-1 태그인 부모 태그로부터의 위치점은 변동되지 않은 top에서 0과 left에서 0이기 때문에

{top:0, Left:0} 이렇게 찍혀서 나온 것.

 

결론적으로 postion() 메서드는 현재 선택자의 요소의 부모 요소의 좌측 상단의 기준점으로부터 위치점

반환받기 때문에 그렇다.

 

 

반응형

+ Recent posts