IE 코멘트 핵 소개
Tuesday, July 5, 2005 
표준을 구연하는데에 쓰이는 해킹, 핵을 쓰는것이 CSS 이던 XHTML 부분이던 과연 좋은것인지 안좋은 것인지는 개개인의 판단과 기준에 따라서 바뀌는 부분입니다. 하지만, 아직 완벽하지 않은 표준의 태두리에서 그 태두리 안에 들어가기 위해서는 어쩔수 없는 부분일 수도 있겠습니다.
핵 사용의 정당성
A hack is a way to fool browsers.
-핵은 브라우저들을 놀리는 방법이다. (각 브라우저가 어떤부분이 약한지를 알아서 그 부분을 꼬아서 편법을쓴다고 해석할수 있슴)
A workaround is a way to fool rendering problems, and minimize the affected browsers.
-workaround, 즉 막노동, 뺑 돌아가는 일을 사용하여 렌더링 문제를 꼬는 방법으로 영향받는 브라우저가 적게한다. (CSS 자체가 어떻게 행동하는지를 더 자세히 코딩하여 제어함으로 브라우저가 읽을시에 오해가 적도록 하게하는법. 예로 3+2=5 라고 표현하는 부분이 오해가 생길만 하다면 1+1+1+1+1=5 라고 지정해 주는것이 되겠슴)
그리고 WebGraphics 블로그에서는 3가지 과정을 통해 핵을 사용하도록 권하더군요.
- If we know a bug, we can sometimes prevent it - 버그를 알고 있으면 가끔은 미리 예방을 할수 있다.
- If it isn’t possible, we can use a workaround - 그것이 가능치 않다면 막노동이지만 더 자세히 표현하여 막는다.
- If we tried everything without success, we can use a hack - 이 모든것들을 해 보아도 되지 않을시에 비로소 핵을 고려해 본다.
제가 여러포스팅을 통해 CSS 핵을 소개해 드렸지만 workaround 될만한 것들도 나눌수 있었으면 좋겟네요. 참 많이 배우고 느낄만한거 같습니다. 일단 핵의 사용과 그것의 목적등을 나누고 싶었습니다.
아무튼 이번것은 workaround가 아닌 핵입니다만, 이것은 css 핵이 아닌 xhtml 핵입니다. 마이크로소프트에서 이 부분이 가능하도록 배려(?) 해주었네요. 기본 형식은 이러합니다.
-
IE 핵의 기본형식
.
<!--[if IE]> <link type="text/css" media="screen" href="style.css" /> <! [endif] -->“IE 일때는 style.css 를 읽어라” 라는 뜻입니다. 아시다시피 xhtml 의 코멘트는 <!– 으로 시작합니다. 그리고 코멘트가 끝날때에는 –> 로 끝이나죠. 이 사이에 [if IE], [endif] 등을 넣어서 핵으로 인식되도록 하는 방법입니다.
<!--[if IE]> <style type="text/css"> #content { width: 550px;} </style> <![endif]-->IE는 박스모델의 문제가 있으니 IE에서만 읽을수 있도록 content 라는 id 의 div 를 550px 로 설정해 준 부분입니다. 물론 이부분은 xhtml 안에 들어가는 부분입니다.
저것은 모든 IE 를 통틀어 지정해 주는 부분이고 버전에 따라서 지정을 해줄수 있습니다.
-
IE 버전에 따라 지정
IE 바로 다음에 버전을 넣어주면 됩니다
<!--[if IE 5.0]> <h3>THIS IS IE 5.0</h3> <![endif]-->위의 <!–[if IE 5.0]> 부분에 IE 뒤에 5.0 이 버전을 나타냅니다. 6.0 이 될수도 있고, 5.5 도 될수 있겠네요. “THIS IS IE 5.0″ 부분은 인터넷익스플로러 5.0 에서만 보입니다.
-
IE 의 특정 버전만 선택하지 않기
불린Boolean 의 ! 느낌표를 써주어 부정을 넣을수 있습니다.
<!--[if !IE 5.0]> <h1>모든 브라우저에서 보이지만 ie5.0에서만 안보입니다.</h1> <![endif]-->if IE 사이에 느낌표 ! 가 들어가서 if !IE 가 되면 뒤에나온 버전만 빼달라는 것입니다.
-
IE 버전들을 포괄적으로 선택하기
버전들을 포괄적으로 선택이 가능합니다. 버전 5.5 이상, 버전 6.0 이하 이런식으로 말이죠. 그리 어렵지는 않습니다.
<!--[if gte IE 5.5]> <style type="text/css"> .h2 { font-size: 1.2em;} </style> <![endif]-->gte 라는 부분이
IE 와 버전 사이에 들어가 있습니다.if 구문 다음에 들어갔습니다. 이 gte 는 “Greater Than or Equal to” 를 줄인것으로 이상 을 뜻합니다. 즉 5.5 도 포함해서 그 이상이죠. 이 말고도 gt, lt, lte 가 있습니다.gt greater than - 그보다 높은버전 if IE gt 5.0 은 5.0보다 높은, 5.1부터 그 이상 gte greater than or equal to-그 이상. if IE gte 5.0 은 5.0을 포함한 그 이상. lt less than - 보다 낮은 버전. if IE lt 6.0 - 6.0보다 낮은 버전들. 5.5 5.0등 lte less than or equal to - 그 이하버전 if IE lte 5.5 - 5.5을 포함한 이하버전 버전을 직접 정하는 것보다 이렇게 포괄적으로 선택하는것이 더 나은 방법일겁니다. 특히 3px 버그나 박스모델 버그는 <!–[if lte IE 5.5]> 를 써 주어 5.5 이하버전들을 선택해 주면 되겠네요.
표준을 위한 핵. 그것은 편법입니다. 편법을 많은곳에서 사용은할수 있지만 권장하는 방법은 아닙니다. 하실수 있다면 그 문제를 돌아서 가더래도 핵이아닌 방법으로 해결하시면 좋겠습니다. padding 보다는 margin 의 사용을 늘린다던지 하는 방법이 그리합니다. 또한 그것이 안될경우 사용해 볼수 잇는 여러 workaround를 곧 나눌수 있으면 좋겠네요.
IE conditional comment hack 참고:
http://www.quirksmode.org/css/condcom.html
http://virtuelvis.com/archives/2004/02/css-ie-only
CSS hacks and filters














