2010년 7월 30일 금요일

[javascript] 브라우저 높이 구하기

<script>
document.writeln("브라우저의 전체 높이",screen.availHeight); //이것은 해상도의 높이에서 하단의 퀵런치 만큼의 사이즈만큼 빠지는거구요

document.writeln("브라우저의 전체 너비",screen.availWidth); //너비는 해상도와 일치할겁니다.

document.writeln("모니터의 해상도 높이 ",screen.height);

document.writeln("모니터의 해상도 너비 ",screen.width);

document.writeln("브라우저안쪽의 높이 ",document.body.clientHeight); //이것이 브라우저 안쪽의 높이구요
document.writeln("브라우저안쪽의 너비 ",document.body.clientWidth); //이것이 브라우저의 안쪽 너비죠..

document.writeln("문서 높이",document.body.scrollHeight); //이것이 문서 높이죠..
</script>

[javascript] ff에서 불투명 레이어 안먹힐 때

http://www.phpschool.com/gnuboard4/bbs/board.php?bo_table=qna_html&wr_id=111366

 

ff 에서 불투명 레이어 안먹힐 때.

 

.style.opacity = "0.x";

 

 

<div id="opqueLayer" style="display:block";></div>

<div class="layer_pltbody" style="display:block;" id="alertPopup01"></div>

 

<script type="text/javascript">

/* 화면전체를 덮을 영역 계산 */
oDiv = document.getElementById('opqueLayer');
oDiv.style.width="100%";
oDiv.style.height=document.body.scrollHeight;

//alert(document.body.clientHeight);
/* 불투명레이어와 알림팝업을 띄우는 함수 */
//viewAlertLayer01(알림팝업의id)  형식으로 호출하여 사용
obj_alertPop = document.getElementById('alertPopup01');//알림창객체
document.getElementById('opqueLayer').style.display = "block";//불투명레이어보이게함
var ver = getInternetExplorerVersion();
if ( ver>= 8.0 ) {
 obj_alertPop.style.top = (((document.body.clientHeight + (document.body.clientHeight/2)) - (obj_alertPop.clientHeight/2)))+300 + "px";//팝업레이어 topleft의 y좌표
obj_alertPop.style.left = ((document.body.scrollLeft + (document.body.clientWidth/2)) - (obj_alertPop.clientWidth/2))  + "px";//팝업레이어의 topleft x좌표
}

obj_alertPop.style.top = (((document.body.clientHeight + (document.body.clientHeight/2)) - (obj_alertPop.clientHeight/2))) + "px";//팝업레이어 topleft의 y좌표
obj_alertPop.style.left = ((document.body.scrollLeft + (document.body.clientWidth/2)) - (obj_alertPop.clientWidth/2))  + "px";//팝업레이어의 topleft x좌표
/*
obj_alertPop.style.top = ((document.body.scrollTop + (document.body.clientHeight/2)) - (obj_alertPop.clientHeight/2)) + "px";//팝업레이어 topleft의 y좌표
obj_alertPop.style.left = ((document.body.scrollLeft + (document.body.clientWidth/2)) - (obj_alertPop.clientWidth/2))  + "px";//팝업레이어의 topleft x좌표
*/
/* 덧글이열렸을 때 화면전체를 덮을 영역 재계산 */
oDiv = document.getElementById('opqueLayer');
oDiv.style.width="100%";
oDiv.style.height=document.body.scrollHeight;

/* 팝업내의 닫기/취소 버튼을 눌렀을 때 레이어를 닫기위해 사용하는 함수 */
function hideAlertLayer01(objName) {
 document.getElementById(objName).style.display = "none";
 document.getElementById('opqueLayer').style.display = "none";
}
</script>

 

2010년 7월 29일 목요일

2010년 6월 8일 화요일

[잡담] 검색의 비애

쇼핑클럽

'핑클'

 

검색 이후에...

 

한정식집 이름...'하련지'새로운 검색 키워드로~~

 

일부러 하련지로 한듯...

파도타기 절로 나옴.. ㅋ.

 

[잡담] 손님을..?

이런 음식점 이름도 첨본...

 

웃껴 죽..

4G다

어제 저녁부터 시작해서..

아이폰 4G 검색열풍..

오늘 새벽 1시정도에 검색해봤는데...

아침에 드디어 기사가 뜨기 시작.

네봉 실급검 1위에 등극...

 

아아... +ㅁ+ 4G 빨리 나오거라..

 

 

 


 

 


 

 

애플 아이폰4G feature 페이지 : http://www.apple.com/kr/iphone/features.html

 

Like1)

카메라 500만화소, 전/후방 카메라렌즈

3G에 전방 렌즈가 없어 아쉬웠는데 화상 통화 기능과 함께

보완된 점이라..사진좋아하는 나로써는 일단 만족.

 

Like2)

라디오 기능

