IE 에서의 padding 값 인식 에러
Friday, June 17, 2005 
실제로 홈페이지를 제작하시다가 격는 아주 머리아픈 경우입니다. 바로 인터넷 익스플로러, Internet Explorer, IE 에서 원래 CSS 에서 의도한대로 렌더링을 하지 않고 다르게 이해를 하는경우입니다. 많은경우 DIV가 깨지기도 하는데요, 이 이유와 해결책을 잠깐 보겠습니다.

보시다시피 css 에서 제작자가 의도한데로 width 를 정해놓지만 ie 에서 읽어들일때(IE 5.x 와 quirks 모드의 IE6)에는 그 width 안에 padding 값과 border 값이 같이 계산되어서 렌더링이 됩니다.
*quirk 모드 는 DOCTYPE 이 제대로 잡히지 않아 렌더링이 올바르게 되지 않는것을 일컫습니다. DOCTYPE 만 제대로 된다면 IE6도 렌더링은 제대로 되게 됩니다.
예를 들어보겠습니다.
<div id=”content”></div>
를 해 놓고 너비는 300px 에다가 padding-left 를 한 20px 로 주고 싶습니다.
그렇다면 보통의 css 렌더링은 너비 300px + padding값 20px 을 주니 총 너비는 320px 로 측정해야겠죠. 하지만 IE 에서는 너비값 300px 에다가 그 안에 padding값 20px 이 들어가니 총 너비는 그대로 300px 입니다. 그리고 그 안에 div는 작아졌겠죠. 280px 로 말입니다. 이것을 고치는 법은, css 를 핵 하는 법입니다. 계산을 거꾸로 해서 오히려 IE 에서는 너비를 320px 로 이해하게 만들면 20px 로 padding 을 주고 나머지 300px 은 div 내용이니 원래의 의도대로 렌더링을 해주니까요.
CSS Hacks and Filters 와 타 ALA 같은 CSS 페이지에서 설명해주고 있는 방법을 소개해 드립니다.
일단 원래의 css 코딩을 적습니다.
#content {
width: 300px;
padding-left: 20px;
}
그리고 다음줄에 ie 해킹을 넣습니다.
*html #content {
width: 320px;
/*padding은 안적어도 되는것이 위에서 이미 불러주었기때문에 괜찮습니다*/
}
이 해킹은 *html 을 붙임으로써 다른 브라우저는 인식을 못하고 ie 5.x 버전에서 이해를 하게 되는 부분입니다. 하지만 문제가 있습니다. 이 해킹은 모든 ie 브라우저에 적용이되면서 Mac 에서의 ie 5와 그 이상버전에게 적용이 되어버립니다. Mac 의 Internet Explorer 5와 그 이상, 그리고 IE 6는 은 원래가 css 의도대로 렌더링이 되거든요. 그럼 그 버전에서는 다시 깨지게 됩니다. 그러니, 위의 코딩에다 한줄을 더 넣어서 이렇게 넣습니다.
*html #content {
width: 320px;
w\idth: 300px;
}
w\idth 부분이 들어갔죠? 백슬래쉬\ 를 넣으므로써 고쳐질수 있습니다.
정리합니다. padding은 ie 5.x 안에서 다르게 인식되므로 약간의 해킹이 필요합니다. 그래서 예로 width: 300px 에 왼쪽 padding 이 20px 일 경우 이렇게 적습니다.
#content {
width: 300px;
padding-left: 20px;
}
* html #content {
width: 320px; /* IE 5.x 버전이 인식 그리고 mac ie, ie6도 인식 */
w\idth: 300px; /* Mac ie 와 IE6만이 다시 랜더링 */
}
border 도 ie 에서는 width 안에 포함되니 border 쓰실때에도 잘 크기를 조절하셔서 쓰시기 바랍니다.
height 을 Mac 의 IE 만 이해하게 하려면 width 는 w\idth 였듯이 he\ight 으로 쓰시면 됩니다.
css 사전 및 초보 소개 부분을 적다가 daybreaker님 질문으로 부랴부랴 포스팅합니다. 서둘러 적다보니 에러부분있으면 지적부탁드립니다. 그리고 crizin 님덕분에 더 자세히 설명할수 있었으니 감사드립니다.