Hooney
July 5th, 2005 at 5:14 pm 인용
css 역시 하나의 비헤비어이기에, w3c 권고안에 맞도록 랜더링할 수 있는 javascript를 사용하는 게 좋을 것 같습니다.
각 브라우저들의 렌더링 엔진이나 기타 특수성은 인정한다고 하더라도, css2~3은 꼭 지원했으면 좋겠습니다. css로 웹문서를 만든다는 것 자체가 쉽고 빠르게 만든다는 것을 의미하잖아요.
브라우저들이 w3c 권고안을 지키면, 전세계 많은 사람들이 쉽고 빠르게 웹문서를 만들 수 있을 거라 생각합니다. ㅎㅎ (먼말을 쓴건지.. ㅜㅜ)
[Reply]
ceprix
July 6th, 2005 at 12:22 pm 인용
아하.. 일몰님, 도움이 많이 되었습니다. IE의 CSS 핵은 어느정도 알고 있었는데, XHTML 핵에 대해선 별로 신경을 안 썼던 것 같네요.
개인적으로 이러한 IE 핵이 필요한 이유는, 제 블로그에 동영상 파일 (주로 QuickTime)을 많이 삽입하는데, 알다시피 ‘embed’ 태그는 XHTML에서 인증하지 않기 때문에 ‘object’만 써야 합니다. 그래서 IE가 읽을 수 있는 ‘object’를 사용할 때, 다른 브라우저 (모질라 계통)가 읽지 못하고, A List Apart에 소개된 ‘object’ 방법을 사용할 때는 IE에서 읽지를 못하니 천상 두 개의 ‘object’를 같이 쓰는 수 밖에 없습니다.
그런데 문제는 Safari가 예전에는 IE의 ‘object’를 읽지 못했는데, 언제부턴가 (아마 1.3/2.0 버전부터인 듯) 이것도 읽고, ALA의 ‘object’도 읽는 겁니다. 따라서 ALA의 ‘object’는 IE에서만 안 뜨게 하고, 동시에 IE의 ‘object’는 IE에서만 (Safari 때문에) 뜨게 해야 하는 해결방안이 나오는 셈이죠. 그런고로 IE의 CSS/XHTML 핵이 필요한 겁니다.
정말 길게 썼는데 읽는 분들 입장에서 정리가 될려나 모르겠습니다. 죄송합니다. ㅡㅡ;
[Reply]
일모리
July 6th, 2005 at 3:36 pm 인용
hooney// 이번에 개편하는 테마가 말씀하신 js 사용하셔서 구연하시는거죠? 기대가 됩니다. 웹표준이라는 거 자체가 목적의식을 똑바로 하는것 부터이니 그것부터 시작하면 후니님 말씀대로 쉽고 편하게 제작이 가능하겠네요. 저도 하고 있으니,,, ㅡㅡ;;
ceprix//네 이해갑니다. ㅎㅎ 저도 png 의 알파지원하지 않는 ie 를 돌아가려고 사용도 하고 그랬거든요. ie 골치덩이 어찌할지~
[Reply]
A2
July 6th, 2005 at 9:33 pm 인용
저는 최대한 핵을 쓰지 않아도 문제가 없는 것들만 골라쓰려고 노력합니다.
[Reply]
영팔
January 12th, 2006 at 1:36 pm 인용
질문이 하나있는데요. IE에서만 못읽고 다른 모든 브라우저에서는 읽히게 하는 hack이 있을까요?
“IE 의 특정 버전만 선택하지 않기”를 적용해봤는데, 이건 IE버젼들 안에서만 해당되더군요..
현재
로 묶어서 사용중이긴 한데.. Validation에서 걸리더라구요..[Reply]
영팔
January 12th, 2006 at 1:40 pm 인용
아.. code태그가 안먹히나보네요..”현재” 와 “로”사이에…
<comment></comment> 가 들어있습니다.
좋은글 잘 봤습니다
[Reply]
ssamss
August 3rd, 2008 at 3:41 am 인용
조금씩은(?) 헷갈렸었는데 잘 정리된글 감사드립니다~^^
그런데 테스트 해보다 의문이 생겨서 그러는데 혹시
‘ if IE lt 6.0 - 6.0보다 낮은 버전들. 5.5 5.0등 ‘
에서 if IE lt 6.0 이 아니고 if lt IE 6.0 아닌지요..??
[Reply]
ssamss
August 3rd, 2008 at 3:44 am 인용
아 설명을 다시 읽어보니 그부분만 순서가 바뀐상태네요^^
혹시라도 저처럼 헷갈리시는분 계실지 모르니 수정해주시면 좋겠네요~
[Reply]