더플 대답에 대해 유감스럽게 생각합니다. "Parallax"태그를보고 흥분했습니다.
나는 당신이 원하는 것을 이해한다고 생각한다 - 기본적으로 각각의 "zone"이 맨 위에 올 때, 그곳에 래치가 걸리고 다음 구역은 맨 밑에서 잠식된다.
div의 위치가 맨 위에 오면 왼쪽으로 제로가되고 상단의 위치가 고정되어 있다고 생각합니다. 아마도 끈적 거리기를해야 할 때 "래치"클래스를 사용합니다.
내가 아는 한 CSS는 사용자가 원하는대로 할 수 없습니다. 스크롤 위치에 응답하는 방법이 필요하므로 자바 스크립트 솔루션입니다.
지금 코드를 작성할 시간이 없지만 div의 원래 위치를 저장하는 초기화 루틴이 필요합니다. 스크롤 위치가 변경되면 각 div의 원래 위치와 비교하여 div가 고정 대 흐름으로 표시되어야하는시기를 결정해야합니다.
div가 고정 될 때 공간을 차지하지 않기 때문에 몇 가지 방법이 필요합니다. 해당 높이의 제로 너비 div를 떠 다니고 내용 div 다음에 지워보십시오.
죄송하지만 더 이상 설명 드릴 수 없습니다.
P. http://jsfiddle.net/xtyus/1/
html로
<!-- 1. Items that are not in fixed position * latched * scroll normally -->
<!-- 2. Items that go above the scroll position are given .latched -->
<!-- 3. If they scroll down again, they lose .latched -->
<!-- 4. div.spacer included to pad out space when content sections become latched -->
<div class="spacer"></div>
<div class="one">
<h2>ONE</h2>
<p>Lorem ipsum</p>
</div>
<div class="spacer"></div>
<div class="two">
<h2>TWO</h2>
<p>Lorem ipsum</p>
</div>
<div class="spacer"></div>
<div class="three">
<h2>THREE</h2>
<p>Lorem ipsum</p>
</div>
<div class="spacer"></div>
<div class="four">
<h2>FOUR</h2>
<p>Lorem ipsum</p>
</div>
<div style="clear: both"></div>
<div style="height: 1000px"></div>
(jQuery를 1.9.1 테스트)가 CSS
.container {
background: black;
position: relative;
}
.spacer {
width: 0;
height: 600px;
float: left;
clear: both;
}
.one { background:red; width: 100%; height: 600px; position: relative; float: left; }
.two { background: blue; width: 100%; height: 600px; position: relative; float: left; }
.three { background: green; width: 100%; height: 600px; position: relative; float: left; }
.four { background: yellow; width: 100%; height: 600px; position: relative; float: left; }
.latched { position: fixed; top: 0; left: 8px; right: 8px; width: auto; }
자바 스크립트
(function($){
/* Store the original positions */
var d1 = $('.one');
var d1orgtop = d1.position().top;
var d2 = $('.two');
var d2orgtop = d2.position().top;
var d3 = $('.three');
var d3orgtop = d3.position().top;
var d4 = $('.four');
var d4orgtop = d4.position().top;
/* respond to the scroll event */
$(window).scroll(function(){
/* get the current scroll position */
var st = $(window).scrollTop();
/* change classes based on section positions */
if (st >= d1orgtop) {
d1.addClass('latched');
} else {
d1.removeClass('latched');
}
if (st >= d2orgtop) {
d2.addClass('latched');
} else {
d2.removeClass('latched');
}
if (st >= d3orgtop) {
d3.addClass('latched');
} else {
d3.removeClass('latched');
}
if (st >= d4orgtop) {
d4.addClass('latched');
} else {
d4.removeClass('latched');
}
});
})(window.jQuery);
마크
귀하의 질문은 약간 혼란 스럽습니다. 귀하의 div가 겹치기를 원합니 까? – Jcpopp
예. 나는 세 번째 것이 두 번째 것을 겹치기를 원한다. 두 번째 것이 첫 번째 것과 겹치는 것처럼. – Luc
좋아, 내가 할 수있는 것을 보게 해줘. – Jcpopp