김군 왈, " A군아 모하니~ "
A군 왈, " 맨날~ 놀지용 "
김군 왈, " 어랏 오늘은 안 까칠한데? "
A군 왈, " 내가 언제.. 왜... "
김군 왈, " 그렇다면 나 이거 광고 넣는 영역 만들려 하는데 도와줘... "
A군 왈, " 나~~~ 갈래... "
김군 왈, " ㅋㅋㅋㅋ 역시... 그래도 다 말할 것 아니여... "
A군 왈, " 아이구... 그래그래... 원하는 것이 무엇이드냐? "
김군 왈, " 그러니까, 레이아웃 짠 거 양 옆에다 광고 넣는 영역을 만들어 놓을려고 해. 그리고 어디서 봤더라? 네이트에서 본 것 같은데.. 그게 스크롤은 본문 크기에만 여전히 그대로 작동하고 외부에 붙은 광고는 상관없이 옆에 그냥 있는 것 같더라고... "
A군 왈, " 아.. 본문외 추가적인 크기가 스크롤에 영향을 주지 않는 광고 영역이라고 이름을 붙여야 하나? 어찌든 그러하면 그건 네이트 가서 소스를 열어보면 알 것 아니야? "
김군 왈, " 아. 그렇군.. ... "
잠시 뒤...
김군 왈, " 어랏 없네.. 언제 없어졌지 ㅡ.,ㅡ "
A군 왈, " 거봐 그런거.. 하지 말라는 것이야. 나는 딱 홈페이지 갔을 때, 몬가 자꾸 팔락팔락 거리고, 스토커 마냥 따라 다니고 그런 거 보면 싫더러고. 그냥 얌전히.. 아주 얌전히.. .조용히 있는 곳이 좋더라고... "
김군 왈, " 귀찮아서 그런거지? ㅎㅎ 아니 .. 이 사람 별소리를... 다 그런 것은 경우에 따라 다르다고... 뭔가 화려한 페이지도 임펙트 있게 사람에게 알릴 광고 목적도 있는 것이라고오... "
A군 왈, " ....... 눼~ 그래그래... 고민 좀 해보자 "
김군 왈, " 만들 줄 몰라? 해본적 없어? "
A군 왈, " 어. 그런 것 같은데... "
김군 왈, "..... "
A군 왈. " ~라고 말하면 안해도 되나? "
김군 왈, " 야.. 잡소리에 벌써 양이 장난아니다. 얼렁 얼렁 뱉어내시오. "
A군 왈. " 그런 것이 따로 모 방법이 있겠어? 원리를 알면 만들어 낼 수 있겠지.. 방법은 여러가지일 꺼야.. 어떤 것이 좋은지는 아직 잘 모르겠다. 일단 만들어보자. 대충 생각해보면 일단 임의의 영역이 겹치지 않게 하기 위해서 absolute가 필요하겠고, 스크롤 처리를 위해서는 overflow:hidden이 필요하겠고... 해당 영역 만큼 width랑 전체의 100% 설정도 필요하겠네... 궁시렁궁시렁... "
김군 왈, " 가능하겠어? "
A군 왈, " ㅡ.,ㅡ 다 사람이 만드는 건데 안되는 것이 어딨어... "
| <div style="width:960px;margin:0 auto;background:red;"> HEADER </div> <div style="width:960px;margin:0 auto;background:blue;"> CONTENT </div> |
위와 같이 있다고 하자.. 그런데 어디 쯤에 넣고 싶어? Header 양옆, 아니면 Content 양옆? 그리고 광고 폭은? "
김군 왈, " 어... CONTENT 양옆에 그리고, 폭은 200px "
A군 왈, " 야... ㅎ 몬놈의 광고가 그리커? 벌써 960px의 폭인데 광고 200px 2개면 1360px이나 되는 문서네... "
김군 왈, "아.. 사람은 크게 벌어야... 그럼 100px.. ㅎ"
A군 왈, "일단은 100%의 크기를 가진 것을 만들고 거기안에 넣어서 overflow:hidden으로 처리되게 해보자. "
| <div style="width:960px;margin:0 auto;background:red;"> HEADER </div> <div style="position:absolute;width:100%;left:0;overflow:hidden"> <div style="width:960px;margin:0 auto;"> 광고 컨텐트 </div> </div> <div style="width:960px;margin:0 auto;background:blue;"> CONTENT </div> |
A군 왈, "position:absolute는 다음 요소가 해당 영역 무시하게 올라오게 하는 것이고, 아니면 margin-bottom을 이용해서 해당 높이만큼 빼면 되겠지? 아 그리고 IE6에서 left에 설정된 초기값 auto가 해당 위치가 아니어서 다시 설정하느냐 추가했고...
내부 자식 div는 일단 해당 본문의 크기 정도 폭을 할당했어. 이제 저 안에 광고를 넣을 div를 넣으면 되겠지? 이때 광고 컨텐트는 좌우에 붙이면 되는데, 우선 그동안 익힌 기초를 이용하면 2가지 방법을 생각할 수 있겠네.
하나는 다시 position:relative를 이용해 절대 좌표계를 사용하는 광고를 배치하는 법
다른 방법은 float를 이용해서 좌우에 넣고 음의 마진을 사용해서 빼는 방법이 있지비.
일단 전자의 방법을 사용하면 다음과 같이 돼...
| <div style="position:absolute;width:100%;left:0;overflow:hidden"> <div style="position:relative;width:960px;height:100px;margin:0 auto;"> <div style="position:absolute;left:-100px;width:100px;background:yellow;"> 왼쪽 광고 </div> <div style="position:absolute;right:-100px;width:100px;background:yellow;"> 오른쪽 광고 </div> </div> </div> |
전에도 말했듯이 절대 좌표계인 position을 사용할 경우, 좌표계의 기준을 생각해서 relative를 설정할 필요가 있으며, 이때 사용할 좌표계 기준은 부모가 되니 거기서 relative를 설정했지. 그 뒤 내부 광고는 left와 right의 음의 값을 위치했고.. 이들을 모두 둘러싸는 것의 overflow:hidden이 있으니 이제 스크롤바도 안생기겠지.."
김군 왈, " 오호.. 오호.. 수고했어.. 그리고 float를 사용하는 방법은? "
A군 왈, " 아.. float를 사용하는 방법은 IE6에서 음의 마진 값을 사용하는데 이때 문제가 있어. 그러나 해결이 가능해. 일단 IE6에서는 음의 마진을 가진 경우, 결과와 해결을 먼저 적는다면 영역 밖으로 나간 부분은 표시되지 않고 짤려나가. 이를 방지하기 위해서 position:relative를 설정하면 해결이 돼.. 이 문제를 좀더 살펴보자.
[IE6에서 음의 마진 값 사용시, 짤려져 사라지는 버그]
| <div style="height:100px;width:100px;background:#f00;margin:20px auto;"> <div style="margin-left:-50px;width:100px;height:50px;background:#0f0;"> ABCDEFGH </div> </div> |
이제 이를 고치기 위해 float와 함께 relative를 넣어서 작성해보자고...
| <div style="position:absolute;width:100%;left:0;overflow:hidden"> <div style="width:960px;height:100px;margin:0 auto;"> <div style="position:relative;float:left;margin-left:-100px;width:100px;background:yellow;"> 왼쪽 광고 </div> <div style="position:relative;float:right;margin-right:-100px;width:100px;background:yellow;"> 오른쪽 광고 </div> </div> </div> |
[position이 static과 아닌 값에서 중첩시 우선 순위 & IE 투명 배경 관통 현상]
또 하나 처리할 것은 z-index의 초기값 auto에 대한 이해야. 광고 컨텐츠를 가장 밖에서 둘러싼 div의 position 속성 값은 absolute로 하면서 해당 위치에 다음 따라오는 블록 요소가 이들이 없는 것처럼 서로 겹치게 되어 있어. 그런데 누가 위에 올라온 것일까?
결과를 먼저 적으면 광고 영역은 이런 흐름과 달리 중첩된 다음 블록보다 위에 있게 돼. 보기에는 광고 영역의 배경이 투명이어서 이를 바로 확인 못했을 뿐이야. 이렇게 가리면 뒤에 있는 것들은 본래 중첩된 content는 클릭이 안되어서 문제가 발생하지. 그러나 IE는 IE9를 포함하여 투명인 배경이 위에서 겹칠때 독특하게 처리하고 있어. 마치 없다 듯이 뒤에 있는 것도 선택이 가능하지. 그렇지만 다른 브라우저는 이와는 달리 엄격하게 뒤에 있는 것을 선택할 수가 없어. 따라서 이어 오는 블록 요소와의 겹칠 경우, 누가 우선인지 명확히 결정해 놓아야겠지?
본래의 원칙대로 생각해보자. position의 기본 값은 static이야. 서로 동위에 겹치게 된다면 뒤에 오는 것이 우선하여 위로 올라오게 돼. 그러나 static이 아닌 경우는, 다른 static인 초기값에 대해서 자신이 위로 올라가는 선순위이 있어. 따라서 앞서 작성했던 것도 이러한 규칙에 따라 광고의 영역이 가리게 되었지. 이를 해결하기 위해서는 z-index를 사용하여 직접 결정하면 되는데, z-index는 static이 아닌 position에서만 작동하는 점이 있어.
그러나 굳이 z-index의 값으로 명확히 설정하지 않아도, static이 아닌 블록끼리 겹치면 역시 동위에서는 뒤에 것이 위로 올라오게 되었지. 다만 static은 그 이전에 순서에서 먼저 밀린 것이야. 그렇기에 이를 이해했다면 z-index의 값을 사용하지 않고 그저 content에서 relative만 설정하면 이제 content가 위에 올라오겠지?
또한 나온 김에 IE의 이러한 투명 영역처리가 관통해서 뒤에 있는 것을 선택가능한 점은 그리 좋은 것만은 아니야. 때로는 이를 방지하기 위해서 투명도가 아주 낮은 블록을 새로 생성해 가릴 수도 있으며, 다른 방법으로는 배경 자체를 투명 그림으로 사용하면 이련 효과도 사라지며, 한발 더 나아가 투명이 아닌 그림 파일이라도 보이지 않게 위치를 변경하는 트릭으로도 해결이 가능해.
자아~ 이야기가 길어졌다. 이제 이해를 다했으면 한번 완성을 시켜보자. "
김군 왈, " 어...정리하면 간단하네. static 끼리는 동위에서는 뒤에 것이 우선. static이 아닌 것과 만나면 후순. 따라서 static이 아닌 것으로 이어지는 중첩을 설정하면 위로 올라오겠네. 으흥.. 기달려봐...
| <!doctype html> <html> <head> <title>AD Block</title> <style> html, body { margin:0; padding:0 } #header, #content { width : 960px; margin: 0 auto; height: 100px; } #header { background: red} #content { position: relative; height: 200px; background: blue; } #ADBlockWrap { width: 100%; position: absolute; overflow: hidden; left: 0; } #ADBlock { position: relative; width : 960px; margin: 0 auto; height: 100px; } #ADBlock div.items { position: absolute; width: 100px; height: 100px; background: yellow; } #ADBlock div.items.left { left : -100px } #ADBlock div.items.right { right: -100px } </style> </head> <body> <!-- 헤더 --> <div id="header"> Header </div> <!-- 광고 --> <div id="ADBlockWrap"> <div id="ADBlock"> <div class="items left"> 왼쪽 광고 </div> <div class="items right"> 오른쪽 광고 </div> </div> </div> <!-- 컨텐츠 --> <div id="content"> Content </div> </body> </html> |
다 했어.. "
A군 왈, " 헉헉헉.. 왜 항상 니가 옮기는데 내가 힘드냐... "
<결과: 폭은 쭐였음... >
----
다음 시간에....
댓글 1개
게시글 목록
| 번호 | 제목 |
|---|---|
| 8265 | |
| 20403 | |
| 20402 | |
| 20401 | |
| 20400 |
웹서버
서버 동시접속자 설정 변경하기
|
| 8259 | |
| 20399 | |
| 20398 | |
| 8255 | |
| 8249 | |
| 8246 | |
| 8242 | |
| 20396 | |
| 8240 | |
| 20395 | |
| 20394 |
MySQL
테이블 복사 쿼리
|
| 31033 | |
| 28385 | |
| 20393 |
PHP
현재 접속중인 사용자 나타내기
|
| 28380 | |
| 20392 |
MySQL
mysql select 후 update 하기
|
| 28377 | |
| 20391 | |
| 20390 |
PHP
한글문자열 자르는 법 입니다.
|
| 20389 | |
| 20388 | |
| 20387 |
PHP
이메일주소 검사하기 입니다.
|
| 20386 | |
| 20385 | |
| 20384 |
node.js
Node js 게시판 프로젝트 소개합니다.
|
| 20383 |
PHP
pc 모바일 체크
1
|
| 20382 |
PHP
계정 사용량(용량) 확인
|
| 8238 | |
| 20380 | |
| 20379 |
MySQL
소수점 반올림 버림
|
| 28376 | |
| 28372 | |
| 20378 | |
| 20377 |
PHP
에러 로그파일 생성하기
|
| 8235 | |
| 20375 | |
| 20374 | |
| 20373 |
PHP
후이즈검색 하기 입니다.
|
| 20372 |
PHP
그래프 그리기 입니다.
|
| 20371 |
JavaScript
자바스크립트로 구현한 number_format() 입니다.
|
| 20370 |
JavaScript
금액 관련 숫자를 한글로 변환하기 입니다.
|
| 28370 | |
| 20369 |
PHP
PHP 날짜 계산 관련 함수
|
| 28366 | |
| 20368 |
jQuery
jQuery 1.x와 2.x 버전 동시에 사용하기
|
| 20367 | |
| 20366 | |
| 20365 |
JavaScript
사업자 등록번호 검사하기 입니다.
|
| 20364 | |
| 20363 |
JavaScript
항상 같은곳에 광고창 만들기 입니다.
|
| 20362 |
JavaScript
부메뉴 나오게 하기 입니다.
|
| 20361 |
JavaScript
특정문자 제거하기 입니다.
|
| 20360 |
JavaScript
휴대폰번호 검사 하기 입니다.
|
| 20359 |
JavaScript
이미지 좌우로 이동 갤러리 입니다.
|
| 8231 | |
| 20358 | |
| 20357 |
JavaScript
쉬운 replaceAll 입니다.
|
| 20356 | |
| 20355 | |
| 20354 | |
| 20353 | |
| 20352 |
JavaScript
콤보스타일 메뉴 입니다.
|
| 20351 |
JavaScript
쿠키를 이용한 레이어 공지창 입니다.
|
| 20350 |
JavaScript
효과있는 텍스트 틱커 입니다.
|
| 20349 | |
| 20348 |
PHP
HTTP 인증 하기 입니다.
|
| 20347 |
JavaScript
외부 문서 불러오기 입니다.
|
| 20346 |
JavaScript
지정한 날짜까지 New 이미지를 띄워주기 입니다.
|
| 20345 | |
| 20344 |
JavaScript
메일 주소 검사하기 체크박스 입니다.
|
| 20343 |
JavaScript
무단링크 금지하기 입니다.
|
| 20342 | |
| 20341 |
MySQL
DB백업 및 복원
|
| 20340 |
JavaScript
페이지가 다른 사이트의 프레임에 갇히는 것을 막기 입니다.
|
| 20339 | |
| 20338 | |
| 20337 |
jQuery
input text 대문자만 받는 Jquery
|
| 20336 | |
| 20335 |
JavaScript
이미지 업로드와 미리보기 입니다.
|
| 20334 |
JavaScript
배경음악 랜덤 재생 하기 입니다.
|
| 20333 |
JavaScript
css 지원 여부 확인해서 다른 페이지로 이동하기 입니다.
|
| 20332 |
JavaScript
하부메뉴가 보였다가 숨겨졌다 하는 토글버튼 입니다.
|
| 20331 |
JavaScript
개별 페이지에 인덱스로 거쳐 들어오게 하기 입니다.
|
| 20330 |
JavaScript
랜덤으로 이미지 출력 되기 입니다.
|
| 20329 |
JavaScript
사용자 해상도 알아내기 입니다.
|
| 20328 |
JavaScript
붙여넣기 금지하기 입니다.
|
| 20327 |
MySQL
대소문자 데이터 조회하기
|
| 20326 |
JavaScript
퇴장시 팝업창 한번한 띄우기 입니다.
|
| 20325 | |
| 20324 | |
| 20323 |
JavaScript
시도, 구군, 동 주소 select
|
| 20322 |
MySQL
커리로 DB 테이블 명세서 출력하기
|
| 20321 |
JavaScript
브라우저 해상도 구분없는 절대 x,y 좌표 값 구하기 입니다
|
| 20320 |
PHP
rss 읽어오기 입니다.
|
| 20319 |
JavaScript
자바스크립트로 Ajax 효과내기 입니다.
|
댓글 작성
댓글을 작성하시려면 로그인이 필요합니다.
로그인하기