차이 무엇 position: relative과 position: absoluteCSS의는? 그리고 언제 사용해야합니까?
차이 무엇 position: relative과 position: absoluteCSS의는? 그리고 언제 사용해야합니까?
답변:
절대 CSS 포지셔닝
position: absolute;
절대 위치를 이해하는 것이 가장 쉽습니다. CSS position속성으로 시작하십시오 .
position: absolute;
그러면 브라우저에 배치 할 항목을 문서의 정상적인 흐름에서 제거하고 페이지의 정확한 위치에 배치해야합니다. 그것은 HTML에서 그 전에 요소 또는 그 이후에 그것이 그러나 웹 페이지에 배치하는 방법에 영향을주지 않습니다 것입니다 당신이 그것을 무시하지 않는 한 그것의 부모의 위치에 따라합니다.
당신이 10 개 픽셀 문서 창 상단에서 요소를 배치하려는 경우 사용하는 것 top오프셋 position과 거기 absolute위치 :
position: absolute;
top: 10px;
그러면이 요소는 10px내용이 요소의 아래, 위 또는 아래 (시각적으로)에 상관없이 항상 페이지 상단에서 표시 됩니다.
네 가지 포지셔닝 속성은 다음과 같습니다.
toprightbottomleft그것들을 사용하려면 오프셋 속성으로 생각해야합니다. 즉, 배치 된 요소 right: 2px가 오른쪽으로 이동되지 않습니다 2px. 오른쪽은 창의 오른쪽 (또는 부모를 재정의하는 위치)에서으로 오프셋됩니다 2px. 다른 세 사람도 마찬가지입니다.
상대 위치
position: relative;
상대 위치 지정은 위치 지정과 동일한 네 가지 위치 지정 속성을 사용합니다 absolute. 그러나 브라우저보기 포트에서 요소의 위치를 기반으로하는 대신 요소가 여전히 정상적인 흐름 에있는 경우 요소의 위치에서 시작합니다 .
예를 들어, 웹 페이지에 세 개의 단락이 있고 세 번째 단락에 position: relative스타일 이있는 경우 위치는 뷰 포트의 원래면이 아닌 현재 위치를 기준으로 오프셋됩니다.
단락 1.
단락 2.
단락 3. 위의 예에서 세 번째 단락은3em컨테이너 요소의 왼쪽에서 배치되지만 여전히 첫 두 단락 아래에 있습니다. 문서의 정상적인 흐름을 유지하고 약간 오프셋됩니다. 로 변경 position: absolute;하면 문서의 일반적인 흐름에 더 이상 포함되지 않으므로 그 뒤의 모든 항목이 맨 위에 표시됩니다.
노트:
기본적 width으로 요소의 기본 크기 width가 100%채울 수있는 공간과 상대적으로 배치 된 요소와 달리, 절대적으로 배치 된 요소 의 기본값 은 내용의 너비입니다 .
절대적으로 배치 된 요소와 겹치는 요소를 가질 수 있지만 상대적으로 배치 된 요소 (예 : 음수 여백 / 포지셔닝을 사용하지 않음)로는이를 수행 할 수 없습니다.
뽑아 낸 많은 것 : 이 자원
“상대적”및“절대적”포지셔닝은 서로 다른 프레임 워크와 함께 실제로 상대적입니다. "절대"위치는 다른 둘러싸는 요소의 위치와 관련이 있습니다. "상대적"위치는 요소 자체가 위치를 지정하지 않은 위치에 상대적입니다.
그것은 당신의 요구와 당신이 사용하는 목표에 달려 있습니다. "상대적"위치는 요소의 흐름에있을 수있는 위치에서 요소를 변위하려는 경우에 적합합니다 (예 : 일부 문자를 위첨자 위치에 표시). "절대"위치 지정은 다른 요소에 의해 설정된 일부 좌표계에 요소를 배치하는 데 적합합니다 (예 : 일부 텍스트가있는 이미지를 "인쇄").
특별하게, 변위가없는 "상대"위치 설정 (설정 만 position: relative)을 사용하여 요소를 참조 프레임으로 만들면 요소 안에있는 요소에 대해 "절대"위치 지정을 사용할 수 있습니다 (마크 업).
Relative positioning is relative to the position that the element itself would have without positioning?? 위치없는 요소는 기본적으로 "정적"하지만 상대가 될 것입니다
주의해야 할 또 다른 사항은 절대 요소를 부모 요소로 제한하려면 부모 요소의 위치를 상대로 설정해야한다는 것입니다. 이렇게하면 자식 요소가 부모 요소에 포함되어 전체 창에 대해 "상대적"이 아닙니다.
다음과 같은 영향을주는 간단한 예를 제공 하는 블로그 게시물 을 작성했습니다.

