한님은 잡학편식에서 "0380. 가변폭 스킨(테마), 튼튼하십니까?"라는 글을 읽었습니다. 마침 제가 가변폭 스킨을 공개하려고 있던 참이라 눈에 들어오는군요.

CSS2 스탠다드에서 규정한 속성들 중 매우 단순하면서도 막강한 기능을 가지고 있는 것들이 있습니다. 바로 min-width, max-width, min-height, max-height 이죠.

예를 들어 <div style="min-width:250px;">가나다라마</div> 이렇게 적으면  div 안에 내용이 아무리 적어도 크기를 최소한 250px 으로 맞춰줍니다. 물론 내용이 많아지면 자연스럽게 늘어납니다. 그게 최소-넓이, min-width 지요. 반대로 내용이 아무리 많아져도 최대폭을 결정시켜주는 값은 max-width 겠지요. 두 값을 동시에 이용할 수도 있습니다. 이런 식으로 말이죠. <div style="min-width:250px; max-width:500px;">가나다라마</div>

문제는 이 편리한 속성을 인터넷 익스플로러 (이하 IE)가 알아듣지 못한다는데 있습니다. 적어도 IE 6 는 그렇습니다. IE 7 은 아직 써보지 않아서 잘 모르겠고요. 이 중에 특히 min-width, min-height 가 문제입니다. 브라우저의 가로폭이 줄어들다 보면 사이트의 기본적인 레이아웃이 망가질 수 있기 때문이지요. 구글링을 하면 이 문제로 고통받는 수많은 인민들이 보일 겁니다. 나무아비타불…

이 문제를 해결하기 위한 몇 가지 hack이 존재하기는 하지만 제 경험으로는 어떤 경우에는 제대로 작동하고, 또 어떤 경우에는 작동하지 않는 경우가 있습니다. 엄밀히 따지면 그 hack을 제대로 적용시키려면 디자인을 해체하고 다시 구성해야 되는 일이 생기는가 하면 레이아웃이 복잡하게 정의되어 있을 때는 다른 요소들과 충돌하는 경우도 생긴다는 것이지요.

하지만, 이 hack에 대해서도 간단하게 설명하고 넘어가자면 expression 이라는 걸 이용하는 겁니다. 이건 또 IE 만 알아듣는다죠. (나중에 따로 설명할게요.)

다른 브라우저에서는 이와 같이 적으면 되는 정의를

.box {min-width:350px;}

IE를 위해서는 이런 식으로 추가하는 겁니다.

.box {width:expression(document.body.clientWidth < 1024? "350px": "auto" );}

클라이언트 브라우저의 화면 가로 사이즈가 1024px 보다 작으면 350px 을 유지하라는 뜻이죠.


결국 제가 내린 결론은 레이아웃과 관련된 모든 문제를 CSS로 처리할 필요는 없다는 것입니다. 아니, 완벽하게 처리할 수 없다가 더 맞는 말이겠지요.

그렇다면 IE 에서 min-width와 max-height를 구현하는 가장 쉬운 방법은요? 이미지를 사용하는 겁니다. min-width를 예로 들죠. 어떤 영역이 커지면 커졌지 350px 이하로는 줄어들지 말아야 할 어떤 영역이 있다고 한다면,

1. 가로 세로 1px 짜리 투명 gif 이미지 하나를 준비합니다. 이름을 spacer.gif 라고 하죠.

2. 필요한 영역 안에 간단하게 다음과 같이 적어주세요.
   
<img src="spacer.gif" border=0 width="350px" height="1px">

3. 끝

간단한 원리지요. 가로폭이 350px인 이미지가 영역 안에 들어있으니 해당 영역은 절대 그 이하로 표시되지 않을 겁니다. 게다가 어차피 투명 이미지이기 때문에 세로 1px 이 남아있어도 큰 지장은 없겠지요. 보이지 않으니까요. 물론 나중에 디자인을 수정하면 스타일시트 말고도 문서를 직접 손봐야 하는 번거로움이 생겼지만 그래도 뭐, 어쩌겠어요.

간단하죠? IE 쪽에서는 언제쯤 이 문제를 수정할까요? 혹시 벌써 수정했나요? Hey, IE! Can you speak CSS2?



p.s. 하지만 이 방법 역시 문제가 있습니다. 바로 width를 em으로 지정했을 때이지요. 이건 위의 방법으로는 불가능합니다. img 태그 안의 width를 em으로 줄 수 없는 걸로 알고 있어요.

,
스킨을 만들면서 태터툴즈의 기본스킨을 보니 스타일시트가 두 개 설정되어 있었다.

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

media 라는 파라미터와 screen, print 라는 값이 굉장히 낯설었는데, print.css 를 열어놓고 브라우저에서 인쇄 미리보기를 해 보니 한눈에 알 수 있었다. 한마디로 이야기하면, media="print"를 적어주면 해당 스타일은 프린트를 위한 스타일로 지정된다는 것.

스타일시트에서 해당 영역을 display:none; 으로 지정하면 그 안에 내용이 들어있어도 화면에 보이지 않게 만들어주는 역할을 하는데, 이걸 적절히 이용해서 프린트 쪽 스타일시트에 적용하면 프린트를 할 때 꼭 필요없는 요소들 - 각종 사이드바의 내용들, 이미지로 만들어진 제목과 메뉴들, 트랙백 표시 등을 보이지 않게 만들어 줄 수 있는 것이다.