이제 라됴 청취도 가능~~

 

Like3)

멀티태스킹

3G 잠깐 써봤는데...멀티태스킹이 안되서 불편한 점이라면

어플 하나 실행하고 쓰다가... 다시 메인이나 어플 검색 화면으로

돌아가서..또 골라줘야 되고

그게 매우 불편하긴했었는데..

이기능도 보완되었다니...

음..아무래두 4G가 수퍼폰이 되려는듯하다.

 

 

2010년 6월 7일 월요일

2010년 6월 4일 금요일

[Planning] 잡생각 대마왕 훈련

[Chapter 1. 잡생각 대마왕]

 

1-1

지하철을 타고 집에 가는 길...

지하철 문옆에 달려있는 광고를 보고

모델의 몸매를 잠시 감상 한 후

메이크업 상태도 꼼꼼히 보고 ..

비판할점이 없나 찾아보고..

광고 카피나 광고 컨셉에 대해서 생각해보고

a.에이 별로네

b.어쭈 좀 괜찮은데

c.Coooool~

 

1-2

걸어다는 사람들의 뒷모습을 보면서

저 사람은 어딜 가고 잇을까?

저사람 앞모습은 어떻게 생겼을까?

저 옷과 저 가방을 든 건..

저 사람의 취향과 목소리는 어떨까 ?

저 사람이 저 길을 저렇게 걷고 있는 이유는 무엇이며

누구를 만나러 가는 것일까?

지쳤을까 혹은 생기발랄할까?

 

1-3

출퇴근길의 루트

신논현으로 갈까

학동으로 갈까

논현으로 갈까

신논현에서 골목으로 걸어갈까

신논현에서 큰길로 걸어갈까

1번째 블록에서 골목으로 꺾을까

2번째 블록에서 골목으로 꺾을까

따거운 햇살을 수첩으로 가릴까

그늘로 갈까

건물의 그림자를 찍을까 말까

나뭇잎의 그림자를 찍을까 말까

천천히 걸을까 뛸까

마주오는 사람의 얼굴을 쳐다볼까 말까

 

직장인의 하루

2010년 5월 25일 화요일

BM 방법론

출처 : http://blog.naver.com/yuki6174?Redirect=Log&logNo=10042886191

 

 

웹기획의 기본 - 사용자 경험(UX)의 5가지 계층 오래가는 웹기획& UX디자인

17) 웹기획의 기본 - 사용자 경험(UX)의 5가지 계층 오래가는 웹기획& UX디자인

이번 강좌에서는 웹 상의 사용자 경험을 5개의 계층으로 정리한 Garrett의 그림을 소개합니다.

이 그림은 웹 사이트를 구성하는 구조를 설명하기 위해서 가장 많은 사람들이 인용하는 그림으로 많은 사람들에게 인정을 받을 만큼 잘 구성된 다이어그램입니다. Garrett은 이 그림을 경험디자인의 요소(번역판)라는 책에서 상세히 설명하고 있습니다. 추가 설명이 필요하신 분들은 책을 보시면 될 것 같습니다. 다만, 책의 설명이 자세하지 못하고 다양한 측면을 개념적으로만 담고 있어서 이 한권으로 내용을 깊게 이해하기는 어렵습니다.

이 그림을 만든 Garrett은 최근에 Experience Design을 설명하는 다이어그램을 발표했는데, 그에 대해서는 이후 강좌에서 설명하도록 하겠습니다.

 


[오래가는 웹기획 & UX 디자인]

17) 웹기획 기본 이론 - 사용자 경험(UX)의 5가지 계층

이번에는 사용자의 경험을 5가지 계층으로 나눈 Jesse James Garrett의 그림을 소개한다. 웹 사이트가 사용자에게 전달되는 것은 아래와 같은 5가지 계층에 기반한다. 사용자는 눈에 보이는 요소들과 함께 보이지 않는 구조와 범위, 전략 등을 함께 경험하게 되며, 이런 5가지 계층이 웹 상의 사용자 경험을 만들어내게 된다. 
 

image035.PNG


그림 1-9 사용자 경험의 5가지 계층[1]

구조적인 측면에서 웹 사이트를 크게 정보(Information) 중심의 사이트와 태스크(Task) 중심의 사이트로 나눌 수 있다.

정보(Information) 중심의 사이트는 사이트의 목적이 정보 자체를 전달하는 것인 경우에 해당한다. 이 경우 사이트에서 중요한 점은 다양한 정보를 빠르고 정확하게 전달하는 것이다. 그래서 사용자들이 어떤 정보를 원하는지에 대한 요구사항을 수집하고, 정보를 어떻게 구성할지 결정하는 인포메이션 아키텍처를 설계하는 것이 중요하다. 정보의 구조를 만든 다음에는 그 정보들에 접근하는 길을 설계하는 내비게이션 디자인이 중요해진다.