그것은 녹색의 div를 가지고 있으며 그것은 절대적으로 노란색의 div의 바닥에 위치합니다.
1 http://blog.troygrosfield.com/2013/02/11/working-with-css-positions-creating-a-simple-progress-bar/
상대 위치 :
position : relative를 지정하면 위쪽 또는 아래쪽, 왼쪽 또는 오른쪽을 사용하여 문서에서 일반적으로 발생하는 위치를 기준으로 요소를 이동할 수 있습니다.
절대 위치 :
position : absolute를 지정하면 요소가 문서에서 제거되고 지시 한 위치에 정확하게 배치됩니다.
다음은 절대 및 상대 위치에 따른 두 위치의 샘플 사용법에 대한 http://www.barelyfitz.com/screencast/html-training/css/positioning/ 튜토리얼 입니다.
상대 : 현재 위치와 관련이 있지만 이동할 수 있습니다. 또는 상대 위치 요소가 ITSELF를 기준으로 배치됩니다.
절대 : 절대 위치 요소는 IT의 가장 가까운 위치에 상대적인 위치에 배치됩니다. 하나가 존재하면 창과 관련하여 fixed .....처럼 작동합니다.
<div style="position:relative"> <!--2nd parent div-->
<div> <!--1st parent div-->
<div style="position:absolute;left:10px;....."> <!--Middle div-->
Md. Arif
</div>
</div>
</div>
여기에서 두 번째 부모 div위치는 상대적이므로 중간 div은 두 번째 부모 위치와 관련하여 위치를 변경합니다 div. 첫 번째 상위 div위치가 상대적이면 중간 div은 첫 번째 상위 위치와 관련하여 위치를 변경합니다 div. 세부
내 명성이 언급하기에 충분하지 않기 때문에 대답을한다. 그러나 이것을 답으로 보지 마라. 추가 정보는 나 자신과 마찬가지로 바닥 글과 위치에 문제가 있었다.
페이지를 설정할 때 바닥 글이 항상 절대 위치로 맨 아래에 있고 주 컨테이너 / 래퍼가 상대적 위치로 유지되도록 페이지를 설정할 때.
그런 다음 텍스트 내용과 동일한 내용 (머리글과 바닥 글 사이의 흰색 부분)의 메뉴에 문제가 있음을 발견했습니다. 바닥 글을 절대로 설정하면 바닥 글이 더 이상 유지되지 않습니다.
복잡한 주제를 말하면, 포지셔닝입니다.
내 솔루션, 내 웹 페이지의 '절대'포지션에서 원했던 콘텐츠에 대한 예를 들어 드롭 다운 메뉴를 열 때 실제로는 상대 위치를 지정하고 드롭 다운 아래에 35em을 배치하는 것이 측면으로 밀리지 않았습니다. 메뉴. (35em은 완전히 확장 된 경우 드롭 다운 메뉴의 높이입니다)
그런 다음 Top : -35em. 이전에 내용을 푸시했습니다. 그리고 margin-bottom : -35em을 추가하십시오. 이렇게하면 내용이 드롭 다운 메뉴 "아래"에 있지만 시각적으로 드롭 다운 메뉴와 나란히 있습니다! 바닥 글 아래의 공백은 10m 정도의 여유를 갖습니다. 그래서 이것에 대한 나의 해결책은 다음과 같습니다.
html, body {
margin:0;
padding:0;
height:100%;
}
h1 {
margin:0;
}
#webpage {
position:relative;
min-height:100%;
margin:0;
overflow:auto;
}
#header {
height:5em;
width:100%;
padding:0;
margin:0;
}
#text {
position:relative;
margin-bottom:-32em;
padding-top:2em;
padding-right:2em;
padding-bottom:10em;
background-repeat:no-repeat;
width:70%;
padding-left:auto;
margin-left:auto;
margin-right:auto;
right:10em;
float:right;
top:-32em;
}
#dropdown {
position:absolute;
left:0;
width:20%;
clear:both;
display:block;
position:relative;
top:1em;
height:35em;
}
#footer {
position:absolute;
width:100%;
right:0;
bottom:0;
height:5em;
margin:0;
margin-top:5em;
}
귀하의 질문에 대한 답변은 훌륭하지만 많은 문제가 발생한 후 이것이 매우 좋은 해결책이며 위치 지정 방식을 더 잘 이해하는 방법이라는 것을 알았습니다. 텍스트 내용을 드롭 다운 메뉴 아래에 놓으면 ' 내 텍스트를 옆으로 밀지 마십시오. 텍스트를 절대 위치로 변경하면 바닥 글이 그대로 유지되지 않았습니다. 나는 이것이 더 많은 사람들에게 문제라고 믿을 수 있기 때문에 여기에 추가합니다. 실제로 무슨 일이 일어 났는지, 나는 텍스트를 35ems 내 드롭 다운 아래에 넣습니다.
그런 다음, 나는 시각적으로 서로 바로 옆에, 상대적 위치와 상단을 표시합니다.
음수 값은 때때로 이러한 위치를 더 잘 이해할 때 매우 우수한 기능성으로 과소 평가됩니다.
당연히 고정 위치는 바닥 글의 논리처럼 보였지만 텍스트 또는 내용이 뷰 포트보다 길면 바닥 글이 뷰포트 아래로 내려 가기를 원합니다. 페이지에 내용이 거의 없으면 맨 아래에 머물러 있습니다.
이 설정은 매우 훌륭하게 수정되었으며보다 유동적이고 동적 인 페이지 레이아웃을 위해 'px'가 아닌 'em'을 사용해야합니다! :)
(더 나은 솔루션이있을 수 있지만 이것은 장치뿐만 아니라 크로스 플랫폼에서도 효과적입니다).
절대와 상대의 차이를 설명하는 시나리오를 논의 해 봅시다.
body 요소 안에 높이가 viewheight의 95 %, 즉 95vh 인 헤더 요소가 있다고 가정하십시오. 이 컨테이너 내에 이미지를 배치하고 불투명도를 0.5로 줄였습니다. 이제 왼쪽 상단 근처에 로고 이미지를 배치하려고합니다. 시나리오를 이해했으면합니다. 따라서 머리글 섹션에 지정된 위치에 로고가있는 이미지가 더 밝아집니다.
그러나 이것을 시작하기 전에 이와 같이 여백과 패딩을 0으로 설정했습니다.
*{
margin:0px;
padding:0px;
box-sizing: border-box;
}
이렇게하면 기본 여백과 패딩이 요소에 적용되지 않습니다.
따라서 두 가지 방법으로 요구 사항을 달성 할 수 있습니다.
첫 번째 방법
CSS에서 당신은 작성
.logo{
float:left;
margin-top:40px;
margin-left:40px;
}
그러나 내 친구 이것은 불필요하게 너무 많은 공간을 소비 한 이미지를 필요하지 않을 때 약간의 여유를 주어 이미지를 배치하는 나쁜 디자인입니다. 이미지를 해당 위치에 배치하기 만하면됩니다. 주변 여백으로 쿠션 처리하여 관리했습니다. 여백은 공간을 차지하고 콘텐츠를 더 깊이 밀어서 원하는 위치에 정확하게 위치한다는 인상을주었습니다. 이 문제를 해결하여 문제를 이해했으면합니다. 원하는 위치에 이미지를 배치하는 데 필요한 것보다 더 많은 공간을 차지하고 있습니다.
이제 다른 접근법을 시도해 봅시다.
두 번째 방법
헤더 클래스의 position 속성을 다음과 같이 relative로 설정하십시오.
.header{
position: relative;
}
그런 다음 로고 클래스에 다음 속성을 추가했습니다.
.logo{
position:absolute;
top:40px;
left:40px
}
당신은 간다. 이미지를 정확히 같은 곳에 배치했습니다. 첫 번째 접근법과 두 번째 접근법 사이의 육안으로의 위치에 명백한 차이는 없습니다. 그러나 이미지 요소를 검사하면 추가 공간이 필요하지 않은 것을 알 수 있습니다. 자체 너비와 높이만큼 정확히 동일한 영역을 차지합니다.
어떻게 이것이 가능합니까? 나는 이미지 로고 클래스에 당신 이이 클래스의 자식이므로 헤더 클래스 에 상대적 으로 배치 될 것이고 구체적으로 상대 위치라고 언급했다 . 그래서 그것의 모든 자식은 왼쪽 상단 모서리에 상대적으로 배치됩니다. 그리고 당신의 위치는이 부모 요소 안에 고정되어야합니다. 그래서 당신은 절대적 으로 주어집니다. 그리고 당신은 내가 원하는 위치로 약간 위에서 움직여야합니다. 따라서 값이 40px 인 top 및 left 속성이 제공됩니다. 이런 식으로 당신은 당신의 부모에만 상대적으로 배치됩니다. 따라서 내일 부모를 위 또는 아래로 이동하거나 아무 데나 움직이면 부모 헤더의 왼쪽 상단 모서리의 왼쪽과 위쪽으로 항상 40px가됩니다. 따라서 당신의 위치는 부모의 위치가 고정되어 있는지 아닌지에 관계없이 부모 안에 고정되어 있습니다 (당신처럼 절대적이지 않기 때문에).
따라서 부모와 자식에 각각 상대 및 절대를 사용하십시오. 둘째로 자식 요소를 부모 요소 내부의 특정 위치에만 배치하려고 할 때 사용하십시오. 여백과 같은 필러를 사용하여 억지로 밀어 넣지 마십시오. 이동하려는 부모의 상대 가치와 자녀에게 절대 가치를 부여하십시오. 자식 클래스에 top, left bottom 또는 right 속성을 지정하여 원하는 위치에 부모 내부에 배치하십시오.
감사.