dev/web

웹에서 움직이는 배너에 대한 고찰

재삐신생 2013. 7. 24. 14:39
반응형

움직이는 배너란?

쇼핑몰에서 중요한(?)메뉴들이 스크롤에 따라 움직이는 것으로 자주 사용하는데,


이것을 구현하는 방식에 대한 방법론에 대해 포스팅하고자 한다.


JS에 window.scroll 이벤트를 받아서 특정 div의 top속성을 변경하는 방법인데

이부분은 어차피 큰 차이가 없으므로, 생략한다.


공통된 사항은 position:absolute가 있고, top에 특정값이 들어있따는 점


문제는 html 마크업 부분인데

본문의 width:1000px; 움직일배너의 width:200px;로 가정하면,


형태#1

가장 많이 쓰이는 형태로 보이는 이것은

body에 child node로써 움직일 div가 있는 형태이다.

이때는 본문에 사이즈나 여백에 따라 적절한 left값이 필요하다.

<body>

<div>

...

contents

...

</div>

<div id="움직일 배너" style="position:absolute;left:(1000+본문의margin-left)px;top:200px;">

</div>

</body>


형태#2

wrapper div를 활용한 방식으로 wrapper에 relative하게 위치를 조절가능하다.

<body>

<div id="wrapper" style="position:relative;width:1200px;">

<div>

...

contents

...

</div>

<div id="움직일 배너" style="position:absolute;right:0px;top:200px;width:200px;">

</div>

</div>

</body>


형태#3

본문에 relative한 형태

<body>

<div>

...

contents

...

<div id="움직일 배너 wrapper" style="float:right;">

<div id="움직일 배너" style="position:absolute;margin-left:0px;top:200px;width:200px;">

</div>

</div>

</div>

</body>



몇가지 예를 들어보았는데,

형태#1,형태#2같은 경우는 매우 직관적인 형태로 볼 수 있다.

그런데 #3은 약간 이상하다. major 브라우저에서 test를 해본결과 전혀 문제는 없음을 발견했다.

움직일 배너의 부모 div에 float:right를 추가하는 것으로 본문과의 레이아웃이 완벽하게 잡히게 되었다.


움직일 배너 wrapper의 위치가 컨텐츠 최하단에 놓이면서, 우측에 붙게되고, 내부에 다른 내용이 없으므로, 

그 위치가 child node에 영향을 미치므로, 위치가 본문의 우측끝에서 시작되는 것!

직관적이진 못하지만, 저런형태를 취하면, 스크립트에 오류가 있더라도, 본문 하단에 문제없이 위치하게 될 것이다.


반응형