태스크(Task) 중심의 사이트는 정보의 전달보다는 특정한 업무를 처리하는 것이 중요한 사이트이다. 정보 중심의 사이트는 각각의 정보들을 이용해서 이해하기 쉬운 페이지를 만들고 그 페이지를 연결하는 것이 중요한 반면, 태스크 중심의 사이트는 하나의 페이지에서 다양한 인터랙션이 일어나므로 그런 인터랙션을 어떻게 효율적이고 사용하기 쉽게 설계할 것인지가 중요하다. 또한, 정보 중심의 사이트에서는 사이트의 콘텐트에 대한 요구사항이 중요하지만, 태스크 중심의 사이트에서는 사용자가 어떤 기능을 필요로 하며 설계된 기능을 자연스럽게 사용할 수 있는지 조사하는 것이 중요하다.

이 그림에서 아래에 있는 전략과 범위 계층은 추상적이고 개념적인 정의들을 내리는 계층이고, 그 위에 있는 구조, 윤곽, 표면 계층으로 갈수록 점점 더 구체적인 실체를 만드는 계층이다. 표면 계층에서 이루어지는 비주얼 디자인은 이전의 설계 단계에서 정의된 내용을 디자이너가 시각적으로 디자인을 하는 과정을 이야기한다. 웹사이트의 사용자 경험은 이런 5가지의 계층을 거쳐서 설계되고 만들어진다.

사용자 경험 계층 그림은 이전에 소개한 웹사이트의 3가지 목적과도 연관이 될 수 있다. 웹사이트의 3가지 목적으로 소개한 정보 전달, 작업 처리, 프로모션 중에 사이트를 설계하는 구조적인 측면을 강조할 경우 정보 전달과 작업 처리를 기준으로 사이트를 나눌 수 있다. 정보 전달 목적은 정보 중심의 웹 사이트와 연관되고, 작업 처리 목적은 태스크 중심의 웹 애플리케이션과 연관된다.
 

사용자 경험의 5가지 계층

사용자 경험의 5가지 계층에서 정의, 설계 되는 내용들은 다음과 같다.
 

  • 표면 – 이미지와 텍스트 등 전체 요소 배치, 시각적 마무리
  • 윤곽 – 버튼과, 탭, 이미지, 텍스트 블록에 대한 배치
  • 구조 – 사이트의 추상적인 형태를 정의
  • 범위 – 사이트에서 제공할 기능과 태스크, 콘텐트의 범위를 정의
  • 전략 – 사이트에서 사업자와 사용자가 추구하는 목표 정의


각 계층별로 정의되고 설계되는 내용을 좀 더 자세히 살펴보기로 하자. 웹 상의 사용자 경험은 태스크 중심 사이트와 정보 중심 사이트에서 차이가 난다. 전략 계층에서 고려되는 사용자 요구와 사이트 목표는 사이트 형태와 상관없이 공통적으로 중요한 요소들이다. 이후의 범위, 구조와 윤곽 계층에서는 사이트의 형태에 따라 중요한 요소들에 차이가 생긴다. 태스크 중심의 사이트는 기능에 대한 요구사항과 인터랙션 디자인, 그리고 인터페이스 디자인이 더 중요하고, 정보 중심의 사이트는 그보다 콘텐트 요구사항, 인포메이션 아키텍처, 그리고 내비게이션 디자인을 중요하게 고려해야 한다.


하나의 사이트를 만들기 위해서는 그림에서 소개한 5가지 계층의 다양한 요소들을 잘 조화시켜야 한다. 일반적인 사이트들은 전달할 정보와 수행할 태스크가 혼합된 구조를 가지게 되므로 설계시에도 어느 한쪽만을 집중적으로 고려해서는 안된다. 그림에서 보이는 특정 영역에 지나치게 치우치지 않고 전체적으로 잘 조화될 수 있게 설계하는 것이 중요하다.

이렇게 각각의 계층에서 설계되는 요소들을 간단하게 아래와 같이 정리했다.

계층

태스크 중심 사이트
(웹 애플리케이션)

정보 중심 사이트
(웹 사이트)

5. 표면

비주얼 디자인

인터페이스 요소들의 시각적인 배치
주요 요소에 대한 시각적인 강조로 시선 유도, 통일성과 일관성 유지

4. 윤곽

인터페이스 디자인

인터페이스 요소들과 GUI 구성 요소들을 배치
버튼, 선택, 입력필드 등의 인터페이스 요소에 대한 일관된 사용

내비게이션 디자인

정보를 편리하게 찾을 수 있게 인터페이스 요소들을 배치
전역, 지역, 보조 내비게이션 설계
사이트 길 찾기의 기본 구조 제공

인포메이션 디자인

사용자의 이해를 위해 콘텐트 요소들을 배치
의미에 맞게 콘텐트 그룹화. 사용자들의 사고방식을 배치에 반영