jeolee
June 17th, 2005 at 9:50 am 인용
멋집니다. 한번에 이해가 됐어요.
아직 한가지 모르겠는데 w\idth 말이죠. 역슬래시, 이건 어떤 역할을 하는거죠?
[Reply]
일모리
June 17th, 2005 at 10:17 am 인용
역슬래시를 주면 PC IE 5.x 버전이 그 명령을 인식하지 못하게 됩니다. 그리고 뛰어 넘어가 버립니다. 그리고 역슬래쉬를 줄때에는 i 앞에 하는것이 최고라고 하네요.
[Reply]
crizin
June 17th, 2005 at 11:07 am 인용
w\idth 같이 쓰는건 몰랐네요.. 좋은거 알고갑니다 ^^
근데 he\ight, l\ine-height, vert\ical-align 이런식으로 쓰면 되는건가요? 또 (쓸일은 없겠지만) float 같은건 그냥 f\loat 이렇게 써도 상관 없는건지..
던져주신 링크를 한참 봤는데도 쉽게 찾을 수가 없네요
[Reply]
일모리
June 17th, 2005 at 11:14 am 인용
네 그렇습니다. 보통 코멘트처럼 쓰는경우도 많지요
/* 코멘트 역슬래쉬 \ */.hi {height: 300px;}
/* 역슬래쉬로 끝났슴 */
[Reply]
jay
June 17th, 2005 at 1:31 pm 인용
이 boxmodel hack은 정확히는 Tan Hack이라고 불리웁니다.
backslash parsing버그에 대해 좀더 이야기 드리자면
1. ie5.x(win)는 \가 들어간 property를 싫어라해서 읽을수 없습니다만 맨앞에 \가 들어가면 이를 무시하고 제대로 읽어냅니다.
2. 이 hack에서 \는 property중간에 와야하며 a,b,c,d,e,f 의 앞에 쓰이면 헥스코드로 인식되어지므로 주의해야합니다.
3. 오페라5의 경우 IE5.x와 같은 parsing bug가 있지만 박스모델은 제대로 지원합니다.
이 외의 여러가지 boxmodel hack을 보실수 있는 페이지 링크드립니다.
http://css-discuss.incutio.com/?page=BoxModelHack
[Reply]
일모리
June 17th, 2005 at 1:53 pm 인용
^^ 한스텝 더 나가서 설명해 주셨네요 멋쟁이 jay님이십니다. ㅎㅎ
네, Tan hack은 Tantek Celik 분께서 만드셨네요. boxmodel 해킹은 정말 브라우저에서의 디테일 표현에 정말 필수적인 요소입니다. ㅡㅜ 해킹을 쓰지 마라 이런저런 말이 있지만서도, 완벽하지 않은 CSS 의 렌더링이 있으니 그만큼의 감소를 해야겠죠.
[Reply]
daybreaker
June 17th, 2005 at 2:39 pm 인용
오.. 그새 답변 포스트를 올려주시다니..:smile:
그런데, 제가 기억하기로는, 그 문제가 http://www.daybreaker.info/tt/index.php?pl=39 이런 것처럼 firefox에서는 padding을 포함하고 IE에서 padding을 제외했었기 때문입니다. 이게 background를 포함하게 되면 특히 문제가 심각해지더군요. firefox가 맞는 건지, IE가 맞는 건지.. 그것도 궁금합니다. (뭐.. 꼭 어느 쪽이 틀리다 맞다라고 결론짓는다고 해서 문제 해결에 도움이 되진 않겠지만요)
[Reply]
일모리
June 17th, 2005 at 2:42 pm 인용
아,,, ㅡㅜ ie 에서는 background 문제가 있습니다…. 크흑..
이건 좀 나중에 다루겠습니다.
[Reply]
daybreaker
June 17th, 2005 at 2:43 pm 인용
헉.. 실시간 답변!!
[Reply]
crizin
June 17th, 2005 at 2:55 pm 인용
실례지만 궁금한게 있어 질문좀 드리려 하는데요..
div {width: 100px;
height: 100px;
background-color: red; /* 표준 박스모델 */
}
* html div {
background-color: blue; /* IE 5.x (WIN) */
bac\kground-color: green; /* IE 5.x (MAC) */
}
이렇게 하고 div 박스를 만들면.. 제가 이해한바로는 파폭에선 빨간박스, 윈도우 IE에서는 파란 박스, 맥 IE에서는 녹색박스가 나와야되는것 같은데 윈도우 IE 6.0에서 녹색 박스가 나오더라구요..
여기선 bac\kground-color 로 했는데 w\idth 에서도 마찬가로 IE 6.0이 w\idth 값을 제대로 읽어버리더군요.. 갑자기 막 혼란스러워져서 일모리님게 도움을 청합니다 ㅜ.ㅜ
[Reply]
일모리
June 17th, 2005 at 3:21 pm 인용
네, ie 가 standard 모드로 보통 작동할시에 ie 6 는 잘 padding을 받아들입니다.. quirks 모드에서는 5.5랑 같이 작용을 하는데요,, quirk 모드가 있을꺼라는 전제를 버리면 ie 6은 문제가 없기때문에 특별히 신경쓰지 않으셔도 됩니다.
quirk 모드는 ie6의 DOCTYPE 이 제대로 정해지지 않았을때를 말합니다. 그때에는 5.5 처럼 작용하거든요. 그럼 문제가 생겨버립니다.
어차피 mac ie 5 와 pc ie6의 렌더링이 바르게 되니 신경쓰지 않으셔도 됩니다.
[Reply]
crizin
June 17th, 2005 at 4:13 pm 인용
정말 감사합니다! 이제 좀 알겠습니다
[Reply]
tux
June 18th, 2005 at 9:55 am 인용
box model hack 을 비롯하여 많은 핵시리즈들이 필요없도록 IE에서 해결할거라고 하던거 같던데.. 글쎄요… 이런 과정들, 자업하기 정말 짜증나는부분이죠.
까이꺼 대충대충 해도 걍 잘 나왔으면 하는 바램이 있습니다. -_-
[Reply]
일모리
June 18th, 2005 at 12:23 pm 인용
crizin// 도움되셨다니 제가다 감사하네요 ㅎㅎ ^^
tux// 네 물론 IE7이 많은걸 해결한다고는 하지만, IE 5.5 가 존재하듯이 IE6는 꽤 오랬동안 존재할텐데,, 그들때문에 시간이 지나도 고생하게 되겠죠
[Reply]
지윤
June 19th, 2005 at 8:38 am 인용
IE7에서 기존 렌더링 버그들을 고치더라도, 기존 사용자들을 위해서 한동안 Hack을 사용해야 하니… 이래저래 IE는 골치덩어리네요.
[Reply]
일모리
June 19th, 2005 at 5:35 pm 인용
얼만큼 IE7 이 지원할지도 문젭니다. ㅡㅜ CSS3가 나오기 까지 IE7이 나오더래도 CSS2는 써야 하지만 제대로 인식하는건 안한다고 했으니까요 ㅎ 이거 어찌 될지 두고 봐야죠. 골치덩어리 ie~
[Reply]
vashne
June 22nd, 2005 at 12:20 pm 인용
오오. 이런 해결 방법이 있었군요. 마침 저 부분 때문에 가뜩이나 골머리 썩고 있던 차였습니다. ^^
[Reply]
일모리
June 22nd, 2005 at 1:13 pm 인용
vashne// 아 그리고, div 1 에 div2랑 div3이 있는데 div2가 float:left 값을 주어서 div3이 옆으로 붙게하면 3px 정도의 공간이 생깁니다. 이 부분도 잡아야 합니다. ㅎㅎ 곧 올리겠습니다. ^^;;
[Reply]
yser
June 23rd, 2005 at 4:19 am 인용
이노무 익스 버그 땜시 눈알 굴리기도 바쁘네요 흐..
덕분에 그간 외국 사이트 소스들에서 가끔 보이던 저 핵 기교들이 무슨 뜻인지 알겠습니다. 어휴… 영어 일일이 해석해야 할 걸 생각하면 끔찍했거든요. 감사합니다.
[Reply]
yser
June 23rd, 2005 at 4:25 am 인용
문득 든 생각인데, IE6 이 나오고 IE5 & 5.5 가 점점 덜 쓰이게 되어서 대부분의 사람들이 옮겨갈 때까지 걸린 시간과, IE6 -> IE7 되어서 6 이 쇄퇴? 하게 될 시간 중 어느 게 더 길까요? 궁금해요.. 나와봐야 알겠지만, 그 기간에 따라 얼마나 사람들이 웹 권고안 준수를 중요시할지에 대한 환기 차이도 있을 거 같아요.
물론, 국내에 한합니다. ^^
[Reply]
일모리
June 23rd, 2005 at 1:14 pm 인용
^^;; 5.5 가 쇠퇴하는 이유중의 하나는 win2000 이 점점 사용도가 줄어들어서 그런거 같습니다. 마소의 끼워팔기 였기때문에 여파가 아마도 xp 에 껴나오는 IE6까지 갈듯합니다. XP 가 쇠퇴할때까지 니까 앞으로 꽤나 오랜시간이 남았겠네요… ㅡㅜ 그래서 아마도 ie 6 이 사라지기까지 오래걸릴꺼 같습니다. 그나마 국내는 빠르게 유행이 바뀌니 다행이지만… 요즘 미국에서 나오는 CSS HACK 책을 보면 Netscape 4.x 이야기를 그렇게 많이 합니다. 물론한국에서는 거의 신경을 안서도 되는 부분이죠.
또 봐야할 변수는 Longhorn 입니다. ㅎㅎㅎㅎㅎ 과연 longhorn 이 나오면서 leopard 가 어떤 영향을 미칠지 보면 IE6, IE7만의 문제가 아닐수도 있겠네요
[Reply]