나는 div
항상 다음을 사용하여 화면 상단에 붙어 있도록 수정하려고합니다 .
position: fixed;
top: 0px;
right: 0px;
그러나 div
중앙 컨테이너 안에 있습니다. 내가 그것을 사용할 때 브라우저의 오른쪽에있는 것과 같이 브라우저 창에 상대적인 position:fixed
것을 수정 div
합니다. 대신, 컨테이너를 기준으로 고정해야합니다.
을 position:absolute
기준으로 요소를 수정하는 데 사용할 수 div
있지만 페이지를 아래로 스크롤하면 요소가 사라지고에서와 같이 맨 위에 고정되지 않습니다 position:fixed
.
이것을 달성하기위한 해킹이나 해결 방법이 있습니까?
답변
짧은 대답 : 아닙니다. (이제 CSS 변환으로 가능합니다. 아래 편집 참조)
긴 대답 : “고정 된”위치 지정 사용시 문제는 요소 가 흐름에서 빠져 나간다는 것입니다 . 따라서 부모가없는 것처럼 재배치 할 수 없습니다. 그러나 컨테이너의 너비가 고정 된 알려진 경우 다음과 같은 것을 사용할 수 있습니다.
#fixedContainer {
position: fixed;
width: 600px;
height: 200px;
left: 50%;
top: 0%;
margin-left: -300px; /*half the width*/
}
편집 (03/2015) :
오래된 정보입니다. CSS3 변환의 마법을 사용하여 동적 크기 (가로 및 세로)의 내용을 가운데에 배치 할 수 있습니다. 동일한 원칙이 적용되지만 마진을 사용하여 컨테이너를 오프셋하는 대신을 사용할 수 있습니다 translateX(-50%)
. 너비가 고정되어 있지 않은 한 오프셋을 얼마나 많이 알지 못하고 상대적 요소 (예 50%
:)를 부모 요소와 관련이 있기 때문에 상대 값을 사용할 수 없기 때문에 위의 마진 트릭으로는 작동하지 않습니다. 에 적용됩니다. transform
다르게 행동합니다. 그 값은 적용되는 요소와 관련이 있습니다. 따라서 는 요소의 너비의 절반 50%
을 transform
의미 50%
하고 여백은 부모 너비의 절반을 의미합니다. 이것은 IE9 + 솔루션입니다
위 예제와 유사한 코드를 사용하여 완전히 동적 너비와 높이를 사용하여 동일한 시나리오를 다시 만들었습니다.
.fixedContainer {
background-color:#ddd;
position: fixed;
padding: 2em;
left: 50%;
top: 0%;
transform: translateX(-50%);
}
중앙에 배치하려면 다음을 수행하십시오.
.fixedContainer {
background-color:#ddd;
position: fixed;
padding: 2em;
left: 50%;
top: 50%;
transform: translate(-50%, -50%);
}
시민:
jsFiddle : 가로로만
중앙
정렬 jsFiddle : 가로와 세로로 중앙 맞춤 이 답변 에서 나에게 지적 해 준
사용자 신용은 사용자 aaronk6 에게 전달됩니다.
답변
실제로 이것은 가능하며 허용되는 답변은 중앙 집중화만을 다루며, 이는 간단합니다. 또한 JavaScript를 사용할 필요가 없습니다.
이를 통해 모든 시나리오를 처리 할 수 있습니다.
position : relative container in position : relative container를 배치하려는 경우 모든 것을 원하는대로 설정 한 다음을 사용하여 div 안에 새 고정 위치 div를 만들되 상단 및 왼쪽 속성을 설정 position: absolute
하지 마십시오 . 그런 다음 컨테이너와 관련하여 원하는 곳에서 고정됩니다.
예를 들면 다음과 같습니다.
/* Main site body */
.wrapper {
width: 940px;
margin: 0 auto;
position: relative; /* Ensure absolute positioned child elements are relative to this*/
}
/* Absolute positioned wrapper for the element you want to fix position */
.fixed-wrapper {
width: 220px;
position: absolute;
top: 0;
left: -240px; /* Move this out to the left of the site body, leaving a 20px gutter */
}
/* The element you want to fix the position of */
.fixed {
width: 220px;
position: fixed;
/* Do not set top / left! */
}
<div class="wrapper">
<div class="fixed-wrapper">
<div class="fixed">
Content in here will be fixed position, but 240px to the left of the site body.
</div>
</div>
</div>
슬프게도,이 스레드가 Android의 WebKit 렌더링 상자 그림자 블러 픽셀에서 고정 위치 요소의 여백으로 문제를 해결할 수 있기를 바랐 지만 버그 인 것 같습니다.
어쨌든, 이것이 도움이되기를 바랍니다!
답변
예, 사양에 따르면 방법이 있습니다.
Graeme Blackwood가 문제를 실질적으로 해결하기 때문에 받아 들일만한 대답이어야한다는 데 동의하지만 고정 요소 는 컨테이너에 상대적으로 배치 할 수 있습니다.
우연히 신청할 때
-webkit-transform: translateZ(0);
몸에 (뷰포트 대신) 고정 된 자식을 만들었습니다. 그래서 내 고정 요소left
와top
속성은 컨테이너와 관련이 있습니다.
그래서 몇 가지 조사를 한 결과 문제가 이미 Eric Meyer 에서 다루고 있음을 발견했습니다. 있고 그것이 “속임수”인 것처럼 느껴지더라도 이것이 사양의 일부라는 것이 밝혀졌습니다.
CSS 상자 모델에 의해 레이아웃이 제어되는 요소의 경우 변환에 대한 값 이외의 값은 스택 컨텍스트와 포함 블록을 모두 생성합니다. 객체는 고정 위치 자손의 포함 블록 역할을합니다.
http://www.w3.org/TR/css3-transforms/
따라서 부모 요소에 변환을 적용하면 포함 요소가됩니다.
그러나…
문제는 요소가 고정 된 것처럼 작동하지 않기 때문에 구현이 버그가 많거나 독창적이라는 것입니다 (이 비트가 사양의 일부가 아닌 것처럼 보이더라도).
Safari, Chrome 및 Firefox에서도 동일한 동작이 발견되지만 IE11에서는 고정 요소가 여전히 고정되어 있습니다.
또 다른 흥미로운 (언급되지 않은) 것은 고정 요소가 변환 된 요소 안에 포함되어 있으면 속성과 관련하여 컨테이너의 속성 top
과 left
속성이 컨테이너와 관련이 box-sizing
있으며 스크롤 컨텍스트가 상자처럼 요소의 테두리 위로 확장된다는 것입니다 크기가로 설정되었습니다 border-box
. 어떤 창조적 인 경우, 이것은 아마도 장난감이 될 수 있습니다 🙂
답변
대답은 당신이 설정되어 있지 않는 한, ‘예’ left: 0
또는right: 0
div 위치를 고정으로 설정 한 후에는 가능합니다.
사이드 바 사업부를 확인하십시오. 고정되어 있지만 창 뷰 포인트가 아닌 부모와 관련되어 있습니다.
body { background: #ccc; }
.wrapper {
margin: 0 auto;
height: 1400px;
width: 650px;
background: green;
}
.sidebar {
background-color: #ddd;
float: left;
width: 300px;
height: 100px;
position: fixed;
}
.main {
float: right;
background-color: yellow;
width: 300px;
height: 1400px;
}
<div class="wrapper">wrapper
<div class="sidebar">sidebar</div>
<div class="main">main</div>
</div>
답변
position: sticky
이는 개념적으로 유사한 요소를 배치하는 새로운 방법 position: fixed
입니다. 차이점은 주어진 오프셋 임계 값이 뷰포트에서 충족 될 때까지 요소가 부모 내 position: sticky
에서처럼 작동 한다는 것 position: relative
입니다.
Chrome 56 (현재 2016 년 12 월 현재 베타, 2017 년 1 월 안정)에서 position : sticky가 돌아 왔습니다.
https://developers.google.com/web/updates/2016/12/position-sticky
자세한 내용은 착륙 스틱에 있습니다! position : WebKit의 끈적 끈적한 땅 .
답변
2019 솔루션 : position: sticky
속성 을 사용할 수 있습니다 .
다음은 사용법을 보여주는 CODEPEN 예제와 사용법과 다른 점입니다 position: fixed
.
작동 방식은 다음과 같습니다.
-
고정 위치를 가진 요소는 사용자의 스크롤 위치를 기준으로 배치됩니다. 기본적으로
position: relative
요소가 특정 오프셋 이상으로 스크롤 될 때까지 작동하며 ,이 경우 위치가 고정됩니다. 다시 스크롤하면 이전 (상대) 위치로 돌아갑니다. -
페이지의 다른 요소의 흐름에 영향을 미칩니다. 즉 페이지에서 특정 공간을 차지합니다 (예 🙂
position: relative
. -
컨테이너 내부에 정의되어 있으면 해당 컨테이너와 관련하여 배치됩니다. 컨테이너에 오버플로 (스크롤)가 있으면 스크롤 오프셋에 따라 위치가 고정됩니다.
따라서 컨테이너 내부에서 고정 기능을 달성하려면 스티커를 사용하십시오.
답변
고정 위치 div에서 상단 및 왼쪽 스타일을 가져 가십시오. 여기에 예가 있습니다
<div id='body' style='height:200%; position: absolute; width: 100%; '>
<div id='parent' style='display: block; margin: 0px auto; width: 200px;'>
<div id='content' style='position: fixed;'>content</div>
</div>
</div>
#content div는 상위 div가있는 곳에 앉아 있지만 고정되어 있습니다.