3. 구조

인터랙션 디자인

기능 요구사항의 세부 태스크에 대한 동작 설계
태스크를 수행하고 완료하는 과정에 대한 패턴과 순서 정의

인포메이션 아키텍처

원하는 콘텐트를 편리하게 이용할 수 있게 콘텐트 공간을 설계
정보를 전달하는 과정에 관계되는 패턴과 순서 정의

2. 범위

기능 요구사항

사용자 요구사항 충족을 위해서 필요한 기능 범위 정의
각각의 기능에 대한 세부 태스크 정의,
태스크에 대한 세부 스펙 정리

콘텐트 요구사항

사용자 요구사항 충족을 위해서 필요한 콘텐트 요구사항 범위 정의
제공할 콘텐트 범위, 형태와 작성 프로세스 및 관리 주체 등을 정의

1. 전략

사용자 요구

사이트에서 사용자가 원하는 가치를 정의
사용자 리서치와 자료 분석을 통해 사용자의 요구사항 파악

사이트 목표

사이트에서 추구하는 사업적인 가치와 전략적인 목표를 정의
사이트의 성격, 제공할 경험의 형태, 수익구조 등을 정의

 

 Garrett의 이 그림은 웹 상의 사용자 경험(UX)을 눈에 보이는 표면적인 부분까지 정의한 그림이다. 사용자 경험(User Experience)을 좀 더 넓은 의미에서 정의한 내용은 이후 소개될 UX 디자인 관련 내용을 참고하기 바란다.


 

출처 : http://bahns.net/2642834

 

2010년 5월 19일 수요일

좋은 제안서나 기획서를 쓰기 위해..

좋은 제안서나 기획서를 쓰기 위해서는 많은 시간과 노력이 필요합니다. 특히, 마케팅, 광고, 온라인,브랜드 등 모든 기획자들이 공통으로 갖추어야 될 요건 중 하나가 바로 분석력과 자신의 아이디어를 논리적으로 표현할 수 있는 기획력이 중요합니다.

먼저 좋은 자료를 통해서 이러한 지식을 얻을 수 있는 데 개인적인 견해로 가장 빠른 방법은 역시 기존 기획자들이 현직에서 종사하면서 작성한 기획서 또는 제안서를 많이 보는 것이 가장 좋을 것 같습니다.

사이트를 하나 추천해 드리자면 플랜업 추천합니다.

다양한 사업기획서와 제안서 들을 참고하실수 있을겁니다.
아무리 좋은 아이디어가 있어도 그것을 기획서나 제안서로 잘 정리하지 못한다면 아무 소용이 없죠.

가시면 도움이 되리라 봅니다.

만약 혼자서 제안서를 작성하기가 어렵다면 플랜업 다이렉트 문서대행 서비스라는 것도 있습니다.

현직에 종사중이거나 프리랜서로 사업기획서나 제안서 등의 작성 대행을 연결해주고 하는 곳인데요

 

출처 : http://kin.naver.com/qna/detail.nhn?d1id=4&dirId=40401&docId=35258808&qb=7KCc7JWI7ISc&enc=utf8&section=kin&rank=4&sort=0&spq=1

2010년 5월 17일 월요일

차세대 웹을 선도할 표준 기술 HTML 5 & CSS3 & AJAX

차세대 웹을 선도할 표준 기술 HTML 5 & CSS3 & AJAX

차세대 웹이라면 현재 Web 2.0이라 불리워지는 Rich Client(멀티미디어와 웹 기반 애플리케이션)과 집단 지능, 매쉬업, 소셜 네트워크, 사용자 참여 정보(UCC), 협업, 지능형 웹 등의 특징을 들 수 있습니다.

이러한 차세대 웹을 구현할 기술의 대표적인 기술이 HTML 5와 CSS3 그리고 AJAX라고 할 수 있겠습니다.

AJAX는 W3C와 같은 기관에서 표준으로 지정한 바가 없어서 표준 기술이라고 할 수는 없겠습니다만 업계에서 널리 쓰이고 인정하고 있으므로 현실적인 표준이라고 봐야하지 않을까 합니다.


본 글에서는 웹의 발전에 대한 간략한 소개와 위의 세가지 기술의 역할과 특징에 대해서 이야기 해 볼까 합니다.

두가지 기술은 기존의 비교적 정적이고 단순한 정보를 보는 매체 즉 웹 문서를 보는 HTML 기술과 javascript 기술을 웹 애플리케이션으로서의 기능, 더 나아가 Web 2.0의 포괄적인 요구사항을 효율적으로 지원하기 위해 개선된 최신 기술입니다.


차이점

HTML5는 텍스트, 이미지, 미디어 등의 정보의 구조를 정의합니다.

CSS3는 HTML의 정보를 화면에 표현하는 방법을 정의합니다.

AJAX는 HTML과 CSS의 정보를 조작합니다.