예1 - 화면을 위한 스타일시트

사이드바 등 각종 설정이 보이던 화면을,


예2 - 프린트를 위한 스타일시트

이처럼 출력해서 읽기에는 불필요한 요소를 빼고 프린트를 할 수 있다.


처음 만든 스킨은 이걸 제대로 처리하지 못했는데, 두번째 스킨은 이걸 잘 처리했다. 작지만 참으로 유용한 기술이다. 종이도 아끼고 잉크도 아끼는, 인간을 위한 기술. :)
,
스킨을 배포합니다.

스킨 미리보기

Mac Look 1.1은 이런 모양입니다.


스킨명

Mac Look 1.1


개요

조금은 차분한 느낌으로 만들었습니다. 원래는 윈도우와 맥의 분위기를 섞는 컨셉을 유지하려 하였으나 만들고 나니 맥의 느낌만 강하게 남아 그냥 맥룩이라고 했습니다. 제가 지금 사용하는 데스크탑 테마가 준 (Zune) 테마인데, 그것과 애플의 아쿠아 스타일을 함께 적용하려 한 거죠. 뭐, 어쨌든 그렇습니다.


내용

- 2단형 스킨입니다. 태터툴즈의 사이드바 기능을 지원합니다.
  (관리자 모드에서 바로 넣었다 뺐다 할 수 있어요.)

- 블로그 로고 이미지를 보여줍니다.
  단, 가로 200px 에 최적화되어 있습니다. 주의해주세요.

- 컨텐츠가 들어가는 부분의 가로폭은 610px 에 맞춰져 있습니다만,
  혹시 더 좁은 스킨을 필요로 하는 분들이 계실 것 같아 500px 짜리도 넣었습니다.
  압축을 풀어보면 index.500.xml style.500.css 와 index.610.xml style.610.css이 추가로 들어있습니다.
  사용법은 아시겠죠? 가로 넓이 500px 짜리가 필요하면
  이름을 index.500.xml style.500.css을 index.xml과 style.css로 바꾸고 사용하면 됩니다.

- 또한 가로폭을 원하는 만큼 지정하는 경우도 그리 어렵지 않습니다.
  style.css 와 index.xml 만 수정하면 됩니다.
  수정 방법은 style.css 안에 주석으로 넣어두었습니다.

- 또한 폰트 크기라든지 색깔, 사용된 이미지 등은 style.css 파일을 수정하는 것만으로 가능합니다.

- 자유롭게 수정이 가능하며, 저작권 표시하에 재배포 가능합니다.

- 사실 문의를 해도 모르는 게 많아서 대답할 수 있는 건 별로 없지 않을까 합니다. 살살 물어주세요. :p


수정하기

- style.css 에 적은 주석을 여기에 적어보면,

/* ****************************************************
   만약 실제 글이 보여지는 영역 (contentWidth)을 변경하고 싶다면
   이 파일 (style.css)과 index.xml만 수정하면 됩니다.
   찾기 쉽도록 주석을 달았으니 주석을 검색하여 변경하면 됩니다.

   스킨을 처음 설치하면 contentWidth의 기본값은 610px이고,
   이 값은 index.xml 에 명시되어 있습니다.

   만약 contentWidth를 800px로 변경하고 싶다면,
   크게 두 단계로 진행됩니다.

   [단계 A]

   index.xml로 가서 다음과 같은 문장을 찾은 후
   <contentWidth>610</contentWidth>

   이 부분을 다음과 같이 변경하세요.
   <contentWidth>800</contentWidth>

   [단계 B]

   이 파일 (style.css)에서 contentWidth를 검색하여
   주석에 표시된 계산식대로 수정해주면 됩니다.
   style.css 안에 contentWidth를 찾아 전부 해주시면 되요.

   ############################################
   예1)
   만약 검색을 통해 아래와 같은 문장을 찾았다면
   width:610px; / * contentWidth - 10 * /

   새로운 contentWidth가 800px이니
   width값으로 다음과 같이 변경하세요.
   width:790px; / * contentWidth - 10px * /

   예2)
   만약 이런 문장을 찾았다면
   width:680px; / * contentWidth + 70px * /

   새로운 contentWidth가 800px이니
   width값으로 다음과 같이 변경하세요.
   width:880px; / * contentWidth + 70px * /
   ############################################

   [변경 끝]

   **************************************************** */

- 적고 보니 굉장히 복잡해 보이지만, 하나씩 해보면 굉장히 쉬운 작업이란 걸 아실 수 있을......까요?  ;;;

- 테스트 환경은 윈도우XP + 파이어폭스 2.0.0.1, 인터넷 익스플로러 6.0 에서 테스트를 했습니다.
  물론 태터툴즈 1.1.1티스토리 1.1 이고요.
  다른 환경과 브라우저에서는 어떻게 보일지 몰라요. @.@;


다운로드 받으러 가기

▶ (클릭) 태터툴즈 스킨 자료실 [TT 1.1 & 티스토리 1.1] Mac Look 1.1




그리고

업그레이드 버전이 공개되었습니다.
미디어로그와 키로그 기능이 포함된 1.1b 버전을 이용할 수 있습니다.

스킨 업그레이드 Mac Look 1.1b 로 가서 다운받기


,