동일한 점

세 가지 기술은 웹을 문서를 보는 매체에서 애플리케이션을 구동하기 위한 기술로 발전 시키기 위한 새로운 표준입니다.


  • 초창기 인터넷은 단순한 텍스트만을 전송하고 볼수가 있었습니다. 단지 전 세계가 하나의 네트웍을 통해서 정보를 공유할 수 있다는 것 만으로 대단한 혁신이었죠.
  • HTML이라는 정보 표현 태그와 모자익이라는 최초의 브라우저가 나와서 글자의 크기와 색깔을 표현하고 이미지를 보여줌으로써 사람들은 또 한 번 경악을 했죠.
  • CGI라는 기술은 수동적으로 문서를 보기만 하던  사용자가 게시판과 같은 프로그램을 통해 웹 서버에 정보를 보내서 저장하고 처리하게 함으로써 사용자 참여가 가능한 웹을 만들었습니다. CGI가 발전하여 요즘의 ASP, PHP, JSP, DotNet 과 같은 전문 서버측 프로그래밍 언어가 되었습니다.
  •  자바스크립트는 웹 페이지의 데이터를 조작할 수 있게 하는 기술로 정적인 HTML 정보가 기능적으로 동작하도록 했습니다.
  •  HTML이 문서의 구조와 스타일을 한번에 처리하다 보니 웹의 문서를 정교하게 다루는 것이 어려워 CSS라는 문서의 모양새만을 전문적으로 처리하는 표준 기술이 나와 자바스크립트와 CSS, HTML을 활용하는 DHTML 기술이 발전하여 정교하고 미려한 웹페이지가 동적으로 사용자와 소통하는 것이 가능해서 웹이 단순한 문서가 아니라 데이터를 처리하고 서비스를 제공하는 웹 애플리케이션이 급속도로 발전하게 됩니다.
  • 웹 애플리케이션이 발전하고 Web 2.0 이 확대 됨에 따라 HTML 자체가 문서를 표현하는 기술이 아닌 애플리케이션의 구조를 처리하는 기능을 포함해야 될 필요성이 커져서 W3C는 문서의 정보만을 정의하는 태그에 멀티미디어와 데이터 처리, 통신 기능을 처리할 수 있는 HTML 5를 정의하고 있습니다.
  • 단순히 다이나믹한 웹을 넘어서 협업과 매쉬업 등의 기능들을 구현하기 위해서 웹문서인 HTML을 처리하기 쉬우면서도 표준화된 프로그램 기술이 발전해야 되었는데 그것이 자바스크립트와 XML 그리고 비동기 통신(하나의 통신이 진행중일때 다른 통신을 추가로 수행 가능함) 기술입니다. 이러한 3가지 요구를 위해 만들어진 것이 AJAX(asynchronous JavaScript and XML)입니다.
  • 이러한 추세에 발맞추어 미려하고 정교한 화면 구성을 위한 CSS3도 만들어 졌습니다.


그럼 차세대 웹을 위한 3가지 기술을 정리해 보겠습니다. 먼저 간단하게 세가지 기술의 역할을 보면

HTML 5은 정보의 구조를 정의하고 그것을 처리합니다.

CSS3는 정보를 미려하고 정교하게 화면에 표현합니다.

AJAX는 정보를 조작하고 다른 서비스들과 XML을 이용하여 통신합니다.


HTML 5

단순히 텍스트와 이미지 정도의 정보를 처리하던 기존 HTML에서 다양한 멀티미디어 정보 표현 : 벡터 이미지(SVG), 동영상(기존에는 ActiveX나 flash 등으로 처리하던 것을 브라우저가 직접 태그를 통해서 처리함)

웹 페이지내에서 다른 서버나 서비스와 통신이 가능하고 사용자 정보를 저장하여 웹 프로그램의 기능을 확대합니다.

CSS3

정교하고 미려한 화면 구성은 물론이고 다양한 효과와 애니메이션까지 지원하게됩니다.

AJAX

단순히 웹페이지 내의 정보만을 조작하던 Javascript나 DHTML 시대를 지나 서버와의 빈번한 통신과 정교한 HTML 구조 조작등이 가능하며 최근 AJAX의 초기 사용 범위를 넘어서 웹 애플리케이션에 필요한 대부분의 기능들을 AJAX로 처리합니다.

 

출처  http://kin.naver.com/open100/detail.nhn?d1id=1&dirId=10402&docId=1320620&qb=aHRtbDU=&enc=utf8&section=kin&rank=2&sort=0&spq=0&pid=f/vsfloi5T8ssuM/4r8sss--490743&sid=S-DASrey8EsAACO-EIk

2010년 3월 17일 수요일

허니와클로버

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

감성으로 똘똘뭉친

허니와 클로버 애니 오프닝!

 


 

2010년 3월 16일 화요일

Hirosue Ryoko - summer sunset

눈빛최고......
폴라로이드에 주목
다재다능한 남자친구는 얼굴이 없는 채로 아이스크림 사주고 운전도 한다
그렇지만 뮤비아닌 히로스에 료코의 라이브는... 참 매가리없지만
세월이 지나도 이 뮤비속의 히로스에료코는 영원히 사랑스러운 소녀임에는 틀림없다!

2010년 1월 21일 목요일

css핵 정리

http://www.nmindplus.com/2006/06/28/css-hack/

css핵 정리

 

Netscape 4 제외시키기

Netscape 4은 media속성값에 “screen”이외의 값이 올 경우 읽어 들이지 못하는 것을 이용한 방법이다.

<link rel="stylesheet" type="text/css" href="/css/style.css" media="all" />

이나

<link rel="stylesheet" type="text/css" href="/css/style.css" media="screen, tv" />

라고 지정할 경우 Netscape 4은 읽어 들이지 못한다.

부분적으로 읽어들이지 못하게 하는 경우에는 Caio’s hack인 /*/*/를 이용한다. 보통 코멘트는 */으로 닫지만 /*/으로 닫게 되면 Netscape 4에서는 인식되지 않는다. 그 뒤에 평상시의 코멘트 /* */를 적어두면 그 뒤의 스타일은 Netscape 4에서도 문제없이 적용된다.

p {
/*/*/ color:white; /* */
}

Mac IE 4.5, Netscape 4 제외시키기

@import룰로 url()함수를 이용하여 외부 스타일시트를 이중인용부호로 지정한다.
Mac IE 4.5는 @import에 url()함수를 이용하는 경우, 단일 인용부호와 인용부호가 없는 것이 아니면 읽어 들이지 못한다. Netscape 4은 @import를 지원하지 않는다.

@import url("/css/style.css")

Mac IE 5 제외시키기

CSS소스 안의 코멘트 서식을 /* \*/ 이라는 방식으로 기술한다. holly hack이라고 하며 그 뒤에 평상시의 코멘트 /* */를 적어두면 그 뒤의 스타일은 Mac IE 5에서도 문제없이 적용된다.

p {
/* \\*/ color:white; /* */
}

Win IE 4~5 제외시키기

셀렉터 바로 뒤에 /**/라고 적는다.

p/**/ { color:white;}

Win IE 4~5, Mac IE 4.5~5 제외시키기

프로퍼티와 값을 구분하는 콜론(;) 앞에 코멘트에 스페이스를 포함하여 /* */라고 적는다.

p { color/* */:white;}

Win IE 4~6, Mac IE 4, Netscape 4 제외시키기

셀렉터 앞에 html>body를 붙인다.

html>body p { color:white;}

Win IE 6 제외시키기

프로퍼티와 값을 구분하는 콜론(;)의 앞에, 스페이스와 코멘트를 /**/라고 적는다.

p { color /**/:white;}

star hack

셀렉트 앞에 *html를 붙이면, Win IE 4~6, Mac IE 4~5 등에는 스타일이 적용되고, 그 외의 브라우저에서는 적용되지 않는다.

*html p { color:white; }

underscore hack

프로퍼티의 가장 앞부분에 언더스코어(_)를 붙이면, Win IE 4~6에서 스타일이 적용되고, 다른 브라우저에서는 적용되지 않는다.

p { _color:white; }

hash hack

프로퍼티의 앞에 샾(#)을 붙이면, Win IE 4~6, Mac IE 5, Opera 7, Mozilla, Firefox에서는 스타일이 적용되고, 다른 브라우저에는 적용되지 않는다.

p { #color:white; }

star 7 hack

셀렉트의 앞에 html*을 붙이면, Win IE 5.5~6, Mac IE 5, Safari 등에서 스타일이 적용되고, 다른 브라우저에서는 적용되지 않는다. html*과 셀렉터사이에 스페이스를 넣지 않는다.

html*p { color:white; }

xmlns hack

속성셀렉터를 이용하여, html요소에 붙이는 xmlns속성을 스타일적용을 위하여 사용하는 방법.
Mozilla, Fire-fox, Opera 7/8, Safari, IE 7 등 속성셀렉터를 서포트하는 브라우저에서는 스타일이 적용되고, 다른 브라우저에서는 적용되지 않는다.

html[xmlns] h1 { color:red; }

:root hack

셀렉터의 앞에 :root를 붙이면, Mozilla, Firefox, Mac IE 5, Safari 등 :root유사클래스를 지원하는 브라우저에만 스타일이 적용되고, 다른 브라우저에서는 적용되지 않는다.

:root h1 { color:red; }

Tantek box model hack

voice-family프로퍼티를 이용한 가장 유명한 박스모델핵.

div#content {
width:500px;
voice-family: "\"}\"";
voice-family:inherit;
width:400px;
}

Win IE 5용 패스필터

@media tty {
i{content:"\";/*" "*/}}; @import '/css/style.css'; {;}/*";}
}/* */

Win IE 5.5용 패스필터

@media tty {
 i{content:"\";/*" "*/}}@m; @import '/css/style.css';/*";}
}/* */

Win IE 5-5.5용 패스필터

@media tty {
 i{content:"\";/*" "*/}}@import '/css/style.css';/*";}
}/* */

모던브라우저용 패스필터

@import "null?\"\{";
@import "/css/style.css";
@import "null?\"\}";

이 이외에도 많은 핵(hack)이 존재한다. CSS Filters (dithered.com)에 다양한 CSS hack이 잘 정리되어 있으므로 참고하시길…

2006년 7월 18일, IE7용의 핵(hack)을 추가.

IE7에만 적용

IE7에만 다른 스타일을 적용하는 방법은 해당 셀렉터의 앞에

*+html body

이나(*+html body는 Opera8~에도 적용되어 버리는 문제가 있기에 *+html>/**/body로 Opera8~ 전용 스타일을 기술하여야 한다. 참조:IE7のCSSバグとOpera CSS Hack)

*:first-child+html

을 기술한 다음 해당 셀렉터와 스타일을 작성하면 된다. 예를 들어 #banner라는 id셀렉터에 적용시키는 경우

*:first-child+html #banner {
      :
  [IE7용 스타일을 기술]
      :
}

라고 기술한다. IE7이외의 브라우저를 위한 원래의 #banner 스타일 설정은 IE7용 스타일 설정 앞에 기술한다(순서가 바뀌면 원하는 효과를 얻지 못한다. 참조:IE7 の CSS ハック)

#banner {
      :
  [IE7이외의 브라우저를 위한 스타일을 기술]
      :
}
*:first-child+html #banner {
      :
  [IE7용 스타일을 기술]
      :
}

IE 6 and below (IE6이하)

* html

IE 7 and below (IE7이하)

*:first-child+html, * html

IE 7 only (IE7전용)

*:first-child+html

IE 7 and modern browsers only (IE7과 모던브라우저)

html>body

Modern browsers only (not IE 7) (IE7이외의 모던 브라우저)

html>/**/body

Recent Opera versions 9 and below (최근의 Opera9이하)
Opera 9와 Safari 동시적용

html:first-child

Safari에만 적용
Opera 9와 Safari 동시적용

/* XXX \*/로 코멘트 아웃하고 html:\66irst-child를 덧붙임으로써 Safari에만 CSS가 적용된다.

/* safari only \\*/
html:\\66irst-child div.globalContainer{
margin: 0 0 0 18px;
}
/* end */

내용중 잘못된 부분이나 수정, 추가가 필요한 부분이 있으시면 의견 부탁드립니다.

Opera와 Safari용 css hack이 동시 적용이 되는 문제를 김진태님이 지적해 주셨습니다.

 

2010년 1월 5일 화요일

height 100% 높이의 레이아웃잡기

오랜만에 Markup을 할 일이 있어 HTML과 CSS를 다루는데 Javascript로 구현 했던 레이아웃을 정말 단순히 HTML과 CSS로 구현 하려니깐 공수가 장난이 아니었다. 하지만 인터넷에 수많은 고수분들이 잘 정리 해준 덕분에 잘 조합해서 구현했다.

 

사전 조건

DOCTYPE을 사용 할 것

IE, Firefox, Opera, Safari 등 모든 브라우저에서  Standard Mode 혹은 Almost Standard Mode가 되는 조건은 아래 와 같다.

 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">

위와 같이 HTML Page에 첫번째로 선언하면 기본적인 BoxModel Problem을 해결 할수 있다.

다른 Doctype도 많지만 가장 무난히 호환성을 유지해 나가면서 표준을 지키고 여러 브라우저에서 동일하게 표현 하기에 제일 좋은 Doctype이라 생각이 든다.

 

첫 번째 조건

높이가 100%인 div 영역

height: 100%;

보통 div element에 위와 속성을 주면 안된다 ㅡㅡㅋ

원인을 찾아 보니깐 저 조건이 되기위해서는 parent element의 height의 영향을 받기 때문이다.

그래서 해결책은 다음과 같다.

 html, body {

    height: 100%;

}

위와 같이 선언을 해두면 div element의 100% height 속성이 제대로 표현된다.

 

두 번째 조건

header(헤더) 와 footer(푸터) 영역 잡기

헤더는 상단에 붙어 있어야 하고 푸터는 하단에 붙어 있어야 한다. 가운데 영역만 크기에 따라 늘어나고 줄어든다.

container(컨테이너)가 min-height 100% 속성을 갖게 되면 나머지 헤더와 푸터 영역 만큼 스크롤이 생기는데 이를 막기 위해 마이너스 margin을 사용한다. 헤더와 푸터 영역 만큼 마이너스 margin값을 주면 스크롤은 사라진다. 그리고 헤더는 아래 나온 element들 보다 위에 보여야 되기 때문에 position속성에 relative 값을 할당하고 z-index에 값을 할당한다.

#header {
    height: 100px;
    background: #ddd;
    position: relative;
    z-index: 1;
    width: auto;
}

 

#container {
    min-height: 100%;
    margin: -100px 0 -50px;
    width: auto;
}

#footer {
    height: 50px;
    background: #ddd;
}

IE에서는 min-heigth 속성을 지원하지 않는다. 이를 해결하기 위해 height 속성에 100%를 주면 IE는 min-height와 같은 역할을 한다.

 

/* IE Hack */
*html #container {
    height: 100%;
}

세 번째 조건

컨텐츠 영역이 헤더와 푸터에 가려진다. 보통 이런 경우 padding 속성을 활용한다. padding을 이용하면 컨텐츠가 보이는 영역을 재 설정을 할수 있기 때문에 헤더와 푸터 영역만큰 padding 값을 contents-box영역에 준다.

 .contents-box {
    padding: 100px 0 50px 0;
}

네 번째 조건

가변 2단 구조를 하기 위해서 block element인 div에 float 속성을 줘서 해결한다.

 

.snb {
    background: #00dfee;
    float: left;
    margin-right: -200px;
    width: 200px;
    height: 200px;
}

.contents {
    margin-left: 200px;
    background: #00ffee;
    height: 500px;
}

float 속성은 다음에 나오는 모든 element에 계속 영향을 준다. 이를 끊어주는 element를 넣어서 float를 clear한다.

 

.clear {
    clear: both;
    display: block;
    float: none;
    font-size: 0 !important;
    height: 0;
    line-height: 0 !important;
    margin: 0 !important;
    overflow: hidden;
    padding: 0 !important;
    width: 100%;
}

Full Source Code

HTML Code

 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html>
    <head>
        <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
        <link rel="stylesheet" type="text/css" href="./css/default.css" />
        <title>높이 100% 가변 2단 페이지</title>
    </head>
    <body>
        <div id="wrap">
            <!-- Head Start-->
            <div id="header">Header</div>
            <!-- Head End-->
            <!-- Body Start-->
            <div id="container">
                <div class="contents-box">
                    <div class="snb">Left</div>
                    <div class="contents">Right</div>
                    <div class="clear"></div>
                </div>
            </div>
            <!-- Body End-->
            <!-- Footer Start-->
            <div id="footer">Footer</div>
            <!-- Footer End-->
        </div>
    </body>
</html>

CSS Code

 /**
 * @author niceilm
 */

/* Type Selector */
* {
    margin: 0;
    padding: 0;
    font-style: normal;
    font-family: 굴림, Gulim, 돋움, Dotum, AppleGothic, Sans-serif;
}

img, fieldset {
    border: none;
}

hr, legend {
    display:none;
}

li {
    list-style: none;
}

a {
}

a:visited {
}

a:hover, a:active, a:focus {
}

html:first-child select {
    padding-right: 6px;
    height: 20px;
} /* Opera Fix */
option, x:-moz-any-link {
    padding-right: 4px;
} /* Firefox Fix */
option, x:-moz-any-link, x:default {
    padding-right: 0;
} /* Firefox Fix */

 

/* Layout Selector */
html, body {
    height: 100%;
}

#wrap {
    height: 100%;
    width: auto;
}

#header {
    height: 100px;
    background: #ddd;
    position: relative;
    z-index: 1;
    width: auto;
}

#container {
    min-height: 100%;
    margin: -100px 0 -50px;
    width: auto;
}

/* IE Hack */
*html #container {
    height: 100%;
}

#footer {
    height: 50px;
    background: #ddd;
}

.contents-box {
    padding: 100px 0 50px 0;
}

.snb {
    background: #00dfee;
    float: left;
    margin-right: -200px;
    width: 200px;
    height: 200px;
}

.contents {
    margin-left: 200px;
    background: #00ffee;
    height: 500px;
}

.clear {
    clear: both;
    display: block;
    float: none;
    font-size: 0 !important;
    height: 0;
    line-height: 0 !important;
    margin: 0 !important;
    overflow: hidden;
    padding: 0 !important;
    width: 100%;
}

 

참고사이트

http://html.nhndesign.com

 

참고서적

웹표준 완전정복 세트 (웹 표준 + 방탄웹 + CSS 마스터 전략)

Dan Cederholm,Andy Budd | 박수만 옮김

에이콘 2007.06.18

 

margin과 padding을 잘 활용하는 것이 관건이였다. BoxModel에 대한 이해가 무엇보다 중요하다.

다들 많은 도움이 되길 바란다. 

 

http://cafe.naver.com/webprogrammer2/89